Source code for loadero_python.resources.assert_precondition

"""Loadero assert resource.

Assert resource is seperated into three parts
    AssertPreconditionParams class describes assert preconditions attributes

    AssertPreconditionAPI class that groups all API operations with assert
    preconditions attributes.

    AssertPrecondition class combines AssertPreconditionParams and
    AssertPreconditionAPI.

Single AssertPrecondition object coresponds to a single assert precondition in
Loadero.
"""

from __future__ import annotations
from datetime import datetime
from dateutil import parser

from ..api_client import APIClient
from .resource import (
    FilterKey,
    LoaderoResourceParams,
    LoaderoResource,
    QueryParams,
)
from .classificator import Operator, Property
from .pagination import PagedResponse


[docs] class AssertPreconditionFilterKey(FilterKey): """AssertPreconditionFilterKey is an enum of all filter keys for assert precondition read all API operation. """ PROPERTY = "filter_property" OPERATOR = "filter_operator" EXPECTED = "filter_expected"
[docs] class AssertPreconditionParams(LoaderoResourceParams): """AssertPreconditionParams describes single Loadero assert precondition resources attributes. AssertPreconditionParams has a builder pattern for writeable attributes. """ def __init__( self, assert_precondition_id: int or None = None, assert_id: int or None = None, test_id: int or None = None, expected: str or None = None, operator: Operator or None = None, precondition_property: Property or None = None, ) -> None: """Creates a new AssertPreconditionParams instance that will contain single assert precondition resources attributes. Args: assert_precondition_id (int, optional): Existing assert precondition resources ID. Defaults to None. assert_id (int, optional): Existing assert resources ID. Defaults to None. test_id (int, optional): Existing test resources ID. Defaults to None. expected (str, optional): Expected value of the precondition. Defaults to None. operator (Operator, optional): Operation how the preconditions actual and expected values are compared. Defaults to None. precondition_property (Property, optional): Test participants property whose value is compared with expected. Defaults to None. """ super().__init__( attribute_map={ "id": "assert_precondition_id", "assert_id": "assert_id", "test_id": "test_id", "expected": "expected", "operator": "operator", "property": "precondition_property", "created": "_created", "updated": "_updated", }, custom_deserializers={ "created": parser.parse, "updated": parser.parse, "operator": Operator.from_dict, "property": Property.from_dict, }, body_attributes=["expected", "operator", "property"], required_body_attributes=["expected", "operator", "property"], ) self.assert_precondition_id = assert_precondition_id self.assert_id = assert_id self.test_id = test_id self.expected = expected self.operator = operator self.precondition_property = precondition_property self._created = None self._updated = None @property def created(self) -> datetime: """Time when resource was created. Returns: datetime: Time when resource was created. """ return self._created @property def updated(self) -> datetime: """Time when resource was last updated. Returns: datetime: Time when resource was last updated. """ return self._updated
[docs] def with_id(self, assert_precondition_id: int) -> AssertPreconditionParams: """Set assert precondition id. Args: assert_precondition_id (int): Assert precondition id. Returns: AssertPreconditionParams: Resource params with set id. """ self.assert_precondition_id = assert_precondition_id return self
[docs] def for_assert(self, assert_id: int) -> AssertPreconditionParams: """Set parent assert resource id. Args: assert_id (int): Assert resource id. Returns: AssertPreconditionParams: Resource params with set parent assert id. """ self.assert_id = assert_id return self
[docs] def in_test(self, test_id: int) -> AssertPreconditionParams: """Set parent test resource id. Args: test_id (int): Test resource id. Returns: AssertPreconditionParams: Resource params with set parent test resource id. """ self.test_id = test_id return self
[docs] def with_expected(self, expected: str) -> AssertPreconditionParams: """Set precondition expected value. Args: expected (str): Precondition expected value. Returns: AssertPreconditionParams: Resource params with set expected value. """ self.expected = expected return self
[docs] def with_operator(self, operator: Operator) -> AssertPreconditionParams: """Set precondition operator. Args: operator (Operator): Precondition operator. Returns: AssertPreconditionParams: Resource params with set operator. """ self.operator = operator return self
[docs] def with_property( self, precondition_property: Property ) -> AssertPreconditionParams: """Set precondition property. Args: precondition_property (Property): Precondition property. Returns: AssertPreconditionParams: Resource params with set property. """ self.precondition_property = precondition_property return self
[docs] class AssertPrecondition(LoaderoResource): """AssertPrecondition class allows to perform CRUD operations on Loadero assert precondition resources. APIClient must be previously initialized with a valid Loadero access token. The target Loadero assert precondition resource is determined by AssertPreconditionParams. """ def __init__( self, test_id: int or None = None, assert_id: int or None = None, assert_precondition_id: int or None = None, params: AssertPreconditionParams or None = None, ) -> None: """Creates a new instance of AssertPrecondition that allows to perform CRUD operations on a single assert precondition resource. The resources attribute data is stored in params field that is an instance of AssertPreconditionParams. Args: test_id (int, optional): Existing test resources ID. Defaults to None. assert_id (int, optional): Existing assert resources ID. Defaults to None. assert_precondition_id (int, optional): Existing assert precondition resources ID. Defaults to None. params (AssertPreconditionParams, optional): Instance of AssertPreconditionParams that describes the assert precondition resource. Defaults to None. """ self.params = params or AssertPreconditionParams() if test_id is not None: self.params.test_id = test_id if assert_id is not None: self.params.assert_id = assert_id if assert_precondition_id is not None: self.params.assert_precondition_id = assert_precondition_id super().__init__(self.params)
[docs] def create(self) -> AssertPrecondition: """Creates new assert precondition with given data. Required attributes of params field that need to be populated, otherwise the method will raise an exception: - test_id - assert_id - expected - operator - property Raises: ValueError: If resource params do not sufficiently identify parent resource or resource params required attributes are None. APIException: If API call fails. Returns: AssertPrecondition: Created assert precondition resource. """ AssertPreconditionAPI.create(self.params) return self
[docs] def read(self) -> AssertPrecondition: """Reads information about an existing assert precondition. Required attributes of params field that need to be populated, otherwise the method will raise an exception: - test_id - assert_id - assert_precondition_id Raises: ValueError: If resource params do not sufficiently identify resource. APIException: If API call fails. Returns: AssertPrecondition: Read assert precondition resource. """ AssertPreconditionAPI.read(self.params) return self
[docs] def update(self) -> AssertPrecondition: """Updates assert precondition with given parameters. Required attributes of params field that need to be populated, otherwise the method will raise an exception: - test_id - assert_id - assert_precondition_id - expected - operator - property Raises: ValueError: If resource params do not sufficiently identify resource or resource params required attributes are None. APIException: If API call fails. Returns: AssertPrecondition: Updated assert precondition resource. """ self.params = AssertPreconditionAPI.update(self.params) return self
[docs] def delete(self) -> AssertPrecondition: """Deletes and existing assert precondition. Required attributes of params field that need to be populated, otherwise the method will raise an exception: - test_id - assert_id - assert_precondition_id Raises: ValueError: If resource params do not sufficiently identify resource. APIException: If API call fails. """ AssertPreconditionAPI.delete(self.params) return self
[docs] class AssertPreconditionAPI: """AssertPreconditionAPI defines Loadero API operations for assert precondition resources. """
[docs] @staticmethod def create(params: AssertPreconditionParams) -> AssertPreconditionParams: """Create a new assert precondition resource. Args: params (AssertPreconditionParams): Describes the assert precondition resource to be created. Raises: ValueError: If resource params do not sufficiently identify parent resource or resource params required attributes are None. APIException: If API call fails. Returns: AssertPreconditionParams: Created assert precondition resource. """ AssertPreconditionAPI.__validate_identifiers(params, False) return params.from_dict( APIClient().post( AssertPreconditionAPI.route(params.test_id, params.assert_id), params.to_dict(), ) )
[docs] @staticmethod def read(params: AssertPreconditionParams) -> AssertPreconditionParams: """Read an existing assert precondition resource. Args: params (AssertPreconditionParams): Describes the assert precondition resource to be read. Raises: ValueError: If resource params do not sufficiently identify resource. APIException: If API call fails. Returns: AssertPreconditionParams: Read assert precondition resource. """ AssertPreconditionAPI.__validate_identifiers(params) return params.from_dict( APIClient().get( AssertPreconditionAPI.route( params.test_id, params.assert_id, params.assert_precondition_id, ), ) )
[docs] @staticmethod def update(params: AssertPreconditionParams) -> AssertPreconditionParams: """Update an existing assert precondition resource. Args: params (AssertPreconditionParams): Describes the assert precondition resource to update. Raises: ValueError: If resource params do not sufficiently identify resource or resource params required attributes are None. APIException: If API call fails. Returns: AssertPreconditionParams: Updated assert precondition resource. """ AssertPreconditionAPI.__validate_identifiers(params) return params.from_dict( APIClient().put( AssertPreconditionAPI.route( params.test_id, params.assert_id, params.assert_precondition_id, ), params.to_dict(), ) )
[docs] @staticmethod def delete(params: AssertPreconditionParams) -> None: """Delete an existing assert precondition resource. Args: params (AssertPreconditionParams): Describes the assert precondition resource to delete. Raises: ValueError: If resource params do not sufficiently identify resource. APIException: If API call fails. """ AssertPreconditionAPI.__validate_identifiers(params) APIClient().delete( AssertPreconditionAPI.route( params.test_id, params.assert_id, params.assert_precondition_id ) )
[docs] @staticmethod def read_all( test_id: int, assert_id: int, query_params: QueryParams or None = None ) -> PagedResponse: """Read all assert precondition resources of assert. Args: test_id (int): Test resource id. assert_id (int): Parent assert resource id. query_params (QueryParams, optional): Describes query parameters. Raises: APIException: If API call fails. Returns: PagedResponse: Paged response of assert precondition resources. """ qp = None if query_params is not None: qp = query_params.parse() pr = PagedResponse(AssertPreconditionParams).from_dict( APIClient().get( AssertPreconditionAPI.route(test_id, assert_id), query_params=qp ) ) for ap in pr.results: ap.test_id = test_id return pr
[docs] @staticmethod def route( test_id: int, assert_id: int, assert_precondition_id: int or None = None ) -> str: """Build assert precondition resource url route. Args: test_id (int): Test resource id. assert_id (int): Assert resource id. assert_precondition_id (int, optional): Assert precondition resource id. Defaults to None. If omitted the route will point to all assert preconditions of assert. Returns: str: Route to assert precondition resource/s. """ r = ( APIClient().project_route + f"tests/{test_id}/asserts/{assert_id}/preconditions/" ) if assert_precondition_id is not None: r += f"{assert_precondition_id}/" return r
@staticmethod def __validate_identifiers( params: AssertPreconditionParams, single: bool = True ): """Validate assert precondition resource identifiers. Args: params (AssertPreconditionParams): Assert precondition params. single (bool, optional): Indicates if the resource identifiers should be validated as pointing to a single resource (True) or to all precondition resources belonging to assert resource. Defaults to True. Raises: ValueError: AssertPreconditionParams.test_id must be a valid int ValueError: AssertPreconditionParams.assert_id must be a valid int ValueError: AssertPreconditionParams.assert_precondition_id must be a valid int """ if params.test_id is None: raise ValueError( "AssertPreconditionParams.test_id must be a valid int" ) if params.assert_id is None: raise ValueError( "AssertPreconditionParams.assert_id must be a valid int" ) if single and params.assert_precondition_id is None: raise ValueError( "AssertPreconditionParams.assert_precondition_id " "must be a valid int" )