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