Skip to content

Commit ad3e2ea

Browse files
committed
split out json-ifying datetimes and numpy to a separate function so that we dont do it for internal calls
1 parent c9cd998 commit ad3e2ea

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

recipe_system/cal_service/calrequestlib.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,6 @@ def get_descriptors_dict(ad):
8383
dv = dv[0] if all(v == dv[0] for v in dv) else "+".join(
8484
[str(v) for v in dv])
8585

86-
# Convert datetime types to iso representation
87-
if isinstance(dv, (datetime.datetime, datetime.date, datetime.time)):
88-
dv = dv.isoformat()
89-
# Deal with numpy float types
90-
if isinstance(dv, numpy.float32):
91-
dv = float(dv)
92-
9386
desc_dict[desc_name] = dv
9487

9588

recipe_system/cal_service/remotedb.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Defines the RemoteDB class for calibration returns. This is a high-level
22
# interface to FITSstore. It may be subclassed in future
3-
3+
import datetime
44
from os import path, makedirs
55
from io import BytesIO
66
import json
@@ -9,6 +9,8 @@
99
import urllib.parse
1010
import urllib.error
1111

12+
import numpy
13+
1214
from .caldb import CalDB, CalReturn
1315
from .calrequestlib import get_cal_requests, generate_md5_digest
1416
from .file_getter import GetterError, get_request
@@ -148,8 +150,19 @@ def _store_calibration(self, cal, caltype=None):
148150
raise
149151

150152

153+
def make_dict_json_encodable(desc_dict):
154+
for d in desc_dict:
155+
if isinstance(desc_dict[d],
156+
(datetime.datetime, datetime.date, datetime.time)):
157+
desc_dict[d] = desc_dict[d].isoformat()
158+
if isinstance(desc_dict[d], numpy.float32):
159+
desc_dict[d] = float(desc_dict[d])
160+
return desc_dict
161+
162+
151163
def retrieve_calibration(rqurl, rq, howmany=1):
152-
postdata = json.dumps({'tags': list(rq.tags), 'descriptors': rq.descriptors})
164+
postdata = json.dumps({'tags': list(rq.tags),
165+
'descriptors': make_dict_json_encodable(rq.descriptors)})
153166
try:
154167
calrq = urllib.request.Request(rqurl)
155168
u = urllib.request.urlopen(calrq, postdata.encode('utf-8'))

0 commit comments

Comments
 (0)