- Adding functionality for listing and editing assets
- Started adding functionality for creating a 'full_documents' list view.
This commit is contained in:
@@ -3,9 +3,10 @@ import json
|
||||
import uuid
|
||||
from datetime import datetime as dt, timezone as tz
|
||||
import time
|
||||
from common.extensions import minio_client
|
||||
|
||||
from flask import request, redirect, flash, render_template, Blueprint, session, current_app, jsonify, url_for
|
||||
from flask_security import roles_accepted
|
||||
from flask_security import roles_accepted, current_user
|
||||
from langchain.agents import Agent
|
||||
from sqlalchemy import desc
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
@@ -775,3 +776,114 @@ def handle_specialist_magic_link_selection():
|
||||
specialist_magic_link_id=specialist_ml_id))
|
||||
|
||||
return redirect(prefixed_url_for('interaction_bp.specialists'))
|
||||
|
||||
|
||||
# Routes for Asset Management ---------------------------------------------------------------------
|
||||
@interaction_bp.route('/assets', methods=['GET', 'POST'])
|
||||
def assets():
|
||||
from eveai_app.views.list_views.assets_list_view import AssetsListView
|
||||
view = AssetsListView(
|
||||
model=EveAIAsset,
|
||||
template='interaction/assets.html',
|
||||
per_page=10
|
||||
)
|
||||
return view.get()
|
||||
|
||||
|
||||
@interaction_bp.route('/handle_asset_selection', methods=['POST'])
|
||||
def handle_asset_selection():
|
||||
action = request.form.get('action')
|
||||
asset_id = request.form.get('selected_row')
|
||||
current_app.logger.debug(f"Action: {action}, Asset ID: {asset_id}")
|
||||
|
||||
if action == 'edit_asset':
|
||||
return redirect(prefixed_url_for('interaction_bp.edit_asset', asset_id=asset_id))
|
||||
|
||||
return redirect(prefixed_url_for('interaction_bp.assets'))
|
||||
|
||||
|
||||
@interaction_bp.route('/edit_asset/<int:asset_id>', methods=['GET', 'POST'])
|
||||
def edit_asset(asset_id):
|
||||
asset = EveAIAsset.query.get_or_404(asset_id)
|
||||
tenant_id = session.get('tenant', {}).get('id')
|
||||
|
||||
if not tenant_id:
|
||||
flash('Geen tenant geselecteerd', 'error')
|
||||
return redirect(url_for('interaction_bp.assets'))
|
||||
|
||||
# Controleer of het bestandstype wordt ondersteund
|
||||
if asset.file_type != 'json':
|
||||
flash(
|
||||
f'Bestandstype "{asset.file_type}" wordt momenteel niet ondersteund voor bewerking. Alleen JSON-bestanden kunnen worden bewerkt.',
|
||||
'warning')
|
||||
return redirect(url_for('interaction_bp.assets'))
|
||||
|
||||
if request.method == 'GET':
|
||||
try:
|
||||
# Haal het bestand op uit MinIO
|
||||
file_data = minio_client.download_asset_file(
|
||||
tenant_id,
|
||||
asset.bucket_name,
|
||||
asset.object_name
|
||||
)
|
||||
|
||||
# Decodeer JSON data
|
||||
json_content = json.loads(file_data.decode('utf-8'))
|
||||
|
||||
context = {
|
||||
'asset': asset,
|
||||
'json_content': json.dumps(json_content, indent=2),
|
||||
'asset_id': asset_id
|
||||
}
|
||||
|
||||
return render_template('interaction/edit_asset.html', **context)
|
||||
|
||||
except json.JSONDecodeError:
|
||||
flash('Fout bij het laden van het JSON-bestand: ongeldig JSON-formaat', 'error')
|
||||
return redirect(prefixed_url_for('interaction_bp.assets'))
|
||||
except Exception as e:
|
||||
current_app.logger.error(f"Error loading asset {asset_id}: {str(e)}")
|
||||
flash(f'Fout bij het laden van het asset: {str(e)}', 'error')
|
||||
return redirect(prefixed_url_for('interaction_bp.assets'))
|
||||
|
||||
elif request.method == 'POST':
|
||||
try:
|
||||
# Haal de bewerkte JSON data op uit het formulier
|
||||
json_data = request.form.get('json_content')
|
||||
|
||||
if not json_data:
|
||||
flash('Geen JSON data ontvangen', 'error')
|
||||
return redirect(prefixed_url_for('interaction_bp.edit_asset', asset_id=asset_id))
|
||||
|
||||
# Valideer JSON formaat
|
||||
try:
|
||||
parsed_json = json.loads(json_data)
|
||||
except json.JSONDecodeError as e:
|
||||
flash(f'Ongeldig JSON-formaat: {str(e)}', 'error')
|
||||
return redirect(prefixed_url_for('interaction_bp.edit_asset', asset_id=asset_id))
|
||||
|
||||
# Upload de bijgewerkte JSON naar MinIO
|
||||
bucket_name, object_name, file_size = minio_client.upload_asset_file(
|
||||
tenant_id,
|
||||
asset.id,
|
||||
asset.type,
|
||||
asset.file_type,
|
||||
json_data
|
||||
)
|
||||
|
||||
# Update asset metadata
|
||||
asset.file_size = file_size
|
||||
asset.updated_at = dt.now(tz.utc)
|
||||
asset.updated_by = current_user.id
|
||||
asset.last_used_at = dt.now(tz.utc)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
flash('Asset succesvol bijgewerkt', 'success')
|
||||
return redirect(prefixed_url_for('interaction_bp.assets'))
|
||||
|
||||
except Exception as e:
|
||||
db.session.rollback()
|
||||
current_app.logger.error(f"Error saving asset {asset_id}: {str(e)}")
|
||||
flash(f'Fout bij het opslaan van het asset: {str(e)}', 'error')
|
||||
return redirect(prefixed_url_for('interaction_bp.edit_asset', asset_id=asset_id))
|
||||
Reference in New Issue
Block a user