"""
Module contains luna-faces client adapted for usage in lambda
"""
from typing import Awaitable
from luna3.common.http_objs import RawDescriptor
from luna3.common.luna_response import LunaResponse
from luna3.faces.faces import FacesApi
[docs]
class Faces:
"""Luna-faces client"""
[docs]
def __init__(self, facesClient: FacesApi, accountId: str):
self._accountId = accountId
self._facesClient = facesClient
[docs]
def getAddress(self) -> str:
"""Get luna-faces address"""
return self._facesClient.baseUri
[docs]
def createFace(
self,
attributeId: str | None = None,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
descriptorSamples: list[str] = None,
basicAttributesSamples: list[str] = None,
eventId: str | None = None,
userData: str | None = "",
externalId: str | None = None,
avatar: str | None = None,
listIds: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Create new face in luna-faces
Args:
attributeId: attribute id
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
eventId: reference to event which created face
userData: face user data
externalId: external id of the face, if it has its own mapping in the system
avatar: face avatar url
listIds: created face will be attach to these lists
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with created face id will be returned.
"""
return self._facesClient.createFace(
accountId=self._accountId,
attributeId=attributeId,
basicAttributes=basicAttributes,
descriptors=descriptors,
descriptorSamples=descriptorSamples,
basicAttributesSamples=basicAttributesSamples,
eventId=eventId,
userData=userData,
externalId=externalId,
avatar=avatar,
listIds=listIds,
raiseError=raiseError,
**kwargs,
)
[docs]
def putFace(
self,
faceId: str,
externalId: str | None = None,
attributeId: str | None = None,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
descriptorSamples: list[str] = None,
basicAttributesSamples: list[str] = None,
eventId: str | None = None,
userData: str | None = "",
avatar: str | None = None,
listIds: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Put face in luna-faces
Args:
faceId: external face id
externalId: external id of the face, if it has its own mapping in the system
attributeId: attribute id
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
eventId: reference to event which created face
userData: face user data
avatar: face avatar url
listIds: created face will be attach to these lists
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with face id will be returned.
"""
return self._facesClient.putFace(
accountId=self._accountId,
faceId=faceId,
externalId=externalId,
attributeId=attributeId,
basicAttributes=basicAttributes,
descriptors=descriptors,
descriptorSamples=descriptorSamples,
basicAttributesSamples=basicAttributesSamples,
eventId=eventId,
userData=userData,
avatar=avatar,
listIds=listIds,
raiseError=raiseError,
**kwargs,
)
[docs]
def patchFace(
self,
faceId: str,
eventId: str | None = None,
userData: str | None = None,
externalId: str | None = None,
avatar: str | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Update face. You can update event id, user data, attribute id. Optional you can set, that face must belong
to account.
Args:
faceId: face id
eventId: new event id
externalId: external id of the face, if it has its own mapping in the system
userData: new user data
avatar: face avatar url
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.updateFace(
faceId=faceId,
accountId=self._accountId,
eventId=eventId,
userData=userData,
externalId=externalId,
avatar=avatar,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFace(
self,
faceId: str,
targets: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get face by id. Optional you can set, that face must belong to account.
Args:
faceId: face id
targets: targets to get face
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with face will be returned.
"""
return self._facesClient.getFace(
faceId=faceId,
accountId=self._accountId,
targets=targets,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFaces(
self,
userData: str | None = None,
eventId: str | None = None,
listId: str | None = None,
faceIds: list[str] | None = None,
timeLt: str | None = None,
timeGte: str | None = None,
page: int | None = 1,
pageSize: int | None = 10,
attributeIds: list[str] | None = None,
externalIds: list[str] | None = None,
faceIdGte: str | None = None,
faceIdLt: str | None = None,
targets: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get faces by filters. Optional you can set, that faces must belong to account.
Args:
userData: user data, part of user data, case insensitive
eventId: event id
listId: list id
faceIds: face ids
timeLt: upper bound of face create time
timeGte: lower bound of face create time
page: page count, default 1
pageSize: page size, default 10, unlimited if -1
attributeIds: attributes ids
externalIds: list of external identifiers of persons, if they have their own mapping in the system
faceIdGte: lower face id including boundary
faceIdLt: upper face id excluding boundary
targets: targets to get faces
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with faces will be returned.
"""
return self._facesClient.getFaces(
userData=userData,
accountId=self._accountId,
eventId=eventId,
listId=listId,
faceIds=faceIds,
timeLt=timeLt,
timeGte=timeGte,
page=page,
pageSize=pageSize,
attributeIds=attributeIds,
externalIds=externalIds,
faceIdGte=faceIdGte,
faceIdLt=faceIdLt,
targets=targets,
raiseError=raiseError,
**kwargs,
)
[docs]
def headFace(self, faceId: str, raiseError: bool = True, **kwargs) -> Awaitable[LunaResponse] | LunaResponse:
"""
Check face existence by id. Optional you can set, that face must belong to account.
Args:
faceId: face id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.checkFace(
faceId=faceId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFacesCount(
self,
userData: str | None = None,
eventId: str | None = None,
listId: str | None = None,
faceIds: list[str] | None = None,
timeLt: str | None = None,
timeGte: str | None = None,
attributeIds: list[str] | None = None,
externalIds: list[str] | None = None,
faceIdGte: str | None = None,
faceIdLt: str | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Count faces by filters. Optional you can set, that faces must belong to account.
Args:
userData: user data, part of user data, case insensitive
eventId: event id
listId: list id
faceIds: face ids
timeLt: upper bound of face create time
timeGte: lower bound of face create time
attributeIds: attributes ids
externalIds: list of external identifiers of persons, if they have their own mapping in the system
faceIdGte: lower face id including boundary
faceIdLt: upper face id excluding boundary
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with number of faces will be returned.
"""
return self._facesClient.getFacesCount(
userData=userData,
accountId=self._accountId,
eventId=eventId,
listId=listId,
faceIds=faceIds,
timeLt=timeLt,
timeGte=timeGte,
attributeIds=attributeIds,
externalIds=externalIds,
faceIdGte=faceIdGte,
faceIdLt=faceIdLt,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteFace(
self,
faceId: str,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Delete face. Optional you can set, that face must belong to account.
Args:
faceId: face id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.deleteFace(
faceId=faceId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteFaces(
self,
faceIds: list[str],
ignore: int | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Delete faces. Optional you can set, that faces must belong to account.
Args:
faceIds: face id list
ignore: ignore non-existing faces
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.deleteFaces(
faceIds=faceIds,
accountId=self._accountId,
ignore=ignore,
raiseError=raiseError,
**kwargs,
)
[docs]
def createList(
self,
userData: str = "",
listId: str | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Create list.
Args:
userData: user data
listId: custom list id to create the list
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with created list id will be returned.
"""
return self._facesClient.createList(
accountId=self._accountId,
userData=userData,
listId=listId,
raiseError=raiseError,
**kwargs,
)
[docs]
def patchList(
self,
listId: str,
userData: str,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Update user data of list. Optional you can set, that list must belong to account.
Args:
listId: list id
userData: new user data
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.updateListUserData(
listId=listId,
userData=userData,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def headList(
self,
listId: str,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Check list existence. Optional you can set, that list must belong to account.
Args:
listId: list id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.checkList(
listId=listId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getList(
self,
listId: str,
page: int | None = 1,
pageSize: int | None = 10,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get list. Optional you can set, that list must belong to account.
Args:
listId: list id
page: page count, default 1
pageSize: page size, default 10
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with list will be returned.
"""
return self._facesClient.getList(
listId=listId,
accountId=self._accountId,
page=page,
pageSize=pageSize,
raiseError=raiseError,
**kwargs,
)
[docs]
def getLists(
self,
userData: str | None = None,
userDataEq: str | None = None,
createTimeLt: str | None = None,
createTimeGte: str | None = None,
lastUpdateTimeLt: str | None = None,
lastUpdateTimeGte: str | None = None,
listIds: list[str] | None = None,
listIdLt: str | None = None,
listIdGte: str | None = None,
page: int | None = 1,
pageSize: int | None = 10,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get lists. Optional you can set, that lists must belong to account.
Args:
userData: user data, part of user data, case sensitive
userDataEq: user data, case sensitive
createTimeLt: upper bound of list create time
createTimeGte: lower bound of list create time including boundary
lastUpdateTimeLt: upper bound of list last update time
lastUpdateTimeGte: lower bound of list last update time including boundary
listIdLt: upper bound of list id
listIdGte: lower bound of list id including boundary
listIds: list ids
page: page, default 1
pageSize: page size, default 10
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with lists will be returned.
"""
return self._facesClient.getLists(
userData=userData,
userDataEq=userDataEq,
accountId=self._accountId,
createTimeLt=createTimeLt,
createTimeGte=createTimeGte,
lastUpdateTimeLt=lastUpdateTimeLt,
lastUpdateTimeGte=lastUpdateTimeGte,
listIds=listIds,
listIdLt=listIdLt,
listIdGte=listIdGte,
page=page,
pageSize=pageSize,
raiseError=raiseError,
**kwargs,
)
[docs]
def getListsCount(
self,
userData: str | None = None,
userDataEq: str | None = None,
createTimeLt: str | None = None,
createTimeGte: str | None = None,
lastUpdateTimeLt: str | None = None,
lastUpdateTimeGte: str | None = None,
listIds: list[str] | None = None,
listIdLt: str | None = None,
listIdGte: str | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get number of lists. Optional you can set, that lists must belong to account.
Args:
userData: user data, part of user data, case sensitive
userDataEq: user data
createTimeLt: upper bound of list create time
createTimeGte: lower bound of list create time including boundary
lastUpdateTimeLt: upper bound of list last update time
lastUpdateTimeGte: lower bound of list last update time including boundary
listIds: list ids
listIdLt: upper bound of list id
listIdGte: lower bound of list id including boundary
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with number of lists will be returned.
"""
return self._facesClient.getListsCount(
userData=userData,
userDataEq=userDataEq,
accountId=self._accountId,
createTimeLt=createTimeLt,
createTimeGte=createTimeGte,
lastUpdateTimeLt=lastUpdateTimeLt,
lastUpdateTimeGte=lastUpdateTimeGte,
listIds=listIds,
listIdLt=listIdLt,
listIdGte=listIdGte,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteList(
self, listId: str, withFaces: int = 0, raiseError: bool = True, **kwargs
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Remove list. Optional you can set, that list must belong to account.
Args:
listId: list id
withFaces: remove lists and all faces witch is contained in the lists
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.deleteList(
listId=listId,
accountId=self._accountId,
withFaces=withFaces,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteLists(
self,
listIds: list[str],
withFaces: int = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Delete lists. Optional you can set, that lists must belong to account.
Args:
listIds: ids of lists
withFaces: remove lists and all the faces contained in the lists
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.deleteLists(
listIds=listIds,
accountId=self._accountId,
withFaces=withFaces,
raiseError=raiseError,
**kwargs,
)
[docs]
def linkFacesToList(
self,
listId: str,
faceIds: list[str],
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Attach faces to list.
Args:
listId: list id
faceIds: face ids
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.link(
listId=listId,
faceIds=faceIds,
action="attach",
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def unlinkFacesFromList(
self,
listId: str,
faceIds: list[str],
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Detach faces to list.
Args:
listId: list id
faceIds: face ids
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
"""
return self._facesClient.link(
listId=listId,
faceIds=faceIds,
action="detach",
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getAttributesFromList(
self,
listId: str,
linkKeyLt: str | None = None,
linkKeyGte: str | None = None,
limit: int | None = 1000,
parity: int | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get all attributes from list by period.
Args:
listId: list id
linkKeyLt: upper including link key boundary
linkKeyGte: lower including link key boundary
limit: limit
parity: if 1 - get with even and odd max link keys else max link key
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with attributes will be returned.
"""
return self._facesClient.getAttributesFromList(
listId=listId,
linkKeyLt=linkKeyLt,
linkKeyGte=linkKeyGte,
limit=limit,
parity=parity,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFacesAttributes(
self,
faceIds: list,
raiseError: bool = True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Return attributeId of faces from faceIds list
Args:
faceIds: list of faceId for return their attributes
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with attributes ids will be returned.
"""
return self._facesClient.facesAttributes(
faceIds=faceIds,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFaceAttributes(
self,
faceId: str,
targets: list[str] | None = None,
descriptorVersion: int | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get face attributes.
Args:
faceId: face id
targets: targets to get face attributes. Available targets: `create_time`, `face_descriptor`,
`basic_attributes`, `face_descriptor_samples`, `basic_attributes_samples`.
descriptorVersion: descriptor version
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with attributes will be returned.
"""
return self._facesClient.getFaceAttributes(
faceId=faceId,
targets=targets,
descriptorVersion=descriptorVersion,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def putFaceAttributes(
self,
faceId: str,
attributeId: str | None = None,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
basicAttributesSamples: list[str] = None,
descriptorSamples: list[str] = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Put face attributes.
Args:
faceId: face id
attributeId: attribute id
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse`
"""
return self._facesClient.putFaceAttributes(
faceId=faceId,
attributeId=attributeId,
basicAttributes=basicAttributes,
descriptors=descriptors,
basicAttributesSamples=basicAttributesSamples,
descriptorSamples=descriptorSamples,
raiseError=raiseError,
**kwargs,
)
[docs]
def updateFaceAttributes(
self,
faceId: str,
attributeId: str | None = None,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
basicAttributesSamples: list[str] = None,
descriptorSamples: list[str] = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Update face attributes.
Args:
faceId: face id
attributeId: attribute id
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse`
"""
return self._facesClient.updateFaceAttributes(
faceId=faceId,
attributeId=attributeId,
basicAttributes=basicAttributes,
descriptors=descriptors,
basicAttributesSamples=basicAttributesSamples,
descriptorSamples=descriptorSamples,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteFaceAttributes(
self,
faceId: str,
raiseError: bool = True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Delete face attributes.
Args:
faceId: face id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse`
"""
return self._facesClient.deleteFaceAttributes(
faceId=faceId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getFaceAttributeSamples(
self,
faceId: str,
raiseError: bool = True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get face attribute samples.
Args:
faceId: face id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with attribute samples will be returned.
"""
return self._facesClient.getFaceAttributeSamples(
faceId=faceId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getAttributeIds(
self,
listId: str | None = None,
timeLt: str | None = None,
timeGte: str | None = None,
page: int | None = 1,
pageSize: int | None = 1000,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get ids of attributes from list by period.
Args:
listId: list id
timeLt: upper bound of face update time
timeGte: lower bound of face update time
page: page, default 1
pageSize: page size, default 1000, max 100000
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with attributes ids will be returned.
"""
return self._facesClient.getAttributeIds(
accountId=self._accountId,
listId=listId,
timeLt=timeLt,
timeGte=timeGte,
page=page,
pageSize=pageSize,
raiseError=raiseError,
**kwargs,
)
[docs]
def getAttributes(
self,
attributeIds: list[str],
descriptorVersion: int = None,
targets: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Get list of attributes
Args:
attributeIds: list of attributes of interest
targets: Available targets: `descriptor`, `basic_attributes`, `basic_attributes_samples`,
`face_descriptors_samples`, `account_id`, `create_time`
descriptorVersion: descriptor version to receive
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with version.
"""
return self._facesClient.getAttributes(
attributeIds=attributeIds,
descriptorVersion=descriptorVersion,
targets=targets,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def createAttribute(
self,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
descriptorSamples: list[str] = None,
basicAttributesSamples: list[str] = None,
xpk: bytes = None,
ttl: int | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Create new attributes. Notice that XPK argument overwrites basic attributes and descriptors above.
Args:
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
xpk: SDKObject bytes to load attributes from
ttl: temporary attribute ttl
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with attribute id.
"""
return self._facesClient.createAttribute(
basicAttributes=basicAttributes,
descriptors=descriptors,
descriptorSamples=descriptorSamples,
basicAttributesSamples=basicAttributesSamples,
xpk=xpk,
ttl=ttl,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def putAttribute(
self,
attributeId: str,
basicAttributes: dict | None = None,
descriptors: list[bytes | RawDescriptor] | None = None,
descriptorSamples: list[str] = None,
basicAttributesSamples: list[str] = None,
xpk: bytes = None,
ttl: int | None = None,
force: int | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Put attribute by id. Notice that XPK argument overwrites basic attributes and descriptors above.
Args:
attributeId: attribute id
descriptors: list of descriptors different versions
descriptorSamples: list of warp image id from which the attribute was extracted.
basicAttributes: dict with basic attributes (age, gender, ethnicity)
basicAttributesSamples: list of warp image id from which the basic attribute was extracted.
xpk: SDKObject bytes to load attributes from
ttl: temporary attribute ttl
force: replace or not existence attribute
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with version.
"""
return self._facesClient.putAttribute(
attributeId=attributeId,
force=force,
basicAttributes=basicAttributes,
descriptors=descriptors,
descriptorSamples=descriptorSamples,
basicAttributesSamples=basicAttributesSamples,
xpk=xpk,
ttl=ttl,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def headAttribute(
self,
attributeId: str,
raiseError: bool = True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Check attributes with attribute id exists.
Args:
attributeId: attribute id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with version.
"""
return self._facesClient.checkAttribute(
attributeId=attributeId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def getAttribute(
self,
attributeId: str,
descriptorVersion: int = None,
targets: list[str] | None = None,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Retrieve a attribute by id.
Args:
attributeId: attribute id
targets: Available targets: `descriptor`, `basic_attributes`, `basic_attributes_samples`,
`face_descriptors_samples`, `account_id`, `create_time`
descriptorVersion: descriptor version to receive
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with attribute.
"""
return self._facesClient.getAttribute(
attributeId=attributeId,
accountId=self._accountId,
descriptorVersion=descriptorVersion,
targets=targets,
raiseError=raiseError,
**kwargs,
)
[docs]
def getAttributeSamples(
self,
attributeId: str,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Retrieve a attribute by id.
Args:
attributeId: attribute id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return json with samples.
"""
return self._facesClient.getAttributeSamples(
attributeId=attributeId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)
[docs]
def deleteAttribute(
self,
attributeId: str,
raiseError=True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Delete attribute with specifeid id
Args:
attributeId: attribute id
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` will return response empty body.
"""
return self._facesClient.deleteAttribute(
attributeId=attributeId,
accountId=self._accountId,
raiseError=raiseError,
**kwargs,
)