63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
from datetime import datetime as dt, timezone as tz
|
|
|
|
from flask import current_app
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
|
|
from common.extensions import cache_manager, minio_client, db
|
|
from common.models.interaction import EveAIAsset, EveAIAssetVersion
|
|
from common.utils.document_utils import mark_tenant_storage_dirty
|
|
from common.utils.model_logging_utils import set_logging_information
|
|
|
|
|
|
def create_asset_stack(api_input, tenant_id):
|
|
type_version = cache_manager.assets_version_tree_cache.get_latest_version(api_input['type'])
|
|
api_input['type_version'] = type_version
|
|
new_asset = create_asset(api_input, tenant_id)
|
|
new_asset_version = create_version_for_asset(new_asset, tenant_id)
|
|
db.session.add(new_asset)
|
|
db.session.add(new_asset_version)
|
|
|
|
try:
|
|
db.session.commit()
|
|
except SQLAlchemyError as e:
|
|
current_app.logger.error(f"Could not add asset for tenant {tenant_id}: {str(e)}")
|
|
db.session.rollback()
|
|
raise e
|
|
|
|
return new_asset, new_asset_version
|
|
|
|
|
|
def create_asset(api_input, tenant_id):
|
|
new_asset = EveAIAsset()
|
|
new_asset.name = api_input['name']
|
|
new_asset.description = api_input['description']
|
|
new_asset.type = api_input['type']
|
|
new_asset.type_version = api_input['type_version']
|
|
if api_input['valid_from'] and api_input['valid_from'] != '':
|
|
new_asset.valid_from = api_input['valid_from']
|
|
else:
|
|
new_asset.valid_from = dt.now(tz.utc)
|
|
new_asset.valid_to = api_input['valid_to']
|
|
set_logging_information(new_asset, dt.now(tz.utc))
|
|
|
|
return new_asset
|
|
|
|
|
|
def create_version_for_asset(asset, tenant_id):
|
|
new_asset_version = EveAIAssetVersion()
|
|
new_asset_version.asset = asset
|
|
new_asset_version.bucket_name = minio_client.create_tenant_bucket(tenant_id)
|
|
set_logging_information(new_asset_version, dt.now(tz.utc))
|
|
|
|
return new_asset_version
|
|
|
|
|
|
def add_asset_version_file(asset_version, field_name, file, tenant_id):
|
|
object_name, file_size = minio_client.upload_file(asset_version.bucket_name, asset_version.id, field_name,
|
|
file.content_type)
|
|
mark_tenant_storage_dirty(tenant_id)
|
|
return object_name
|
|
|
|
|
|
|