Source code for sdk.lusid.models.lusid_trade_ticket

# coding: utf-8

"""
    LUSID API

    FINBOURNE Technology  # noqa: E501

    Contact: info@finbourne.com
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""


from __future__ import annotations
import pprint
import re  # noqa: F401
import json


from typing import Any, Dict, List, Optional, Union
from pydantic.v1 import BaseModel, Field, StrictFloat, StrictInt, StrictStr, conlist, constr, validator
from lusid.models.currency_and_amount import CurrencyAndAmount
from lusid.models.lusid_instrument import LusidInstrument
from lusid.models.model_property import ModelProperty
from lusid.models.resource_id import ResourceId

[docs] class LusidTradeTicket(BaseModel): """ A LUSID Trade Ticket comprising an instrument, a transaction, and a counterparty. # noqa: E501 """ transaction_id: constr(strict=True, max_length=256, min_length=0) = Field(..., alias="transactionId", description="Transaction ID. Must be unique.") transaction_type: constr(strict=True, max_length=256, min_length=0) = Field(..., alias="transactionType", description="Type of transaction for processing. Referenced by Transaction Configuration.") source: Optional[constr(strict=True, max_length=256, min_length=0)] = Field(None, description="Transaction Source. Referenced by Transaction Configuration.") transaction_date: constr(strict=True, min_length=1) = Field(..., alias="transactionDate", description="Transaction Date. Date at which transaction is known.") settlement_date: constr(strict=True, min_length=1) = Field(..., alias="settlementDate", description="Transaction settlement. Date at which transaction is finalised and realised into the system.") total_consideration: CurrencyAndAmount = Field(..., alias="totalConsideration") units: Union[StrictFloat, StrictInt] = Field(..., description="Number of units in the transaction. For an OTC this is somewhat interchangeable with the quantity booked in the instrument. As M x N or N x M are equivalent it is advised a client chooses one approach and sticks to it. Arguably either the unit or holding is best unitised.") instrument_identifiers: Dict[str, StrictStr] = Field(..., alias="instrumentIdentifiers", description="Identifiers for the instrument.") instrument_scope: Optional[constr(strict=True, max_length=64, min_length=1)] = Field(None, alias="instrumentScope", description="Scope of instrument") instrument_name: Optional[constr(strict=True, max_length=256, min_length=0)] = Field(None, alias="instrumentName", description="Name of instrument") instrument_definition: Optional[LusidInstrument] = Field(None, alias="instrumentDefinition") counterparty_agreement_id: Optional[ResourceId] = Field(None, alias="counterpartyAgreementId") counterparty: Optional[constr(strict=True, max_length=256, min_length=0)] = Field(None, description="Counterparty") instrument_properties: Optional[conlist(ModelProperty)] = Field(None, alias="instrumentProperties", description="Set of instrument properties (as defined by client/user).") transaction_properties: Optional[conlist(ModelProperty)] = Field(None, alias="transactionProperties", description="Set of transaction properties (as defined by client/user).") trade_ticket_type: StrictStr = Field(..., alias="tradeTicketType", description="The available values are: LusidTradeTicket, ExternalTradeTicket") __properties = ["transactionId", "transactionType", "source", "transactionDate", "settlementDate", "totalConsideration", "units", "instrumentIdentifiers", "instrumentScope", "instrumentName", "instrumentDefinition", "counterpartyAgreementId", "counterparty", "instrumentProperties", "transactionProperties", "tradeTicketType"]
[docs] @validator('instrument_scope') def instrument_scope_validate_regular_expression(cls, value): """Validates the regular expression""" if value is None: return value if not re.match(r"^[a-zA-Z0-9\-_]+$", value): raise ValueError(r"must validate the regular expression /^[a-zA-Z0-9\-_]+$/") return value
[docs] @validator('trade_ticket_type') def trade_ticket_type_validate_enum(cls, value): """Validates the enum""" if value not in ('LusidTradeTicket', 'ExternalTradeTicket'): raise ValueError("must be one of enum values ('LusidTradeTicket', 'ExternalTradeTicket')") return value
[docs] class Config: """Pydantic configuration""" allow_population_by_field_name = True validate_assignment = True
[docs] def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.dict(by_alias=True))
[docs] def to_json(self) -> str: """Returns the JSON representation of the model using alias""" return json.dumps(self.to_dict())
[docs] @classmethod def from_json(cls, json_str: str) -> LusidTradeTicket: """Create an instance of LusidTradeTicket from a JSON string""" return cls.from_dict(json.loads(json_str))
[docs] def to_dict(self): """Returns the dictionary representation of the model using alias""" _dict = self.dict(by_alias=True, exclude={ }, exclude_none=True) # override the default output from pydantic by calling `to_dict()` of total_consideration if self.total_consideration: _dict['totalConsideration'] = self.total_consideration.to_dict() # override the default output from pydantic by calling `to_dict()` of instrument_definition if self.instrument_definition: _dict['instrumentDefinition'] = self.instrument_definition.to_dict() # override the default output from pydantic by calling `to_dict()` of counterparty_agreement_id if self.counterparty_agreement_id: _dict['counterpartyAgreementId'] = self.counterparty_agreement_id.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in instrument_properties (list) _items = [] if self.instrument_properties: for _item in self.instrument_properties: if _item: _items.append(_item.to_dict()) _dict['instrumentProperties'] = _items # override the default output from pydantic by calling `to_dict()` of each item in transaction_properties (list) _items = [] if self.transaction_properties: for _item in self.transaction_properties: if _item: _items.append(_item.to_dict()) _dict['transactionProperties'] = _items # set to None if source (nullable) is None # and __fields_set__ contains the field if self.source is None and "source" in self.__fields_set__: _dict['source'] = None # set to None if instrument_scope (nullable) is None # and __fields_set__ contains the field if self.instrument_scope is None and "instrument_scope" in self.__fields_set__: _dict['instrumentScope'] = None # set to None if instrument_name (nullable) is None # and __fields_set__ contains the field if self.instrument_name is None and "instrument_name" in self.__fields_set__: _dict['instrumentName'] = None # set to None if counterparty (nullable) is None # and __fields_set__ contains the field if self.counterparty is None and "counterparty" in self.__fields_set__: _dict['counterparty'] = None # set to None if instrument_properties (nullable) is None # and __fields_set__ contains the field if self.instrument_properties is None and "instrument_properties" in self.__fields_set__: _dict['instrumentProperties'] = None # set to None if transaction_properties (nullable) is None # and __fields_set__ contains the field if self.transaction_properties is None and "transaction_properties" in self.__fields_set__: _dict['transactionProperties'] = None return _dict
[docs] @classmethod def from_dict(cls, obj: dict) -> LusidTradeTicket: """Create an instance of LusidTradeTicket from a dict""" if obj is None: return None if not isinstance(obj, dict): return LusidTradeTicket.parse_obj(obj) _obj = LusidTradeTicket.parse_obj({ "transaction_id": obj.get("transactionId"), "transaction_type": obj.get("transactionType"), "source": obj.get("source"), "transaction_date": obj.get("transactionDate"), "settlement_date": obj.get("settlementDate"), "total_consideration": CurrencyAndAmount.from_dict(obj.get("totalConsideration")) if obj.get("totalConsideration") is not None else None, "units": obj.get("units"), "instrument_identifiers": obj.get("instrumentIdentifiers"), "instrument_scope": obj.get("instrumentScope"), "instrument_name": obj.get("instrumentName"), "instrument_definition": LusidInstrument.from_dict(obj.get("instrumentDefinition")) if obj.get("instrumentDefinition") is not None else None, "counterparty_agreement_id": ResourceId.from_dict(obj.get("counterpartyAgreementId")) if obj.get("counterpartyAgreementId") is not None else None, "counterparty": obj.get("counterparty"), "instrument_properties": [ModelProperty.from_dict(_item) for _item in obj.get("instrumentProperties")] if obj.get("instrumentProperties") is not None else None, "transaction_properties": [ModelProperty.from_dict(_item) for _item in obj.get("transactionProperties")] if obj.get("transactionProperties") is not None else None, "trade_ticket_type": obj.get("tradeTicketType") }) return _obj