CC-5888: Handle file deletion if the file is stored in the cloud
This commit is contained in:
parent
8e714bcb64
commit
aaee522ec6
7 changed files with 134 additions and 39 deletions
|
@ -3,7 +3,7 @@ import logging
|
|||
import uuid
|
||||
|
||||
from libcloud.storage.providers import get_driver
|
||||
from libcloud.storage.types import Provider, ContainerDoesNotExistError
|
||||
from libcloud.storage.types import Provider, ContainerDoesNotExistError, ObjectDoesNotExistError
|
||||
|
||||
class CloudStorageUploader:
|
||||
def __init__(self, provider, bucket, api_key, api_key_secret):
|
||||
|
@ -17,15 +17,16 @@ class CloudStorageUploader:
|
|||
file_name, extension = os.path.splitext(file_base_name)
|
||||
object_name = "%s_%s%s" % (file_name, str(uuid.uuid4()), extension)
|
||||
|
||||
cls = get_driver(getattr(Provider, self._provider))
|
||||
driver = cls(self._api_key, self._api_key_secret)
|
||||
#cls = get_driver(getattr(Provider, self._provider))
|
||||
driver = self.get_cloud_driver()
|
||||
|
||||
try:
|
||||
container = driver.get_container(self._bucket)
|
||||
except ContainerDoesNotExistError:
|
||||
container = driver.create_container(self._bucket)
|
||||
|
||||
extra = {'meta_data': {'filename': file_base_name}}
|
||||
extra = {'meta_data': {'filename': file_base_name},
|
||||
'acl': 'public-read-write'}
|
||||
|
||||
with open(audio_file_path, 'rb') as iterator:
|
||||
obj = driver.upload_object_via_stream(iterator=iterator,
|
||||
|
@ -33,14 +34,32 @@ class CloudStorageUploader:
|
|||
object_name=object_name,
|
||||
extra=extra)
|
||||
|
||||
|
||||
metadata["filesize"] = os.path.getsize(audio_file_path)
|
||||
|
||||
'''remove file from organize directory'''
|
||||
try:
|
||||
os.remove(audio_file_path)
|
||||
except OSError:
|
||||
logging.info("Could not remove %s" % audio_file_path)
|
||||
logging.info("Could not remove %s from organize directory" % audio_file_path)
|
||||
|
||||
metadata["s3_object_name"] = object_name
|
||||
return metadata
|
||||
|
||||
def delete_obj(self, object_name):
|
||||
pass
|
||||
def delete_obj(self, obj_name):
|
||||
driver = self.get_cloud_driver()
|
||||
|
||||
return_msg = dict()
|
||||
return_msg["success"] = False
|
||||
try:
|
||||
cloud_obj = driver.get_object(container_name=self._bucket,
|
||||
object_name=obj_name)
|
||||
return_msg["filesize"] = getattr(cloud_obj, 'size')
|
||||
return_msg["success"] = driver.delete_object(obj=cloud_obj)
|
||||
return return_msg
|
||||
except ObjectDoesNotExistError:
|
||||
logging.info("Could not find object on %s" % self._provider)
|
||||
|
||||
def get_cloud_driver(self):
|
||||
cls = get_driver(getattr(Provider, self._provider))
|
||||
return cls(self._api_key, self._api_key_secret)
|
||||
|
|
|
@ -162,19 +162,26 @@ class MessageListener:
|
|||
'''
|
||||
try:
|
||||
msg_dict = json.loads(body)
|
||||
audio_file_path = msg_dict["tmp_file_path"]
|
||||
#final_file_path = msg_dict["final_file_path"]
|
||||
import_directory = msg_dict["import_directory"]
|
||||
original_filename = msg_dict["original_filename"]
|
||||
callback_url = msg_dict["callback_url"]
|
||||
api_key = msg_dict["api_key"]
|
||||
message_type = msg_dict["message_type"]
|
||||
callback_url = msg_dict["callback_url"]
|
||||
|
||||
if event_type == "upload":
|
||||
if message_type == "upload":
|
||||
audio_file_path = msg_dict["tmp_file_path"]
|
||||
import_directory = msg_dict["import_directory"]
|
||||
original_filename = msg_dict["original_filename"]
|
||||
|
||||
audio_metadata = self.spawn_analyzer_process(audio_file_path, import_directory, original_filename)
|
||||
StatusReporter.report_success_to_callback_url(callback_url, api_key, audio_metadata)
|
||||
elif event_type == "delete":
|
||||
pass
|
||||
elif message_type == "delete":
|
||||
object_name = msg_dict["object_name"]
|
||||
csu = CloudStorageUploader(self._provider, self._bucket, self._api_key, self._api_key_secret)
|
||||
response = csu.delete_obj(object_name)
|
||||
if response["success"]:
|
||||
audio_metadata = dict()
|
||||
audio_metadata["delete_success"] = True
|
||||
audio_metadata["filesize"] = response["filesize"]
|
||||
StatusReporter.report_success_to_callback_url(callback_url, api_key, audio_metadata)
|
||||
|
||||
except KeyError as e:
|
||||
# A field in msg_dict that we needed was missing (eg. audio_file_path)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue