2021-01-16 19:24:07 +01:00

131 lines
3.8 KiB
Python

from app_be.views.mongo_db import MongoManager
from app_be.services.hashservice import create_sha512
class MongoDBService:
@staticmethod
def check() -> bool:
try:
instance = MongoManager.getInstance()
instance.AIC
except:
return False
return True
@staticmethod
def getAll():
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
resp = []
try:
for meta in col.find():
meta['id'] = str(meta['_id'])
del meta['_id']
resp.append(meta)
except:
print("Could not find Metadata")
return resp
@staticmethod
def getSingle(identifier):
metadata = None
try:
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
metadata = None
resp = col.find({"identifier": identifier})
metadata = resp[0]
print("MongoDBService: Metadata: ", metadata)
except:
print("Could not find Metadata")
if metadata is None:
return None
else:
if '_id' in metadata:
del metadata['_id']
return metadata
@staticmethod
def createSingle(metadata, identifier, decoded_image):
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
metadata['identifier'] = identifier
metadata['location'] = [metadata['longitude'], metadata['latitude']]
metadata['sha512'] = create_sha512(decoded_image)
col.insert_one(metadata)
@staticmethod
def updateSingle(identifier, decoded_image, meta=None) -> bool:
print("MongoDBService: Trying to update file with identifier " + identifier)
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
old = {"identifier": identifier} # Query for old version
existing_meta_data_copy = MongoDBService.getSingle(identifier)
id_for_previous = identifier + '_' + str(meta['version'])
existing_meta_data_copy['previous'] = id_for_previous
identifier_changed = id_for_previous # Set identifier to include version
del meta['filename']
existing_meta_data_copy.update(meta)
existing_meta_data_copy['version'] = meta['version'] + 1 # Increment version by one
print("MongoDBService: identifier_changed: ", identifier_changed)
col.update_one(old, {"$set": {"identifier": identifier_changed, "filename": identifier_changed + '.jpg'}})
print("MongoDBService: Old object is ", col.find_one({"identifier": identifier_changed}))
MongoDBService.createSingle(existing_meta_data_copy, identifier, decoded_image)
print("MongoDBService: New object is ", col.find_one({"identifier": identifier}))
return True
@staticmethod
def deleteSingle(identifier):
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
try:
resp = col.delete_one({"identifier": identifier})
return resp
except:
print("Could not delete Metadata")
return resp
@staticmethod
def replaceHash(identifier, decoded_image):
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
col.update_one({"identifier": identifier}, {"$set": {"sha512": create_sha512(decoded_image)}})
@staticmethod
def deleteAll():
instance = MongoManager.getInstance()
db = instance.AIC
col = db.metadata
try:
resp = col.delete_many({})
return resp
except:
print("Could not delete Metadata")
return resp