55import json
66import base64
77
8- from marshmallow import EXCLUDE , Schema , fields , post_load
8+ from marshmallow import EXCLUDE , Schema , fields , post_load , pre_load
99
1010from navability .common .timestamps import TS_FORMAT
1111from navability .common .versions import payload_version
@@ -21,7 +21,7 @@ class FactorSkeleton:
2121 def __repr__ (self ):
2222 return (
2323 f"<FactorSkeleton(label={ self .label } ,"
24- f"variableOrderSymbols={ self .variableOrderSymbols } ,tags={ self .tags } )>"
24+ f"variableOrderSymbols={ self ._variableOrderSymbols } ,tags={ self .tags } )>"
2525 )
2626
2727 def dump (self ):
@@ -63,7 +63,7 @@ class FactorSummary:
6363 def __repr__ (self ):
6464 return (
6565 f"<FactorSkeleton(label={ self .label } ,"
66- f"variableOrderSymbols={ self .variableOrderSymbols } ,tags={ self .tags } )>"
66+ f"variableOrderSymbols={ self ._variableOrderSymbols } ,tags={ self .tags } )>"
6767 )
6868
6969 def dump (self ):
@@ -160,7 +160,7 @@ def marshal(self, data, **kwargs):
160160class Factor :
161161 label : str
162162 fnctype : str
163- variableOrderSymbols : List [str ]
163+ _variableOrderSymbols : List [str ]
164164 data : str
165165 metadata : str = "e30="
166166 tags : List [str ] = field (default_factory = lambda : ["FACTOR" ])
@@ -174,7 +174,7 @@ def __repr__(self):
174174 return (
175175 f"<{ self .__class__ .__name__ } "
176176 f"(label={ self .label } ,"
177- f"variables={ self .variableOrderSymbols } )>"
177+ f"variables={ self ._variableOrderSymbols } )>"
178178 )
179179
180180 def dump (self ):
@@ -193,7 +193,7 @@ class FactorSchema(Schema):
193193 id = fields .UUID (required = True )
194194 label = fields .Str (required = True )
195195 _version = fields .Str (required = True )
196- variableOrderSymbols = fields .List (
196+ _variableOrderSymbols = fields .List (
197197 fields .Str , data_key = "_variableOrderSymbols" , required = True
198198 )
199199 data = fields .Method ("get_data" , "set_data" , required = True )
@@ -204,6 +204,19 @@ class FactorSchema(Schema):
204204 metadata = fields .Method ("get_metadata" , "set_metadata" )
205205 solvable = fields .Int (required = True )
206206
207+ @pre_load
208+ def b64_data_duel (self , factor , many = None , partial = None ):
209+ # print(type(factor['data']), isinstance(factor['data'], dict))
210+ # yes, it's a duel here in SDK.py@v0.6.0
211+ try :
212+ json .loads (factor ['data' ])
213+ except json .JSONDecodeError as err :
214+ # discrepancy between DFG@v0.21.1 and SDK.jl@v0.6.0 in
215+ # assume .data was b64 encoded by one of the other SDKs (expected in future)
216+ factor ['data' ] = base64 .b64decode (factor ['data' ])
217+
218+ return factor
219+
207220 class Meta :
208221 ordered = True
209222 unknown = EXCLUDE # Note: This is because of _version, remote and fix later.
0 commit comments