Validate schemas¶
Module contains base schema for other complex pydantic models and simple schemas to use in other places
- class luna_handlers.classes.schemas.base_schema.BaseSchema(**data)[source]
Base schema model
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.base_schema.HandlerSettings[source]
Container class for service settings.
- classmethod initialize(faceDescriptorVersion, bodyDescriptorVersion, handlersLimitsSettings, attributeStorageSettings)[source]
Initialize settings for schemas.
- Parameters:
faceDescriptorVersion – default face descriptor version
bodyDescriptorVersion – default body descriptor version
handlersLimitsSettings – luna handlers limits settings
attributeStorageSettings – attribute storage settings
- class luna_handlers.classes.schemas.base_schema.SchemaUpdaterMixin[source]
Extended base schema model.
- settings
alias of
HandlerSettings
Module contains schemas for attribute upgrade handler
- class luna_handlers.classes.schemas.attribute_upgrade.BodyUpgradeData(**data)[source]
Body upgrade data schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'policy': FieldInfo(annotation=BodyUpgradePolicy, required=False, default=BodyUpgradePolicy(descriptorVersion=0), alias='policy'), 'samples': FieldInfo(annotation=List[Annotated[str, StringConstraints]], required=True, alias='samples', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.attribute_upgrade.BodyUpgradePolicy(**data)[source]
Body attribute upgrade policy
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorVersion': FieldInfo(annotation=Literal[102, 103, 104, 105, 106, 107, 108, 109, 110], required=False, default_factory=<lambda>, alias='descriptor_version')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.attribute_upgrade.FaceUpgradeData(**data)[source]
Face upgrade data schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'policy': FieldInfo(annotation=FaceUpgradePolicy, required=False, default=FaceUpgradePolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractDescriptor=1, descriptorVersion=0), alias='policy'), 'samples': FieldInfo(annotation=List[Annotated[str, StringConstraints]], required=True, alias='samples', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.attribute_upgrade.FaceUpgradePolicy(**data)[source]
Face attribute upgrade policy
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorVersion': FieldInfo(annotation=Literal[46, 52, 54, 56, 57, 58, 59, 60, 62], required=False, default_factory=<lambda>, alias='descriptor_version'), 'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes'), 'extractDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='extract_descriptor'), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(__context)
This function is meant to behave like a BaseModel method to initialise private attributes.
It takes context as an argument since that’s what pydantic-core passes when calling it.
- Parameters:
self – The BaseModel instance.
__context – The context.
- Return type:
None
- classmethod validatePolicy(values)[source]
Validate attributes are select for extract :raises VLException(Error.NotSelectedAttributesForExtract, 400, False) if no attributes select for extract:
- class luna_handlers.classes.schemas.attribute_upgrade.SamplesForUpgrade(**data)[source]
Samples for upgrade schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyUpgradeData': FieldInfo(annotation=BodyUpgradeData, required=False, default_factory=<lambda>, alias='body_upgrade_data'), 'eventId': FieldInfo(annotation=EventId, required=False, default_factory=<lambda>, alias='event_id'), 'faceId': FieldInfo(annotation=FaceId, required=False, default_factory=<lambda>, alias='face_id'), 'faceUpgradeData': FieldInfo(annotation=FaceUpgradeData, required=False, default_factory=<lambda>, alias='face_upgrade_data'), 'upgradeData': FieldInfo(annotation=FaceUpgradeData, required=False, default_factory=<lambda>, alias='upgrade_data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- classmethod validateOneOf(values)[source]
Validate one of request value:
‘face_id’ and ‘upgrade_data’ or ‘event_id’ and ‘face_upgrade_data’ and/or ‘body_upgrade_data’
Module contains schemas for conditional tags policy
- class luna_handlers.classes.schemas.conditional_tags_policy.ConditionalTagsPolicy(**data)[source]
Conditional tags policy schema
- execute(events)[source]
Execute additional tags policy
- Parameters:
events – processing events
- Return type:
None
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters'), 'tag': FieldInfo(annotation=Tag, required=True, alias='tag')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.conditional_tags_policy.Tag[source]
Tag schema
Module contains schemas for detector handler
- class luna_handlers.classes.schemas.detector.Detector(**data)[source]
Model for detector handler with urls or samples
- static checkRequiredFaceBBox(values)[source]
Check required face bounding box for incoming image
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- classmethod validateHandler(values)[source]
Validate handler model
- Return type:
dict
Module contains schemas for extract policy
- class luna_handlers.classes.schemas.extract_policies.BaseExtractPolicy(**data)[source]
Base extract policy
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes'), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.extract_policies.HandlerExtractPolicy(**data)[source]
Handler extract policy schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'extractBodyDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_body_descriptor'), 'extractFaceDescriptor': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='extract_face_descriptor'), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Module contains schemas for extractor handler
- class luna_handlers.classes.schemas.extractor.Extractor(**data)[source]
Model for extractor handler with samples
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Module contains schemas for filters
- class luna_handlers.classes.schemas.filters.AttributesFilters(**data)[source]
Matching filters schema
- property isEmpty: bool
Check there is nothing to filter.
- Returns:
True if all filters are equal to their defaults
- Return type:
bool
- isEventSatisfies(event)[source]
Does event satisfy filters by face attributes.
- Parameters:
event – event
- Returns:
true if event satisfied a filters otherwise false
- Return type:
bool
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte'), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt'), 'deepfake': FieldInfo(annotation=List[IntDeepfake], required=False, default_factory=<lambda>, alias='deepfake', metadata=[Len(min_length=1, max_length=2)]), 'ethnicities': FieldInfo(annotation=List[IntEthnicities], required=False, default_factory=<lambda>, alias='ethnicities', metadata=[Len(min_length=1, max_length=4)]), 'gender': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='gender'), 'liveness': FieldInfo(annotation=List[IntLiveness], required=False, default_factory=<lambda>, alias='liveness', metadata=[Len(min_length=1, max_length=3)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.filters.ComplexFilter(**data)[source]
Complex filter - includes attributes and list of match filters
- property isEmpty: bool
Check there is nothing to filter.
- Returns:
True if all filters are equal to None
- Return type:
bool
- isEventSatisfies(event)[source]
Does an event satisfy the filters.
- Parameters:
event – event
- Returns:
true if event satisfied filters otherwise false
- Return type:
bool
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte', alias_priority=1), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt', alias_priority=1), 'deepfake': FieldInfo(annotation=List[IntDeepfake], required=False, default_factory=<lambda>, alias='deepfake', alias_priority=1, metadata=[Len(min_length=1, max_length=2)]), 'ethnicities': FieldInfo(annotation=List[IntEthnicities], required=False, default_factory=<lambda>, alias='ethnicities', alias_priority=1, metadata=[Len(min_length=1, max_length=4)]), 'gender': FieldInfo(annotation=Literal[0, 1], required=False, default_factory=<lambda>, alias='gender', alias_priority=1), 'liveness': FieldInfo(annotation=List[IntLiveness], required=False, default_factory=<lambda>, alias='liveness', alias_priority=1, metadata=[Len(min_length=1, max_length=3)]), 'match': FieldInfo(annotation=List[MatchFilter], required=False, default_factory=<lambda>, alias='match', metadata=[Len(min_length=1, max_length=30)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.filters.MatchFilter(**data)[source]
Simple match filter
- property isEmpty: bool
Check there is nothing to filter.
- Returns:
True if all filters are equal to their defaults
- Return type:
bool
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'label': FieldInfo(annotation=Str36, required=True, alias='label'), 'similarityGte': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='similarity__gte'), 'similarityLte': FieldInfo(annotation=StrictFloat01, required=False, default=1.0, alias='similarity__lte')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Module contains schemas for handler
- class luna_handlers.classes.schemas.handler.CachedHandlerModel(**data)[source]
Cached handler model | contains minimal required fields
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=True, alias='account_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'handlerType': FieldInfo(annotation=HandlerType, required=False, default=<HandlerType.static: 0>, alias='handler_type'), 'lambdaId': FieldInfo(annotation=Union[str, NoneType], required=False, alias='lambda_id'), 'lastUpdateTime': FieldInfo(annotation=CustomDatetime, required=True, alias='last_update_time'), 'policies': FieldInfo(annotation=Union[Policies, NoneType], required=False, alias='policies')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(_CachedHandlerModel__context)[source]
Post init
- static postInitMatchPolicy(matchPolicies, accountId)[source]
Post init matching policy - apply handler account id for matching candidates :param matchPolicies: matching policies :param accountId: handler account id
- Return type:
None
- class luna_handlers.classes.schemas.handler.CreateHandlerModel(**data)[source]
Handler model for handler creation
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'description': FieldInfo(annotation=Str128, required=False, default='', alias='description'), 'handlerType': FieldInfo(annotation=HandlerType, required=False, default=<HandlerType.static: 0>, alias='handler_type'), 'lambdaId': FieldInfo(annotation=Union[UUID, NoneType], required=False, alias='lambda_id'), 'policies': FieldInfo(annotation=Union[CreateHandlerPolicies, NoneType], required=False, alias='policies')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(_CreateHandlerModel__context)[source]
Validate handler, post init
- class luna_handlers.classes.schemas.handler.CreateHandlerPolicies(*, detect_policy: HandlerDetectPolicy = None, extract_policy: HandlerExtractPolicy = HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), match_policy: list[MatchPolicy] = [], conditional_tags_policy: list[ConditionalTagsPolicy] = [], storage_policy: StoragePolicy = None)[source]
- asDict()[source]
Get data from initialized model excluding match policy on-load transformations.
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'conditionalTagsPolicy': FieldInfo(annotation=list[ConditionalTagsPolicy], required=False, default=[], alias='conditional_tags_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'detectPolicy': FieldInfo(annotation=HandlerDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy', alias_priority=1), 'extractPolicy': FieldInfo(annotation=HandlerExtractPolicy, required=False, default=HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), alias='extract_policy', alias_priority=1), 'matchPolicy': FieldInfo(annotation=list[MatchPolicy], required=False, default=[], alias='match_policy', alias_priority=1, metadata=[MaxLen(max_length=30)]), 'storagePolicy': FieldInfo(annotation=StoragePolicy, required=False, default_factory=<lambda>, alias='storage_policy', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(__context)
This function is meant to behave like a BaseModel method to initialise private attributes.
It takes context as an argument since that’s what pydantic-core passes when calling it.
- Parameters:
self – The BaseModel instance.
__context – The context.
- Return type:
None
- class luna_handlers.classes.schemas.handler.FaceInputEstimationsModel(**data)[source]
Model for incoming face estimations: urls, image or samples
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image'), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype'), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- classmethod validateHandler(values)[source]
Validate handler model
- Return type:
dict
- class luna_handlers.classes.schemas.handler.HandlerInputEstimationsModel(*, image: str | None = None, mimetype: str | None = None, face_bounding_boxes: List[BoundingBoxSchema] = None, body_bounding_boxes: List[BoundingBoxSchema] = None, urls: List[UrlForInputEvent] = None, samples: List[SampleForInputEvent] | List[UUID] = None, detect_time: CustomDatetime = None, detect_ts: DetectTs | None = None, image_origin: str = None, image_origin_mimetype: str = None, meta: dict = None)[source]
Handler model for incoming estimations: urls, image(with face and/or body bounding boxes) or samples
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', metadata=[Len(min_length=1, max_length=None)]), 'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time'), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, alias='detect_ts'), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image'), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta'), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype'), 'samples': FieldInfo(annotation=Union[Annotated[List[SampleForInputEvent], AfterValidator], Annotated[List[Annotated[UUID, BeforeValidator]], AfterValidator]], required=False, default_factory=<lambda>, alias='samples'), 'urls': FieldInfo(annotation=List[UrlForInputEvent], required=False, default_factory=<lambda>, alias='urls', metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- classmethod validateHandler(values)[source]
Validate handler model
- Return type:
dict
- class luna_handlers.classes.schemas.handler.SampleForInputEvent(**data)[source]
Sample schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time'), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, alias='detect_ts'), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta'), 'sampleId': FieldInfo(annotation=UUID, required=True, alias='sample_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.handler.UrlForInputEvent(**data)[source]
Url schema with detection time and image origin
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'detectTime': FieldInfo(annotation=CustomDatetime, required=False, default_factory=<lambda>, alias='detect_time'), 'detectTs': FieldInfo(annotation=Union[DetectTs, NoneType], required=False, alias='detect_ts'), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'imageOrigin': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin', metadata=[Strict(strict=True)]), 'imageOriginMimetype': FieldInfo(annotation=str, required=False, default_factory=<lambda>, alias='image_origin_mimetype', metadata=[Strict(strict=True)]), 'meta': FieldInfo(annotation=dict, required=False, default_factory=<lambda>, alias='meta'), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.handler.ValidatorHandlerModel(**data)[source]
Handler validator model
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'policies': FieldInfo(annotation=Policies, required=True, alias='policies')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Module contains schemas for match policy
- class luna_handlers.classes.schemas.match_policy.AttributeMatchCandidates(**data)[source]
Face match candidates
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'attributeIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='attribute_ids', metadata=[Len(min_length=0, max_length=1000)]), 'origin': FieldInfo(annotation=Literal['attributes'], required=True, alias='origin')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.BaseMatchPolicy(**data)[source]
Base match policy schema
- applyMatchingResultToEvents(events, matchingResult)[source]
Unpack response data and updates events
- Parameters:
events – list of events that suppose to be matching
matchingResult – result of matching
- Return type:
None
- classmethod descriptorValidator(descriptor, values)[source]
Candidate descriptor parameters validator, depends on matching candidates
- Return type:
Optional
[str
,None
]
- async execute(events, luna3Client)[source]
- Execute match policy:
filter events fo matching
match events’ descriptors with policy candidates
Results are stored in the input events.
- Parameters:
events – events (references)
luna3Client – client
- Return type:
None
- getEventsReferences(events)[source]
Builds descriptor references list for events
- Parameters:
events – list of events that suppose to be matching
- Returns:
List of descriptors references
- Return type:
UnionType
[list
[RawDescriptorReference
],None
]
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates, AttributeMatchCandidates], required=True, alias='candidates', discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor'), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters'), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label'), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit'), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets'), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- prepareCandidatesFilters()[source]
Builds filter data from candidates’ fields, skipping unset ones
- Returns:
Dict with actual data from matching candidate
- Return type:
dict
[str
,any
]
- prepareMatchPayload(candidatesFilters, references)[source]
Builds payload with all the necessary attributes for matching request
- Parameters:
candidatesFilters – filter built from candidate’s data
references – list of descriptor references built from events that suppose to be matching
- Returns:
Payload dictionary with candidates and references lists
- Return type:
dict
[str
,list
[UnionType
[Candidates
,RawDescriptorReference
]]]
- async requestMatching(luna3Client, matchPayload)[source]
Sends request for matching
- Parameters:
luna3Client – client for communication with matching service
matchPayload – payload dictionary with candidates and references lists
- Returns:
Result of matching
- Return type:
LunaResponse
- classmethod targetsValidator(targets, values)[source]
Targets validator, depends on matching candidates
- Return type:
Optional
[List
[str
],None
]
- class luna_handlers.classes.schemas.match_policy.EventMatchCandidates(**data)[source]
Event match candidates
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'ageGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__gte'), 'ageLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='age__lt'), 'apparentAgeGte': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='apparent_age__gte'), 'apparentAgeLt': FieldInfo(annotation=IntAge, required=False, default_factory=<lambda>, alias='apparent_age__lt'), 'apparentGender': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='apparent_gender', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'areas': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='areas', metadata=[Len(min_length=1, max_length=1000)]), 'backpackStates': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='backpack_states', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'cities': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='cities', metadata=[Len(min_length=1, max_length=1000)]), 'createTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__gte'), 'createTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__lt'), 'deepfake': FieldInfo(annotation=list[Union[Literal[0, 1], NoneType]], required=False, default_factory=<lambda>, alias='deepfake', metadata=[MinLen(min_length=1), MaxLen(max_length=3), AfterValidator(func=<function validateUniqueItems>)]), 'districts': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='districts', metadata=[Len(min_length=1, max_length=1000)]), 'emotions': FieldInfo(annotation=list[Union[Literal[1, 2, 3, 4, 5, 6, 7], NoneType]], required=False, default_factory=<lambda>, alias='emotions', metadata=[MinLen(min_length=1), MaxLen(max_length=8), AfterValidator(func=<function validateUniqueItems>)]), 'endTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='end_time__gte'), 'endTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='end_time__lt'), 'ethnicGroups': FieldInfo(annotation=list[Union[Literal[1, 2, 3, 4], NoneType]], required=False, default_factory=<lambda>, alias='ethnic_groups', metadata=[MinLen(min_length=1), MaxLen(max_length=5), AfterValidator(func=<function validateUniqueItems>)]), 'eventIdGte': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='event_id__gte', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'eventIdLt': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='event_id__lt', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'eventIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='event_ids', metadata=[Len(min_length=1, max_length=1000)]), 'externalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='external_ids', metadata=[Len(min_length=1, max_length=1000)]), 'faceIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='face_ids', metadata=[Len(min_length=1, max_length=1000)]), 'gender': FieldInfo(annotation=Union[Literal[0, 1], NoneType], required=False, alias='gender'), 'geoPosition': FieldInfo(annotation=Union[GeoPosition, NoneType], required=False, alias='geo_position'), 'handlerIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='handler_ids', metadata=[Len(min_length=1, max_length=1000)]), 'headwearApparentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'white', 'other'], NoneType]], required=False, default_factory=<lambda>, alias='headwear_apparent_colors', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'headwearStates': FieldInfo(annotation=List[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='headwear_states', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'house_numbers': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='house_numbers', metadata=[Len(min_length=1, max_length=1000)]), 'liveness': FieldInfo(annotation=list[Union[Literal[0, 1, 2], NoneType]], required=False, default_factory=<lambda>, alias='liveness', metadata=[MinLen(min_length=1), MaxLen(max_length=4), AfterValidator(func=<function validateUniqueItems>)]), 'lowerGarmentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'blue', 'green', 'gray', 'orange', 'purple', 'red', 'white', 'yellow', 'pink', 'brown', 'beige', 'khaki', 'multicolored'], NoneType]], required=False, default_factory=<lambda>, alias='lower_garment_colors', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'lowerGarmentTypes': FieldInfo(annotation=List[Union[Literal['undefined', 'trousers', 'shorts', 'skirt'], NoneType]], required=False, default_factory=<lambda>, alias='lower_garment_types', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'masks': FieldInfo(annotation=list[Union[Literal[1, 2, 3], NoneType]], required=False, default_factory=<lambda>, alias='masks', metadata=[MinLen(min_length=1), MaxLen(max_length=4), AfterValidator(func=<function validateUniqueItems>)]), 'meta': FieldInfo(annotation=Meta, required=False, default_factory=<lambda>, alias='meta'), 'origin': FieldInfo(annotation=Literal['events'], required=True, alias='origin'), 'shoesApparentColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'white', 'other'], NoneType]], required=False, default_factory=<lambda>, alias='shoes_apparent_colors', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'sleeveLengths': FieldInfo(annotation=List[Union[Literal['short', 'long', 'undefined'], NoneType]], required=False, default_factory=<lambda>, alias='sleeve_lengths', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'sources': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='sources', metadata=[Len(min_length=1, max_length=1000)]), 'streamIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='stream_ids', metadata=[Len(min_length=1, max_length=1000)]), 'streets': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='streets', metadata=[Len(min_length=1, max_length=1000)]), 'tags': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='tags', metadata=[Len(min_length=1, max_length=1000)]), 'topMatchingCandidatesLabel': FieldInfo(annotation=Str36, required=False, default_factory=<lambda>, alias='top_matching_candidates_label'), 'topSimilarExternalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='top_similar_external_ids', metadata=[Len(min_length=1, max_length=1000)]), 'topSimilarObjectIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='top_similar_object_ids', metadata=[Len(min_length=1, max_length=1000)]), 'topSimilarObjectSimilarityGte': FieldInfo(annotation=StrictFloat01, required=False, default_factory=<lambda>, alias='top_similar_object_similarity__gte'), 'topSimilarObjectSimilarityLt': FieldInfo(annotation=StrictFloat01, required=False, default_factory=<lambda>, alias='top_similar_object_similarity__lt'), 'trackIds': FieldInfo(annotation=List[Union[Str36, NoneType]], required=False, default_factory=<lambda>, alias='track_ids', metadata=[Len(min_length=1, max_length=1000)]), 'upperClothingColors': FieldInfo(annotation=List[Union[Literal['undefined', 'black', 'blue', 'green', 'gray', 'orange', 'purple', 'red', 'white', 'yellow', 'pink', 'brown', 'beige', 'khaki', 'multicolored'], NoneType]], required=False, default_factory=<lambda>, alias='upper_clothing_colors', metadata=[MinLen(min_length=1), AfterValidator(func=<function validateUniqueItems>)]), 'userData': FieldInfo(annotation=Str128, required=False, default_factory=<lambda>, alias='user_data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.FaceMatchCandidates(**data)[source]
Face match candidates
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'accountId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='account_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'createTimeGte': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__gte'), 'createTimeLt': FieldInfo(annotation=CustomExtendedDatetime, required=False, default_factory=<lambda>, alias='create_time__lt'), 'externalIds': FieldInfo(annotation=List[Str36], required=False, default_factory=<lambda>, alias='external_ids', metadata=[Len(min_length=1, max_length=1000)]), 'faceIdGte': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='face_id__gte', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'faceIdLt': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='face_id__lt', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'faceIds': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='face_ids', metadata=[Len(min_length=1, max_length=1000)]), 'listId': FieldInfo(annotation=UUID, required=False, default_factory=<lambda>, alias='list_id', metadata=[BeforeValidator(func=<function uuidRegexValidator>)]), 'origin': FieldInfo(annotation=Literal['faces'], required=True, alias='origin'), 'userData': FieldInfo(annotation=Str128, required=False, default_factory=<lambda>, alias='user_data')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.GeoPosition(**data)[source]
Geo position: longitude and latitude with deltas
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'latitudeDelta': FieldInfo(annotation=FloatGeoDelta, required=False, default=0.01, alias='latitude_delta'), 'longitudeDelta': FieldInfo(annotation=FloatGeoDelta, required=False, default=0.01, alias='longitude_delta'), 'originLatitude': FieldInfo(annotation=FloatLatitude, required=True, alias='origin_latitude'), 'originLongitude': FieldInfo(annotation=FloatLongitude, required=True, alias='origin_longitude')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.MatchPolicy(**data)[source]
Match policy schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates], required=True, alias='candidates', discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor', alias_priority=1), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters', alias_priority=1), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label', alias_priority=1), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit', alias_priority=1), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets', alias_priority=1), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.MatchingDescriptor(**data)[source]
Matching descriptor parameters
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'descriptorType': FieldInfo(annotation=Literal['face', 'body'], required=False, default='face', alias='descriptor_type')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.match_policy.OriginEnum(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Match candidates origin
Module contains schemas for policies
- class luna_handlers.classes.schemas.policies.Policies(**data)[source]
Policies schema
- async checkListsAvailability(luna3Client, accountId)[source]
Check availability of lists from matching and link to list policies.
- Parameters:
luna3Client – luna platform client
accountId – account id
- Raises:
VLException(Error.ListNotFound.format(listId), 400, False), if some list is not found –
- Return type:
None
- async execute(events, accountId, monitoring, config, luna3Client, redisContext, plugins)[source]
Execute all policies for handler.
- Parameters:
events – events
accountId – account id
monitoring – monitoring data
config – handler configuration parameters
luna3Client – luna platform client
redisContext – redis context
plugins – plugin manager
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'conditionalTagsPolicy': FieldInfo(annotation=list[ConditionalTagsPolicy], required=False, default=[], alias='conditional_tags_policy', metadata=[MaxLen(max_length=30)]), 'detectPolicy': FieldInfo(annotation=HandlerDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy'), 'extractPolicy': FieldInfo(annotation=HandlerExtractPolicy, required=False, default=HandlerExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0, extractFaceDescriptor=1, extractBodyDescriptor=0), alias='extract_policy'), 'matchPolicy': FieldInfo(annotation=list[MatchPolicy], required=False, default=[], alias='match_policy', metadata=[MaxLen(max_length=30)]), 'storagePolicy': FieldInfo(annotation=StoragePolicy, required=False, default_factory=<lambda>, alias='storage_policy')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- publishEventsToPlugins(events, accountId, plugins)[source]
Publish events to other services.
- Parameters:
events – list of events
accountId – account id
plugins – plugin manager
- Return type:
None
- static validateDetectAndExtractCompatibility(detectPolicy, extractPolicy)[source]
Validate detect and extract policies compatibility
- static validateDetectPolicyNotEmpty(detectPolicy)[source]
Validate non-empty detect policy
- static validateGeneratedAttributesFilters(detectPolicy, extractPolicy, matchPolicies, conditionalTagsPolicies, storagePolicy)[source]
Validate attributes and detect/extract policy compatibility
- static validateMatchAndExtractCompatibility(matchPolicies, extractPolicy)[source]
Validate match and extract policies compatibility
- static validateMatchLabelsCompatibility(matchPolicies, conditionalTagsPolicies, storagePolicy)[source]
Validate matching label compatibility
- static validateMatchPolicyUniqueLabels(matchPolicies)[source]
Validate match policy matching label uniqueness
- classmethod validatePolicies(values)[source]
Execute all compatibility validators
- async luna_handlers.classes.schemas.policies.checkListAvailability(luna3Client, listId, accountId=None)[source]
Check availability of list.
- Parameters:
luna3Client – luna platform client
accountId – account id
listId – list id
- Returns:
Response from luna-faces service
- Return type:
LunaResponse
- luna_handlers.classes.schemas.policies.getObjectRecursively(data, expectedType)[source]
Recursively get object of expected type
- Return type:
list
[~T]
Module contains simple schemas for multiple usage
- class luna_handlers.classes.schemas.simple_schemas.BoundingBoxSchema(**data)[source]
Bounding box schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'height': FieldInfo(annotation=SDKInt, required=True, alias='height'), 'width': FieldInfo(annotation=SDKInt, required=True, alias='width'), 'x': FieldInfo(annotation=SDKInt, required=True, alias='x'), 'y': FieldInfo(annotation=SDKInt, required=True, alias='y')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.simple_schemas.UrlBboxSchema(**data)[source]
Url with face and body bounding boxes schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'bodyBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='body_bounding_boxes', metadata=[Len(min_length=1, max_length=None)]), 'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'url': FieldInfo(annotation=str, required=True, alias='url', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.simple_schemas.UrlWithFaceBbox(**data)[source]
Url with face bounding boxes schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', metadata=[Len(min_length=1, max_length=None)]), 'url': FieldInfo(annotation=str, required=True, alias='url')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Module contains schemas for storage policy
- class luna_handlers.classes.schemas.storage_policy.AttributeStorePolicy(**data)[source]
Attribute store policy
- async execute(events, accountId, luna3Client)[source]
Save attributes.
- Parameters:
events – events
accountId – account id
luna3Client – client
- Return type:
None
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeAttribute': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_attribute'), 'ttl': FieldInfo(annotation=IntAttributeTTL, required=False, default_factory=<lambda>, alias='ttl')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.BasicAuthorization(**data)[source]
Callback basic authorization
- property headers
Get basic authorization headers
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'login': FieldInfo(annotation=str, required=True, alias='login', metadata=[StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=True, min_length=None, max_length=128, pattern='^[^\\x00]*$')]), 'password': FieldInfo(annotation=str, required=True, alias='password', metadata=[StringConstraints(strip_whitespace=None, to_upper=None, to_lower=None, strict=True, min_length=None, max_length=128, pattern='^[^\\x00]*$')]), 'type': FieldInfo(annotation=Literal['basic'], required=True, alias='type')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.BodySamplePolicy(**data)[source]
Body sample policy
- async execute(events, accountId, bucket, luna3Client)[source]
Save body samples.
- Parameters:
events – events
accountId – account id
bucket – bucket name
luna3Client – client
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_sample')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.EventStoragePolicy(**data)[source]
Event store policy
- async execute(events, accountId, luna3Client)[source]
Save events.
- Parameters:
events – events
accountId – account id
luna3Client – client
- Return type:
None
- generateEventToSend(event)[source]
Prepare the event data for saving. :param event: Base event. :return: Constructed object based on event’s parameters.
- static getEventBasicAttributes(event)[source]
Get the basic attributes of an event. :param event: Base event. :return: Constructed object based on event’s body descriptor parameters.
- static getEventFaceAttributes(event)[source]
Get the face attributes of an event :param event: Base event. :return: Constructed object based on event’s face descriptor parameters.
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeEvent': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_event'), 'waitSaving': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='wait_saving')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- async classmethod onShutdown()[source]
Stop Policies
- async classmethod onStartup()[source]
Init Policies
- static processDetectionSamplesData(event)[source]
Add detection rect properties to event detections samples data :param event: Event to update
- static processEventMatchCandidatesData(event)[source]
Exclude non supported properties from faces’ and events’ matching candidates :param event: Event to update
- class luna_handlers.classes.schemas.storage_policy.FaceSamplePolicy(**data)[source]
Face sample policy
- async execute(events, accountId, bucket, luna3Client)[source]
Save face samples.
- Parameters:
events – events
accountId – account id
bucket – bucket name
luna3Client – client
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='store_sample')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.FaceStoragePolicy(**data)[source]
Face store policy
- async execute(events, accountId, luna3Client)[source]
Execute face policy (with link to list policy).
- Parameters:
events – processing events
accountId – account id
luna3Client – luna3 client
- Return type:
None
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'linkToListsPolicy': FieldInfo(annotation=list[LinkToListsPolicy], required=False, default=[], alias='link_to_lists_policy', metadata=[MaxLen(max_length=30)]), 'setSampleAsAvatar': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='set_sample_as_avatar'), 'storeFace': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_face')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.HttpCallback(**data)[source]
Notification policy callbacks
- buildCallback(events)[source]
Build callback coroutine :param events: events to send
- Returns:
callback coroutine or None if callback disabled or filtered
- Return type:
Optional
[Coroutine
,None
]
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'authorization': FieldInfo(annotation=BasicAuthorization, required=False, default_factory=<lambda>, alias='authorization'), 'enable': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='enable'), 'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'params': FieldInfo(annotation=Params, required=False, default=Params(timeout=None, contentType=None, headers=None), alias='params'), 'type': FieldInfo(annotation=Literal['http'], required=True, alias='type'), 'url': FieldInfo(annotation=str, required=True, alias='url')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(_ModelMetaclass__context: Any) None
We need to both initialize private attributes and call the user-defined model_post_init method.
- Return type:
None
- async classmethod onShutdown()[source]
Stop Policies
- async classmethod onStartup()[source]
Init Policies
- class luna_handlers.classes.schemas.storage_policy.ImageOriginPolicy(**data)[source]
Image origin policy
- async execute(events, accountId, bucket, luna3Client)[source]
Save origin images.
- Parameters:
events – events
accountId – account id
bucket – bucket name
luna3Client – client
Notes
we need to loop through images if image_origin is image because we have to upload them and save as url
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'storeImage': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_image'), 'useExternalReferences': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='use_external_references')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.LinkToListsPolicy(**data)[source]
Link to lists policy schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'listId': FieldInfo(annotation=UUID, required=True, alias='list_id')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.NotificationStoragePolicy(**data)[source]
Notification store policy
- async execute(events, accountId, redisContext)[source]
Save notifications :param events: events :param accountId: account id :param redisContext: redis context
- Return type:
None
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'filters': FieldInfo(annotation=ComplexFilter, required=False, default=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), alias='filters', alias_priority=1), 'sendNotification': FieldInfo(annotation=Literal[0, 1], required=False, default=1, alias='send_notification')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.Params(**data)[source]
Callback request parameters
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'contentType': FieldInfo(annotation=Literal['application/json', 'application/msgpack'], required=False, default_factory=<lambda>, alias='content_type'), 'headers': FieldInfo(annotation=Dict[str, str], required=False, default_factory=<lambda>, alias='headers'), 'timeout': FieldInfo(annotation=int, required=False, default_factory=<lambda>, alias='timeout')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.StoragePolicy(**data)[source]
Storage policy schema
- async execute(events, accountId, monitoring, config, luna3Client, redisContext)[source]
Execute storage policy - save objects.
- Parameters:
events – events to process
accountId – account id
monitoring – data for monitoring
config – app config
luna3Client – client
redisContext – redis context
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'attributePolicy': FieldInfo(annotation=AttributeStorePolicy, required=False, default_factory=<lambda>, alias='attribute_policy'), 'bodySamplePolicy': FieldInfo(annotation=BodySamplePolicy, required=False, default=BodySamplePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeSample=1), alias='body_sample_policy'), 'callbacks': FieldInfo(annotation=List[HttpCallback], required=False, default=[], alias='callbacks'), 'eventPolicy': FieldInfo(annotation=EventStoragePolicy, required=False, default=EventStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeEvent=1, waitSaving=1), alias='event_policy'), 'facePolicy': FieldInfo(annotation=FaceStoragePolicy, required=False, default=FaceStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeFace=0, setSampleAsAvatar=1, linkToListsPolicy=[]), alias='face_policy'), 'faceSamplePolicy': FieldInfo(annotation=FaceSamplePolicy, required=False, default=FaceSamplePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeSample=1), alias='face_sample_policy'), 'imageOriginPolicy': FieldInfo(annotation=ImageOriginPolicy, required=False, default=ImageOriginPolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), storeImage=0, useExternalReferences=1), alias='image_origin_policy'), 'notificationPolicy': FieldInfo(annotation=NotificationStoragePolicy, required=False, default=NotificationStoragePolicy(filters=ComplexFilter(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None, match=None), sendNotification=1), alias='notification_policy')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.storage_policy.StorePolicyConfig(facesBucket, bodiesBucket, originBucket)[source]
Handler config that policies should apply.
Module contains schemas for verifier
- class luna_handlers.classes.schemas.verifier.VerifierAttributeStorePolicy(**data)[source]
Verifier attribute storage policy
- async execute(events, accountId, luna3Client)[source]
Save attributes.
- Parameters:
events – events
accountId – account id
luna3Client – client
- Return type:
None
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'storeAttribute': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_attribute')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierDetectPolicy(**data)[source]
Verifier detect policy
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'deepfakeStates': FieldInfo(annotation=Union[Annotated[List[IntDeepfake], Len], NoneType], required=False, alias='deepfake_states', alias_priority=1), 'detectLandmarks68': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='detect_landmarks68', alias_priority=1), 'estimateDeepfake': FieldInfo(annotation=DeepfakePolicy, required=False, default_factory=<lambda>, alias='estimate_deepfake', alias_priority=1), 'estimateEmotions': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_emotions', alias_priority=1), 'estimateEyesAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_eyes_attributes', alias_priority=1), 'estimateGaze': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_gaze', alias_priority=1), 'estimateGlasses': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_glasses', alias_priority=1), 'estimateHeadPose': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_head_pose', alias_priority=1), 'estimateLiveness': FieldInfo(annotation=LivenessPolicy, required=False, default_factory=<lambda>, alias='estimate_liveness', alias_priority=1), 'estimateMask': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_mask', alias_priority=1), 'estimateMouthAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_mouth_attributes', alias_priority=1), 'estimateQuality': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='estimate_quality', alias_priority=1), 'extractExif': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_exif', alias_priority=1), 'faceQuality': FieldInfo(annotation=FaceQualitySchema, required=False, default_factory=<lambda>, alias='face_quality', alias_priority=1), 'livenessStates': FieldInfo(annotation=Union[Annotated[List[IntLiveness], Len], NoneType], required=False, alias='liveness_states', alias_priority=1), 'maskStates': FieldInfo(annotation=Union[Annotated[List[IntMasks], Len], NoneType], required=False, alias='mask_states', alias_priority=1), 'multifacePolicy': FieldInfo(annotation=Literal[0, 1, 2], required=False, default=1, alias='multiface_policy', alias_priority=1), 'pitchThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, alias='pitch_threshold', alias_priority=1), 'rollThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, alias='roll_threshold', alias_priority=1), 'yawThreshold': FieldInfo(annotation=Union[IntAngle180, NoneType], required=False, alias='yaw_threshold', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierExtractPolicy(**data)[source]
Verifier extract policy
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'extractBasicAttributes': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='extract_basic_attributes', alias_priority=1), 'fdScoreThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.0, alias='fd_score_threshold', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierFaceSampleStorePolicy(**data)[source]
Verifier face sample storage policy
- async execute(events, accountId, bucket, luna3Client)[source]
Save face samples.
- Parameters:
events – events
accountId – account id
bucket – bucket name
luna3Client – client
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'storeSample': FieldInfo(annotation=Literal[0, 1], required=False, default=0, alias='store_sample')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierInputEstimationsModel(**data)[source]
Verifier model for incoming estimations: urls, image (only face bounding boxes available) or samples
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'faceBoundingBoxes': FieldInfo(annotation=List[BoundingBoxSchema], required=False, default_factory=<lambda>, alias='face_bounding_boxes', alias_priority=1, metadata=[Len(min_length=1, max_length=None)]), 'image': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='image', alias_priority=1), 'mimetype': FieldInfo(annotation=Union[str, NoneType], required=False, default_factory=<lambda>, alias='mimetype', alias_priority=1), 'samples': FieldInfo(annotation=List[Annotated[UUID, BeforeValidator]], required=False, default_factory=<lambda>, alias='samples', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)]), 'urls': FieldInfo(annotation=List[UrlWithFaceBbox], required=False, default_factory=<lambda>, alias='urls', alias_priority=1, metadata=[AfterValidator(func=<bound method UpdatableList.<locals>.UserConstrainedList.lenConstraintValidation of <class 'vlutils.structures.pydantic.UpdatableList.<locals>.UserConstrainedList'>>)])}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierMatchPolicy(**data)[source]
Verifier match policy schema
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'candidates': FieldInfo(annotation=Union[FaceMatchCandidates, EventMatchCandidates, AttributeMatchCandidates], required=True, alias='candidates', alias_priority=1, discriminator='origin', metadata=[WrapValidator(func=<function excludeDiscriminatorFromException>)]), 'descriptor': FieldInfo(annotation=MatchingDescriptor, required=False, default=MatchingDescriptor(descriptorType='face'), alias='descriptor', alias_priority=1), 'filters': FieldInfo(annotation=AttributesFilters, required=False, default=AttributesFilters(ethnicities=None, ageGte=None, ageLt=None, gender=None, liveness=None, deepfake=None), alias='filters', alias_priority=1), 'label': FieldInfo(annotation=Str36, required=False, default='', alias='label', alias_priority=1), 'limit': FieldInfo(annotation=Union[IntMatchingLimit, NoneType], required=False, default=3, alias='limit', alias_priority=1), 'targets': FieldInfo(annotation=Union[List[str], NoneType], required=False, default_factory=<lambda>, alias='targets', alias_priority=1), 'threshold': FieldInfo(annotation=Union[StrictFloat01, NoneType], required=False, default_factory=<lambda>, alias='threshold', alias_priority=1)}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierModel(**data)[source]
Verifier
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'description': FieldInfo(annotation=Str128, required=False, default='', alias='description'), 'policies': FieldInfo(annotation=VerifierPoliciesModel, required=False, default_factory=<lambda>, alias='policies')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.verifier.VerifierPoliciesModel(**data)[source]
Verifier policies
- async execute(events, accountId, monitoring, facesBucket, luna3Client)[source]
Executes given policies against provided data.
- Parameters:
events – events
accountId – account id
monitoring – monitoring data
facesBucket – faces bucket
luna3Client – luna platform client
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'detectPolicy': FieldInfo(annotation=VerifierDetectPolicy, required=False, default_factory=<lambda>, alias='detect_policy'), 'extractPolicy': FieldInfo(annotation=VerifierExtractPolicy, required=False, default=VerifierExtractPolicy(extractBasicAttributes=0, fdScoreThreshold=0.0), alias='extract_policy'), 'storagePolicy': FieldInfo(annotation=VerifierStoragePolicy, required=False, default=VerifierStoragePolicy(attributePolicy=VerifierAttributeStorePolicy(storeAttribute=0), faceSamplePolicy=VerifierFaceSampleStorePolicy(storeSample=0)), alias='storage_policy'), 'verificationThreshold': FieldInfo(annotation=StrictFloat01, required=False, default=0.9, alias='verification_threshold')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- model_post_init(_VerifierPoliciesModel__context)[source]
Override this method to perform additional initialization after __init__ and model_construct. This is useful if you want to do some validation that requires the entire model to be initialized.
- Return type:
None
- class luna_handlers.classes.schemas.verifier.VerifierStoragePolicy(**data)[source]
Verifier storage policy
- async execute(events, accountId, monitoring, facesBucket, luna3Client)[source]
Execute storage policy - save objects. :param events: events :param accountId: account id :param monitoring: monitoring data :param facesBucket: faces bucket :param luna3Client: luna3 client
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'attributePolicy': FieldInfo(annotation=Union[VerifierAttributeStorePolicy, NoneType], required=False, default=VerifierAttributeStorePolicy(storeAttribute=0), alias='attribute_policy'), 'faceSamplePolicy': FieldInfo(annotation=Union[VerifierFaceSampleStorePolicy, NoneType], required=False, default=VerifierFaceSampleStorePolicy(storeSample=0), alias='face_sample_policy')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
Types¶
Module contains custom basics for validation schemas It highly recommended to use represented classes instead of pydantic defaults!
- class luna_handlers.classes.schemas.types.DateTimeString[source]
Datetime string type/ rfc3339
- validateTime(value)[source]
Validate that value can be parsed as time :param value: time in rfc3339
- Returns:
value
- class luna_handlers.classes.schemas.types.DetectTs(x=0, /)[source]
User-defined timestamp relative to something, such as the start of a video
- class luna_handlers.classes.schemas.types.EventId[source]
Event ID type
- class luna_handlers.classes.schemas.types.ExternalId[source]
External id type
- class luna_handlers.classes.schemas.types.FaceId[source]
Face ID type
- class luna_handlers.classes.schemas.types.Float180(x=0, /)[source]
Strict float in range -180 to 180
- class luna_handlers.classes.schemas.types.FloatGeoDelta(x=0, /)[source]
Non-strict float for latitude in range 0.0 - 9.0
- class luna_handlers.classes.schemas.types.FloatLatitude(x=0, /)[source]
Non-strict float for latitude in range -90.0 - 90.0
- class luna_handlers.classes.schemas.types.FloatLongitude(x=0, /)[source]
Non-strict float for longitude in range -180.0 - 180.0
- class luna_handlers.classes.schemas.types.GeoPosition(**data)[source]
- model_config: ClassVar[ConfigDict] = {'alias_generator': <function getAlias>, 'arbitrary_types_allowed': True, 'extra': 'forbid', 'ignored_types': (<class 'functools.cached_property'>,), 'inUTC': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- model_fields: ClassVar[dict[str, FieldInfo]] = {'latitude': FieldInfo(annotation=FloatLatitude, required=True, alias='latitude'), 'longitude': FieldInfo(annotation=FloatLongitude, required=True, alias='longitude')}
Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].
This replaces Model.__fields__ from Pydantic V1.
- class luna_handlers.classes.schemas.types.IntAge[source]
Int in range 0 - 100
- class luna_handlers.classes.schemas.types.IntAngle180[source]
Int for angles - in range 0 - 180
- class luna_handlers.classes.schemas.types.IntAttributeTTL[source]
Int in range 0 - MAX_ATTRIBUTE_TTL
- classmethod update()[source]
Update inherit schema.
- class luna_handlers.classes.schemas.types.IntDeepfake[source]
Int in range of available deepfake state values
- class luna_handlers.classes.schemas.types.IntEmotions[source]
Int in range of available emotions values
- class luna_handlers.classes.schemas.types.IntEthnicities[source]
Int in range of available ethnicities values
- class luna_handlers.classes.schemas.types.IntLiveness[source]
Int in range of available liveness state values
- class luna_handlers.classes.schemas.types.IntMasks[source]
Int in range of available masks values
- class luna_handlers.classes.schemas.types.IntMatchingLimit[source]
Int in range 0 - RESULT_CANDIDATE_LIMIT
- classmethod update()[source]
Update inherit schema.
- class luna_handlers.classes.schemas.types.IntNonNegative[source]
Int non negative
- class luna_handlers.classes.schemas.types.LocationName[source]
Location name type
- class luna_handlers.classes.schemas.types.ObjectId[source]
ID type, string uuid
- class luna_handlers.classes.schemas.types.SDKInt[source]
Int in range from min to max SDK magic numbers
- class luna_handlers.classes.schemas.types.Str128[source]
Strict string 128 len max
- class luna_handlers.classes.schemas.types.Str256[source]
Strict string 128 len max
- class luna_handlers.classes.schemas.types.Str36[source]
Strict string 36 len max
- class luna_handlers.classes.schemas.types.StreamId[source]
Stream ID type
- class luna_handlers.classes.schemas.types.StrictFloat01(x=0, /)[source]
Strict float in range 0.0 - 1.0
- class luna_handlers.classes.schemas.types.StrictFloatNonNegative(x=0, /)[source]
Strict float non negative
- class luna_handlers.classes.schemas.types.UserData[source]
Event user_data type