summaryrefslogtreecommitdiff
path: root/opendc/util/database.py
diff options
context:
space:
mode:
authorGeorgios Andreadis <info@gandreadis.com>2020-06-24 13:26:56 +0200
committerGeorgios Andreadis <info@gandreadis.com>2020-06-24 13:26:56 +0200
commitdb979d36d0b9693cc81ffa0bdd29364c6218fc95 (patch)
tree269c21d599ecd190a87e51775ef533b0ea847b56 /opendc/util/database.py
parentc7f773b027019086153f0260b507c8fa173ee5e8 (diff)
Add working test setup
Diffstat (limited to 'opendc/util/database.py')
-rw-r--r--opendc/util/database.py126
1 files changed, 61 insertions, 65 deletions
diff --git a/opendc/util/database.py b/opendc/util/database.py
index 0e424aa4..24572279 100644
--- a/opendc/util/database.py
+++ b/opendc/util/database.py
@@ -7,91 +7,87 @@ from pymongo import MongoClient
DATETIME_STRING_FORMAT = '%Y-%m-%dT%H:%M:%S'
CONNECTION_POOL = None
+DB = None
-def init_connection_pool(user, password, database, host, port):
- user = urllib.parse.quote_plus(user) # TODO: replace this with environment variable
- password = urllib.parse.quote_plus(password) # TODO: same as above
- database = urllib.parse.quote_plus(database)
- host = urllib.parse.quote_plus(host)
+class Database:
+ def __init__(self, user, password, database, host):
+ user = urllib.parse.quote_plus(user) # TODO: replace this with environment variable
+ password = urllib.parse.quote_plus(password) # TODO: same as above
+ database = urllib.parse.quote_plus(database)
+ host = urllib.parse.quote_plus(host)
- global opendcdb
+ client = MongoClient('mongodb://%s:%s@%s/default_db?authSource=%s' % (user, password, host, database))
+ self.opendc_db = client.opendc
- client = MongoClient('mongodb://%s:%s@%s/default_db?authSource=%s' % (user, password, host, database))
- opendcdb = client.opendc
+ def fetch_one(self, query, collection):
+ """Uses existing mongo connection to return a single (the first) document in a collection matching the given
+ query as a JSON object.
+ The query needs to be in json format, i.e.: `{'name': prefab_name}`.
+ """
+ bson = getattr(self.opendc_db, collection).find_one(query)
-def fetch_one(query, collection):
- """Uses existing mongo connection to return a single (the first) document in a collection matching the given
- query as a JSON object.
+ return self.convert_bson_to_json(bson)
- The query needs to be in json format, i.e.: `{'name': prefab_name}`.
- """
- bson = getattr(opendcdb, 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.
- return convert_bson_to_json(bson)
+ 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
+ def insert(self, obj, collection):
+ """Updates an existing object."""
+ bson = getattr(self.opendc_db, collection).insert(obj)
-def fetch_all(query, collection):
- """Uses existing mongo connection to return all documents matching a given query, as a list of JSON objects.
+ return self.convert_bson_to_json(bson)
- The query needs to be in json format, i.e.: `{'name': prefab_name}`.
- """
- results = []
- cursor = getattr(opendcdb, collection).find(query)
- for doc in cursor:
- results.append(convert_bson_to_json(doc))
- return results
+ 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)
-def insert(obj, collection):
- """Updates an existing object."""
- bson = getattr(opendcdb, collection).insert(obj)
+ def delete_one(self, query, collection):
+ """Deletes one object matching the given query.
- return convert_bson_to_json(bson)
+ The query needs to be in json format, i.e.: `{'name': prefab_name}`.
+ """
+ bson = getattr(self.opendc_db, collection).delete_one(query)
+ return self.convert_bson_to_json(bson)
-def update(_id, obj, collection):
- """Updates an existing object."""
- bson = getattr(opendcdb, collection).update({'_id': _id}, obj)
+ def delete_all(self, query, collection):
+ """Deletes all objects matching the given query.
- return convert_bson_to_json(bson)
+ The query needs to be in json format, i.e.: `{'name': prefab_name}`.
+ """
+ bson = getattr(self.opendc_db, collection).delete_many(query)
+ return self.convert_bson_to_json(bson)
-def delete_one(query, collection):
- """Deletes one object matching the given 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)
- The query needs to be in json format, i.e.: `{'name': prefab_name}`.
- """
- bson = getattr(opendcdb, collection).delete_one(query)
+ @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)
- return convert_bson_to_json(bson)
+ @staticmethod
+ def string_to_datetime(string_to_convert):
+ """Return a datetime corresponding to the given string representation."""
+ return datetime.strptime(string_to_convert, DATETIME_STRING_FORMAT)
-def delete_all(query, collection):
- """Deletes all objects matching the given query.
-
- The query needs to be in json format, i.e.: `{'name': prefab_name}`.
- """
- bson = getattr(opendcdb, collection).delete_many(query)
-
- return convert_bson_to_json(bson)
-
-
-def convert_bson_to_json(bson):
- # Convert BSON representation to JSON
- json_string = dumps(bson)
- # Load as a JSON object
- return json.loads(json_string)
-
-
-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)
-
-
-def string_to_datetime(string_to_convert):
- """Return a datetime corresponding to the given string representation."""
-
- return datetime.strptime(string_to_convert, DATETIME_STRING_FORMAT)
+def initialize_database(user, password, database, host):
+ global DB
+ DB = Database(user, password, database, host)