feat(chalice): tag mob files for scheduled delete

This commit is contained in:
Taha Yassine Kraiem 2023-04-17 13:19:32 +01:00
parent b844342a97
commit 7684798f85
5 changed files with 28 additions and 36 deletions

View file

@ -29,4 +29,4 @@ def get_urls(session_id, project_id, check_existence: bool = True):
def delete_mobs(project_id, session_ids):
for session_id in session_ids:
for k in __get_devtools_keys(project_id=project_id, session_id=session_id):
s3.schedule_for_deletion(bucket=config("sessions_bucket"), key=k)
s3.tag_for_deletion(bucket=config("sessions_bucket"), key=k)

View file

@ -59,4 +59,4 @@ def delete_mobs(project_id, session_ids):
for session_id in session_ids:
for k in __get_mob_keys(project_id=project_id, session_id=session_id) \
+ __get_mob_keys_deprecated(session_id=session_id):
s3.schedule_for_deletion(bucket=config("sessions_bucket"), key=k)
s3.tag_for_deletion(bucket=config("sessions_bucket"), key=k)

View file

@ -1,5 +1,4 @@
import hashlib
from datetime import datetime, timedelta
from urllib.parse import urlparse
import boto3
@ -109,23 +108,10 @@ def rename(source_bucket, source_key, target_bucket, target_key):
s3.Object(source_bucket, source_key).delete()
def schedule_for_deletion(bucket, key):
def tag_for_deletion(bucket, key):
if not exists(bucket, key):
return False
s3 = __get_s3_resource()
s3_origin = s3.Object(bucket, key)
target_key = key.split("/")
target_key[-1] = "del_" + target_key[-1]
target_key = "/".join(target_key)
s3_target = s3.Object(bucket, target_key)
s3_target.copy_from(
CopySource={'Bucket': bucket, 'Key': key},
Expires=datetime.utcnow(),
MetadataDirective='COPY',
TaggingDirective='COPY'
)
s3_origin.delete()
tag_file(bucket=bucket, file_key=key, tag_key='to_delete_in_days', tag_value='7')
def generate_file_key(project_id, key):
@ -136,3 +122,18 @@ def generate_file_key_from_url(project_id, url):
u = urlparse(url)
new_url = u.scheme + "://" + u.netloc + u.path
return generate_file_key(project_id=project_id, key=new_url)
def tag_file(file_key, bucket, tag_key, tag_value):
return client.put_object_tagging(
Bucket=bucket,
Key=file_key,
Tagging={
'TagSet': [
{
'Key': tag_key,
'Value': tag_value
},
]
}
)

View file

@ -36,4 +36,4 @@ def get_urls(session_id, project_id, context: schemas_ee.CurrentContext, check_e
def delete_mobs(project_id, session_ids):
for session_id in session_ids:
for k in __get_devtools_keys(project_id=project_id, session_id=session_id):
s3.schedule_for_deletion(bucket=config("sessions_bucket"), key=k)
s3.tag_for_deletion(bucket=config("sessions_bucket"), key=k)

View file

@ -4,23 +4,14 @@ from chalicelib.utils import s3
def tag_session(file_key, tag_key='retention', tag_value='vault'):
return tag_file(file_key=file_key, bucket=config("sessions_bucket"), tag_key=tag_key, tag_value=tag_value)
bucket = config("sessions_bucket")
if not s3.exists(bucket=bucket, key=file_key):
return None
return s3.tag_file(file_key=file_key, bucket=bucket, tag_key=tag_key, tag_value=tag_value)
def tag_record(file_key, tag_key='retention', tag_value='vault'):
return tag_file(file_key=file_key, bucket=config('ASSIST_RECORDS_BUCKET'), tag_key=tag_key, tag_value=tag_value)
def tag_file(file_key, bucket, tag_key, tag_value):
return s3.client.put_object_tagging(
Bucket=bucket,
Key=file_key,
Tagging={
'TagSet': [
{
'Key': tag_key,
'Value': tag_value
},
]
}
)
bucket = config('ASSIST_RECORDS_BUCKET')
if not s3.exists(bucket=bucket, key=file_key):
return None
return s3.tag_file(file_key=file_key, bucket=bucket, tag_key=tag_key, tag_value=tag_value)