Skip to content

Commit

Permalink
Feature custom deserializer
Browse files Browse the repository at this point in the history
  • Loading branch information
DominicCYK authored and martinroberson committed Jul 19, 2023
1 parent 98a29b9 commit 70cc2e6
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 9 deletions.
11 changes: 9 additions & 2 deletions gs_quant/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from gs_quant.context_base import ContextBase, ContextMeta
from gs_quant.json_convertors import encode_date_or_str, decode_date_or_str, decode_optional_date, encode_datetime, \
decode_datetime, decode_float_or_str, decode_instrument, encode_dictable, decode_quote_report, decode_quote_reports, \
decode_custom_comment, decode_custom_comments
decode_custom_comment, decode_custom_comments, decode_hedge_type, decode_hedge_types

_logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -584,6 +584,11 @@ class CustomComments(Base, ABC):
pass


@dataclass
class HedgeTypes(Base):
pass


def get_enum_value(enum_type: EnumMeta, value: Union[EnumBase, str]):
if value in (None,):
return None
Expand Down Expand Up @@ -622,6 +627,8 @@ def get_enum_value(enum_type: EnumMeta, value: Union[EnumBase, str]):
global_config.decoders[Optional[Tuple[QuoteReport, ...]]] = decode_quote_reports
global_config.decoders[CustomComments] = decode_custom_comment
global_config.decoders[Optional[Tuple[CustomComments, ...]]] = decode_custom_comments

global_config.decoders[Optional[HedgeTypes]] = decode_hedge_type
global_config.decoders[HedgeTypes] = decode_hedge_type
global_config.decoders[Optional[Tuple[HedgeTypes, ...]]] = decode_hedge_types
global_config.encoders[Market] = encode_dictable
global_config.encoders[Optional[Market]] = encode_dictable
10 changes: 10 additions & 0 deletions gs_quant/json_convertors.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,5 +166,15 @@ def decode_custom_comments(value: Optional[Iterable[Dict]]):
return custom_comments_from_dicts(value) if value else None


def decode_hedge_type(value: Optional[dict]):
from gs_quant.quote_reports.core import hedge_type_from_dict
return hedge_type_from_dict(value) if value else None


def decode_hedge_types(value: Optional[Iterable[Dict]]):
from gs_quant.quote_reports.core import hedge_type_from_dicts
return hedge_type_from_dicts(value) if value else None


def encode_dictable(o):
return o if o is None else o.to_dict()
25 changes: 24 additions & 1 deletion gs_quant/quote_reports/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@

from dataclasses_json.cfg import _GlobalConfig

from gs_quant.target.workflow_quote import VisualStructuringReport, BinaryImageComments, HyperLinkImageComments
from gs_quant.target.workflow_quote import VisualStructuringReport, BinaryImageComments, HyperLinkImageComments, \
CustomDeltaHedge, DeltaHedge

global_config = _GlobalConfig()

Expand Down Expand Up @@ -61,3 +62,25 @@ def custom_comments_from_dicts(in_dicts: Iterable[Dict[str, Any]]):
comments.append(report)
return comments
return None


def hedge_type_from_dict(hedge_type_dict: Dict[str, Any]):
if hedge_type_dict is not None:
type = hedge_type_dict.get('type')
if 'CustomDeltaHedge' == type:
hedge_type = CustomDeltaHedge.from_dict(hedge_type_dict)
return hedge_type
if 'DeltaHedge' == type:
hedge_type = DeltaHedge.from_dict(hedge_type_dict)
return hedge_type
return None


def hedge_type_from_dicts(in_dicts: Iterable[Dict[str, Any]]):
if in_dicts is not None:
hedge_types = []
for in_dict in in_dicts:
hedge_type = hedge_type_from_dict(in_dict)
hedge_types.append(hedge_type)
return hedge_types
return None
7 changes: 1 addition & 6 deletions gs_quant/target/workflow_quote.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,7 @@ class OverlayType(EnumBase, Enum):
MacroEvents = 'MacroEvents'
MicroEvents = 'MicroEvents'
Gamma = 'Gamma'
_None = 'None'


@dataclass
class HedgeTypes(Base):
pass
_None = 'None'


@handle_camel_case_args
Expand Down

0 comments on commit 70cc2e6

Please sign in to comment.