Skip to content

Commit 24c7043

Browse files
authored
Merge pull request #151 from NavAbility/23Q2/fix/getfactorb64
getFactor when .data is b64 or not
2 parents 5065f28 + 283295a commit 24c7043

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

src/navability/entities/factor/factor.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import json
66
import base64
77

8-
from marshmallow import EXCLUDE, Schema, fields, post_load
8+
from marshmallow import EXCLUDE, Schema, fields, post_load, pre_load
99

1010
from navability.common.timestamps import TS_FORMAT
1111
from 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):
160160
class 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.

src/navability/services/factor.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
logger = logging.getLogger(__name__)
4141

4242

43-
async def getFactorAsync(fgclient: DFGClient, label: str):
43+
async def getFactorAsync(fgclient: DFGClient, label: str, debug=False):
4444

4545
client = fgclient.client
4646
context = fgclient.context
@@ -78,11 +78,13 @@ async def getFactorAsync(fgclient: DFGClient, label: str):
7878
return None
7979
if len(fs) > 1:
8080
raise Exception(f"More than one factor named {label} returned")
81+
if debug:
82+
return fs[0]
8183
return Factor.load(fs[0])
8284

8385

84-
def getFactor(fgclient: DFGClient, label: str):
85-
tsk = getFactorAsync(fgclient, label)
86+
def getFactor(fgclient: DFGClient, label: str, debug=False):
87+
tsk = getFactorAsync(fgclient, label, debug=debug)
8688
return asyncio.run(tsk)
8789

8890

@@ -166,7 +168,7 @@ async def _addFactorAsync(
166168
}
167169
}
168170
}
169-
for vlink in f.variableOrderSymbols
171+
for vlink in f._variableOrderSymbols
170172
]
171173
}
172174

@@ -177,7 +179,7 @@ async def _addFactorAsync(
177179
'tags': f.tags,
178180
'solvable': f.solvable,
179181
'data': FactorSchema().get_data(f),
180-
'_variableOrderSymbols': f.variableOrderSymbols,
182+
'_variableOrderSymbols': f._variableOrderSymbols,
181183
'timestamp': FactorSchema().get_timestamp(f),
182184
'_type': f.fnctype,
183185
'_version': f._version,

0 commit comments

Comments
 (0)