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