Merge branch 'master' into 4-mongodb_api
This commit is contained in:
@@ -70,7 +70,7 @@ class DropboxService(StorageServiceInterface):
|
||||
return file_bytes
|
||||
|
||||
@staticmethod
|
||||
def move_file(identifier_from: str, identifier_to: str, file: bytes) -> bool:
|
||||
def move_file(identifier_from: str, identifier_to: str) -> bool:
|
||||
"""Move/Rename a file on the dropbox storage.
|
||||
|
||||
:param identifier_from: Location of the file to be moved
|
||||
|
||||
@@ -66,7 +66,7 @@ class MinioService(StorageServiceInterface):
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def move_file(identifier_from: str, identifier_to: str, file: bytes) -> bool:
|
||||
def move_file(identifier_from: str, identifier_to: str) -> bool:
|
||||
"""Move/Rename a file on the S3 storage.
|
||||
|
||||
Consists of a PUT method (copying the object) and a delete method.
|
||||
@@ -79,6 +79,8 @@ class MinioService(StorageServiceInterface):
|
||||
filename_from = identifier_from + '.jpg'
|
||||
filename_to = identifier_to
|
||||
|
||||
file = MinioService.read_file(filename_from)
|
||||
|
||||
if not MinioService.delete_file(filename_from):
|
||||
print("MinioService: Updating (delete) file {} failed".format(filename_from))
|
||||
return False
|
||||
|
||||
@@ -74,20 +74,22 @@ class MongoDBService:
|
||||
|
||||
old = {"identifier": identifier} # Query for old version
|
||||
|
||||
metadata_orig = MongoDBService.getSingle(identifier)
|
||||
metadata_new = metadata_orig
|
||||
metadata_new['previous'] = identifier + '_' + str(metadata_orig['version'])
|
||||
identifier_changed = identifier + '_' + str(metadata_orig['version']) # Set identifier to include version
|
||||
metadata_new['version'] = str(int(metadata_new['version']) + 1) # Increment version by one
|
||||
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
|
||||
|
||||
metadata_new.update(meta)
|
||||
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(metadata_new, identifier, decoded_image)
|
||||
MongoDBService.createSingle(existing_meta_data_copy, identifier, decoded_image)
|
||||
print("MongoDBService: New object is ", col.find_one({"identifier": identifier}))
|
||||
|
||||
return True
|
||||
|
||||
@@ -24,6 +24,7 @@ urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
url(r'^image/get/all$', ImageEndpoint.image_api_get_all),
|
||||
url(r'^image/get/(?P<identifier>[\w-]+)$', ImageEndpoint.image_api_get_single),
|
||||
url(r'^image/status/(?P<identifier>[\w-]+)$', ImageEndpoint.image_api_get_status),
|
||||
url(r'^image/get/(?P<identifier>[\w-]+)/version/(?P<version>[\w-]+)$', ImageEndpoint.image_api_get_single_version),
|
||||
url(r'^image/delete/all$', ImageEndpoint.image_api_delete_all),
|
||||
url(r'^image/delete/(?P<identifier>[\w-]+)$', ImageEndpoint.image_api_delete),
|
||||
|
||||
@@ -48,6 +48,31 @@ class ImageEndpoint:
|
||||
logger.debug('Image GET single call: {}'.format(request))
|
||||
return ImageEndpoint.get_image(identifier)
|
||||
|
||||
@staticmethod
|
||||
@api_view(['GET'])
|
||||
def image_api_get_status(request, identifier):
|
||||
# get metadata from MongoDB
|
||||
metadata = MongoDBService.getSingle(identifier)
|
||||
if not metadata:
|
||||
return JsonResponse({'valid': False, 'available': False})
|
||||
|
||||
# get stored SHA512 hash
|
||||
stored_hash = metadata.get('sha512', '')
|
||||
no_image = True
|
||||
|
||||
for service in ImageEndpoint.storageServiceList:
|
||||
service_image_bytes = service.read_file(metadata['filename'])
|
||||
if service_image_bytes is not None:
|
||||
no_image = False
|
||||
actual_service_hash = create_sha512(service_image_bytes)
|
||||
if stored_hash != actual_service_hash:
|
||||
return JsonResponse({'valid': False, 'available': True})
|
||||
|
||||
if no_image:
|
||||
JsonResponse({'valid': False, 'available': False})
|
||||
|
||||
return JsonResponse({'valid': True, 'available': True})
|
||||
|
||||
@staticmethod
|
||||
def get_image(identifier):
|
||||
|
||||
@@ -210,7 +235,6 @@ class ImageEndpoint:
|
||||
def image_api_update(request, identifier):
|
||||
logger.debug('Image UPDATE single call: {}'.format(request))
|
||||
|
||||
|
||||
try:
|
||||
payload = json.loads(request.body)
|
||||
except json.decoder.JSONDecodeError:
|
||||
@@ -222,7 +246,7 @@ class ImageEndpoint:
|
||||
'Error': str(e)}, status=500, safe=False)
|
||||
|
||||
b64encoded_image = payload['image_data']
|
||||
identifier = payload['id']
|
||||
# identifier = identifier
|
||||
metadata = payload['metadata']
|
||||
filename = payload['metadata']['filename']
|
||||
|
||||
@@ -233,6 +257,7 @@ class ImageEndpoint:
|
||||
'id': identifier}, status=404, safe=False)
|
||||
|
||||
metadata['version'] = mongodb_metadata['version']
|
||||
filename = mongodb_metadata['filename']
|
||||
|
||||
decoded_image = WrapperService.unwrap_file(b64encoded_image)
|
||||
|
||||
@@ -240,7 +265,7 @@ class ImageEndpoint:
|
||||
|
||||
for service in ImageEndpoint.storageServiceList:
|
||||
orig_new_name = identifier + '_' + str(metadata['version']) + '.jpg'
|
||||
if not service.move_file(identifier, orig_new_name, decoded_image):
|
||||
if not service.move_file(identifier, orig_new_name):
|
||||
print("Could not move file from {} to {}".format(identifier, orig_new_name))
|
||||
if not service.create_file(filename, decoded_image):
|
||||
print("Could not save updated image to " + service.name)
|
||||
|
||||
Reference in New Issue
Block a user