summaryrefslogtreecommitdiff
path: root/api/opendc/util
diff options
context:
space:
mode:
Diffstat (limited to 'api/opendc/util')
-rw-r--r--api/opendc/util/database.py23
-rw-r--r--api/opendc/util/json.py12
-rw-r--r--api/opendc/util/path_parser.py5
-rw-r--r--api/opendc/util/rest.py2
4 files changed, 18 insertions, 24 deletions
diff --git a/api/opendc/util/database.py b/api/opendc/util/database.py
index 80cdcbab..dd26533d 100644
--- a/api/opendc/util/database.py
+++ b/api/opendc/util/database.py
@@ -1,8 +1,6 @@
-import json
import urllib.parse
from datetime import datetime
-from bson.json_util import dumps
from pymongo import MongoClient
DATETIME_STRING_FORMAT = '%Y-%m-%dT%H:%M:%S'
@@ -31,32 +29,25 @@ class Database:
The query needs to be in json format, i.e.: `{'name': prefab_name}`.
"""
- bson = getattr(self.opendc_db, collection).find_one(query)
-
- return self.convert_bson_to_json(bson)
+ return getattr(self.opendc_db, collection).find_one(query)
def fetch_all(self, query, collection):
"""Uses existing mongo connection to return all documents matching a given query, as a list of JSON objects.
The query needs to be in json format, i.e.: `{'name': prefab_name}`.
"""
- results = []
cursor = getattr(self.opendc_db, collection).find(query)
- for doc in cursor:
- results.append(self.convert_bson_to_json(doc))
- return results
+ return list(cursor)
def insert(self, obj, collection):
"""Updates an existing object."""
bson = getattr(self.opendc_db, collection).insert(obj)
- return self.convert_bson_to_json(bson)
+ return bson
def update(self, _id, obj, collection):
"""Updates an existing object."""
- bson = getattr(self.opendc_db, collection).update({'_id': _id}, obj)
-
- return self.convert_bson_to_json(bson)
+ return getattr(self.opendc_db, collection).update({'_id': _id}, obj)
def delete_one(self, query, collection):
"""Deletes one object matching the given query.
@@ -73,12 +64,6 @@ class Database:
getattr(self.opendc_db, collection).delete_many(query)
@staticmethod
- def convert_bson_to_json(bson):
- """Converts a BSON representation to JSON and returns the JSON representation."""
- json_string = dumps(bson)
- return json.loads(json_string)
-
- @staticmethod
def datetime_to_string(datetime_to_convert):
"""Return a database-compatible string representation of the given datetime object."""
return datetime_to_convert.strftime(DATETIME_STRING_FORMAT)
diff --git a/api/opendc/util/json.py b/api/opendc/util/json.py
new file mode 100644
index 00000000..2ef4f965
--- /dev/null
+++ b/api/opendc/util/json.py
@@ -0,0 +1,12 @@
+import flask
+from bson.objectid import ObjectId
+
+
+class JSONEncoder(flask.json.JSONEncoder):
+ """
+ A customized JSON encoder to handle unsupported types.
+ """
+ def default(self, o):
+ if isinstance(o, ObjectId):
+ return str(o)
+ return flask.json.JSONEncoder.default(self, o)
diff --git a/api/opendc/util/path_parser.py b/api/opendc/util/path_parser.py
index a8bbdeba..c8452f20 100644
--- a/api/opendc/util/path_parser.py
+++ b/api/opendc/util/path_parser.py
@@ -31,9 +31,6 @@ def parse(version, endpoint_path):
for (name, value) in zip(path, endpoint_path_parts):
if name.startswith('{'):
- try:
- parameters[name.strip('{}')] = int(value)
- except:
- parameters[name.strip('{}')] = value
+ parameters[name.strip('{}')] = value
return '{}/{}'.format(version, '/'.join(path)), parameters
diff --git a/api/opendc/util/rest.py b/api/opendc/util/rest.py
index abd2f3de..c9e98295 100644
--- a/api/opendc/util/rest.py
+++ b/api/opendc/util/rest.py
@@ -138,4 +138,4 @@ class Response:
if self.content is not None:
data['content'] = self.content
- return json.dumps(data)
+ return json.dumps(data, default=str)