[13.0][IMP] attachment_azure: Write and read storage name along filename for extended usability

This commit is contained in:
Patrick Tombez
2021-11-15 14:48:28 +01:00
committed by Yannick Vaucher
co-authored by Yannick Vaucher
parent 8a4e636d94
commit 33fc61c00f
2 changed files with 17 additions and 5 deletions
+14 -5
View File
@@ -129,8 +129,9 @@ class IrAttachment(models.Model):
return str.lower(storage_name)[:63]
@api.model
def _get_azure_container(self):
container_name = self._get_container_name()
def _get_azure_container(self, container_name=None):
if not container_name:
container_name = self._get_container_name()
blob_service_client = self._get_blob_service_client()
container_client = blob_service_client.get_container_client(container_name)
try:
@@ -146,8 +147,12 @@ class IrAttachment(models.Model):
@api.model
def _store_file_read(self, fname, bin_size=False):
if fname.startswith("azure://"):
container_client = self._get_azure_container()
key = fname.replace("azure://", "", 1).lower()
if '/' in key:
container_name, key = key.split('/')
else:
container_name = None
container_client = self._get_azure_container(container_name)
try:
blob_client = container_client.get_blob_client(key)
if bin_size:
@@ -166,11 +171,11 @@ class IrAttachment(models.Model):
location = self.env.context.get("storage_location") or self._storage()
if location == "azure":
container_client = self._get_azure_container()
filename = "azure://%s/%s" % (container_client.container_name, key)
with io.BytesIO() as file:
blob_client = container_client.get_blob_client(key.lower())
file.write(bin_data)
file.seek(0)
filename = "azure://%s" % (key)
try:
blob_client.upload_blob(file, blob_type="BlockBlob")
except ResourceExistsError:
@@ -189,8 +194,12 @@ class IrAttachment(models.Model):
@api.model
def _store_file_delete(self, fname):
if fname.startswith("azure://"):
container_client = self._get_azure_container()
key = fname.replace("azure://", "", 1).lower()
if '/' in key:
container_name, key = key.split('/')
else:
container_name = None
container_client = self._get_azure_container(container_name)
# delete the file only if it is on the current configured container
# otherwise, we might delete files used on a different environment
try: