Source code for ambra_sdk.service.entrypoints.study

from functools import wraps
from typing import Any, Dict

from box import Box, BoxList

from ambra_sdk.service.entrypoints.generated.study import \
    AsyncStudy as GAsyncStudy
from ambra_sdk.service.entrypoints.generated.study import Study as GStudy


class CustomFieldsList(BoxList):
    """Customfield box list."""

    def filter_by(self, filter_dict: Dict[str, Any]):
        """Filter custom fields.

        :param filter_dict: dict for filtering
        :yields: customfield
        """
        for customfield in self:
            if all(
                customfield.get(filter_key) == filter_value
                for filter_key, filter_value in filter_dict.items()
            ):
                yield customfield

    def get_by_name(self, name: str):
        """Get customfield by name.

        :param name: name of customfield
        :returns: customfield
        """
        return next(
            self.filter_by(filter_dict={'name': name}),
            None,
        )

    def get_by_uuid(self, uuid: str):
        """Get customfield by uuid.

        :param uuid: uuid of customfield
        :returns: customfield
        """
        return next(
            self.filter_by(filter_dict={'uuid': uuid}),
            None,
        )


class StudyBox(Box):
    """Study box."""

    def __setitem__(self, key, value):  # NOQA:WPS110
        """Set item for study box.

        :param key: key
        :param value: value
        """
        if key == 'customfields':
            value = CustomFieldsList(value)  # NOQA:WPS110
        super().__setitem__(key, value)


[docs]class Study(GStudy): """Study namespace.""" @wraps(GStudy.get) def get(self, *args, **kwargs): """Get method. :param args: args :param kwargs: kwargs :return: query """ query = super().get(*args, **kwargs) query.return_constructor = StudyBox return query @wraps(GStudy.list) # NOQA:WPS125 def list(self, *args, **kwargs): # NOQA:A003,WPS125 """List method. :param args: args :param kwargs: kwargs :return: query """ query = super().list(*args, **kwargs) query.return_constructor = StudyBox return query
[docs]class AsyncStudy(GAsyncStudy): """Async Study namespace.""" @wraps(GStudy.get) def get(self, *args, **kwargs): """Get method. :param args: args :param kwargs: kwargs :return: query """ query = super().get(*args, **kwargs) query.return_constructor = StudyBox return query @wraps(GStudy.list) # NOQA:WPS125 def list(self, *args, **kwargs): # NOQA:A003,WPS125 """List method. :param args: args :param kwargs: kwargs :return: query """ query = super().list(*args, **kwargs) query.return_constructor = StudyBox return query