# 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, Union
from pydantic.v1 import BaseModel, Field, StrictStr, validator
import lusid.models
[docs]
class EconomicDependency(BaseModel):
"""
Base class for representing economic dependencies. Economic dependencies are a way of indicating how one concept depends upon another. For example, when pricing an instrument with a particular model, that model will declare that it has an EconomicDependency for each bit of market data that it needs to complete the calculation. Concretely, a pricing an FxForward will declare a dependency on the exchange rate between the two currencies at the forward date. Another example is when data is included in a data-structure only by reference. Concretely, an object depending on a FlowConvention that is referenced only semantically via a FlowConventionName will declare a FlowConventionDependency so that the full data-structure of the referenced FlowConvention can be retrieved. For deserialization purposes, this class contains a discriminator EconomicDependencyType to indicate the derived type. # noqa: E501
"""
dependency_type: StrictStr = Field(..., alias="dependencyType", description="The available values are: OpaqueDependency, CashDependency, DiscountingDependency, EquityCurveDependency, EquityVolDependency, FxDependency, FxForwardsDependency, FxVolDependency, IndexProjectionDependency, IrVolDependency, QuoteDependency, Vendor, CalendarDependency, InflationFixingDependency")
__properties = ["dependencyType"]
[docs]
@validator('dependency_type')
def dependency_type_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('OpaqueDependency', 'CashDependency', 'DiscountingDependency', 'EquityCurveDependency', 'EquityVolDependency', 'FxDependency', 'FxForwardsDependency', 'FxVolDependency', 'IndexProjectionDependency', 'IrVolDependency', 'QuoteDependency', 'Vendor', 'CalendarDependency', 'InflationFixingDependency'):
raise ValueError("must be one of enum values ('OpaqueDependency', 'CashDependency', 'DiscountingDependency', 'EquityCurveDependency', 'EquityVolDependency', 'FxDependency', 'FxForwardsDependency', 'FxVolDependency', 'IndexProjectionDependency', 'IrVolDependency', 'QuoteDependency', 'Vendor', 'CalendarDependency', 'InflationFixingDependency')")
return value
[docs]
class Config:
"""Pydantic configuration"""
allow_population_by_field_name = True
validate_assignment = True
# JSON field name that stores the object type
__discriminator_property_name = 'dependencyType'
# discriminator mappings
__discriminator_value_class_map = {
'CalendarDependency': 'CalendarDependency',
'CashDependency': 'CashDependency',
'DiscountingDependency': 'DiscountingDependency',
'EquityCurveDependency': 'EquityCurveDependency',
'EquityVolDependency': 'EquityVolDependency',
'FxDependency': 'FxDependency',
'FxForwardsDependency': 'FxForwardsDependency',
'FxVolDependency': 'FxVolDependency',
'IndexProjectionDependency': 'IndexProjectionDependency',
'InflationFixingDependency': 'InflationFixingDependency',
'IrVolDependency': 'IrVolDependency',
'OpaqueDependency': 'OpaqueDependency',
'QuoteDependency': 'QuoteDependency',
'VendorDependency': 'VendorDependency'
}
[docs]
@classmethod
def get_discriminator_value(cls, obj: dict) -> str:
"""Returns the discriminator value (object type) of the data"""
discriminator_value = obj[cls.__discriminator_property_name]
if discriminator_value:
return cls.__discriminator_value_class_map.get(discriminator_value)
else:
return None
[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) -> Union(CalendarDependency, CashDependency, DiscountingDependency, EquityCurveDependency, EquityVolDependency, FxDependency, FxForwardsDependency, FxVolDependency, IndexProjectionDependency, InflationFixingDependency, IrVolDependency, OpaqueDependency, QuoteDependency, VendorDependency):
"""Create an instance of EconomicDependency 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)
return _dict
[docs]
@classmethod
def from_dict(cls, obj: dict) -> Union(CalendarDependency, CashDependency, DiscountingDependency, EquityCurveDependency, EquityVolDependency, FxDependency, FxForwardsDependency, FxVolDependency, IndexProjectionDependency, InflationFixingDependency, IrVolDependency, OpaqueDependency, QuoteDependency, VendorDependency):
"""Create an instance of EconomicDependency from a dict"""
# look up the object type based on discriminator mapping
object_type = cls.get_discriminator_value(obj)
if object_type:
klass = getattr(lusid.models, object_type)
return klass.from_dict(obj)
else:
raise ValueError("EconomicDependency failed to lookup discriminator value from " +
json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name +
", mapping: " + json.dumps(cls.__discriminator_value_class_map))