mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +00:00 
			
		
		
		
	Implement flask-breadcrumbs everywhere
This commit is contained in:
		@@ -1,8 +1,2 @@
 | 
			
		||||
from flask import Blueprint
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template_base_dir = 'corpora/files'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bp = Blueprint('files', __name__)
 | 
			
		||||
from . import routes, json_routes
 | 
			
		||||
from .. import bp
 | 
			
		||||
from . import json_routes, routes
 | 
			
		||||
 
 | 
			
		||||
@@ -8,15 +8,7 @@ from ..decorators import corpus_follower_permission_required
 | 
			
		||||
from . import bp
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
# IMPORTANT NOTE: These routes are prefixed by the blueprint                 #
 | 
			
		||||
#                 Prefix: <hashid:corpus_id>/files                           #
 | 
			
		||||
#                 This implies that the corpus_id is always in the kwargs of #
 | 
			
		||||
#                 a route that is registered to this blueprint.              #
 | 
			
		||||
##############################################################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@bp.route('/<hashid:corpus_file_id>', methods=['DELETE'])
 | 
			
		||||
@bp.route('/<hashid:corpus_id>/files/<hashid:corpus_file_id>', methods=['DELETE'])
 | 
			
		||||
@login_required
 | 
			
		||||
@corpus_follower_permission_required('REMOVE_CORPUS_FILE')
 | 
			
		||||
@content_negotiation(produces='application/json')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +1,34 @@
 | 
			
		||||
from flask import (
 | 
			
		||||
    abort,
 | 
			
		||||
    flash,
 | 
			
		||||
    Markup,
 | 
			
		||||
    redirect,
 | 
			
		||||
    render_template,
 | 
			
		||||
    send_from_directory
 | 
			
		||||
    send_from_directory,
 | 
			
		||||
    url_for
 | 
			
		||||
)
 | 
			
		||||
from flask_login import current_user, login_required
 | 
			
		||||
from flask_breadcrumbs import register_breadcrumb
 | 
			
		||||
from flask_login import login_required
 | 
			
		||||
import os
 | 
			
		||||
from app import db
 | 
			
		||||
from app.models import Corpus, CorpusFile, CorpusStatus
 | 
			
		||||
from ..decorators import corpus_follower_permission_required
 | 
			
		||||
from . import bp, template_base_dir
 | 
			
		||||
from ..utils import corpus_endpoint_arguments_constructor as corpus_eac
 | 
			
		||||
from . import bp
 | 
			
		||||
from .forms import CreateCorpusFileForm, UpdateCorpusFileForm
 | 
			
		||||
from .utils import (
 | 
			
		||||
    corpus_file_dynamic_list_constructor as corpus_file_dlc
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
# IMPORTANT NOTE: These routes are prefixed by the blueprint                 #
 | 
			
		||||
#                 Prefix: <hashid:corpus_id>/files                           #
 | 
			
		||||
#                 This implies that the corpus_id is always in the kwargs of #
 | 
			
		||||
#                 a route that is registered to this blueprint.              #
 | 
			
		||||
##############################################################################
 | 
			
		||||
@bp.route('/<hashid:corpus_id>/files')
 | 
			
		||||
@register_breadcrumb(bp, '.entity.files', 'Files', endpoint_arguments_constructor=corpus_eac)
 | 
			
		||||
@login_required
 | 
			
		||||
def corpus_files(corpus_id):
 | 
			
		||||
    return redirect(url_for('.corpus', corpus_id=corpus_id, _anchor='files'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@bp.route('/create', methods=['GET', 'POST'])
 | 
			
		||||
@bp.route('/<hashid:corpus_id>/files/create', methods=['GET', 'POST'])
 | 
			
		||||
@register_breadcrumb(bp, '.entity.files.create', 'Create', endpoint_arguments_constructor=corpus_eac)
 | 
			
		||||
@login_required
 | 
			
		||||
@corpus_follower_permission_required('ADD_CORPUS_FILE')
 | 
			
		||||
def create_corpus_file(corpus_id):
 | 
			
		||||
@@ -58,14 +63,15 @@ def create_corpus_file(corpus_id):
 | 
			
		||||
        flash(f'Corpus File "{corpus_file.filename}" added', category='corpus')
 | 
			
		||||
        return '', 201, {'Location': corpus.url}
 | 
			
		||||
    return render_template(
 | 
			
		||||
        f'{template_base_dir}/create_corpus_file.html.j2',
 | 
			
		||||
        'corpora/files/create_corpus_file.html.j2',
 | 
			
		||||
        corpus=corpus,
 | 
			
		||||
        form=form,
 | 
			
		||||
        title='Add corpus file'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@bp.route('/<hashid:corpus_file_id>', methods=['GET', 'POST'])
 | 
			
		||||
@bp.route('/<hashid:corpus_id>/files/<hashid:corpus_file_id>', methods=['GET', 'POST'])
 | 
			
		||||
@register_breadcrumb(bp, '.entity.files.entity', '', dynamic_list_constructor=corpus_file_dlc)
 | 
			
		||||
@login_required
 | 
			
		||||
@corpus_follower_permission_required('UPDATE_CORPUS_FILE')
 | 
			
		||||
def corpus_file(corpus_id, corpus_file_id):
 | 
			
		||||
@@ -79,7 +85,7 @@ def corpus_file(corpus_id, corpus_file_id):
 | 
			
		||||
            flash(f'Corpus file "{corpus_file.filename}" updated', category='corpus')
 | 
			
		||||
        return redirect(corpus_file.corpus.url)
 | 
			
		||||
    return render_template(
 | 
			
		||||
        f'{template_base_dir}/corpus_file.html.j2',
 | 
			
		||||
        'corpora/files/corpus_file.html.j2',
 | 
			
		||||
        corpus=corpus_file.corpus,
 | 
			
		||||
        corpus_file=corpus_file,
 | 
			
		||||
        form=form,
 | 
			
		||||
@@ -87,7 +93,7 @@ def corpus_file(corpus_id, corpus_file_id):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@bp.route('/<hashid:corpus_file_id>/download')
 | 
			
		||||
@bp.route('/<hashid:corpus_id>/files/<hashid:corpus_file_id>/download')
 | 
			
		||||
@login_required
 | 
			
		||||
@corpus_follower_permission_required('VIEW')
 | 
			
		||||
def download_corpus_file(corpus_id, corpus_file_id):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								app/corpora/files/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/corpora/files/utils.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
from flask import request, url_for
 | 
			
		||||
from app.models import CorpusFile
 | 
			
		||||
from ..utils import corpus_endpoint_arguments_constructor as corpus_eac
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def corpus_file_dynamic_list_constructor():
 | 
			
		||||
    corpus_id = request.view_args['corpus_id']
 | 
			
		||||
    corpus_file_id = request.view_args['corpus_file_id']
 | 
			
		||||
    corpus_file = CorpusFile.query.filter_by(corpus_id=corpus_id, id=corpus_file_id).first_or_404()
 | 
			
		||||
    return [
 | 
			
		||||
        {
 | 
			
		||||
            'text': f'{corpus_file.author}: {corpus_file.title} ({corpus_file.publishing_year})',
 | 
			
		||||
            'url': url_for('.corpus_file', corpus_id=corpus_id, corpus_file_id=corpus_file_id)
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
		Reference in New Issue
	
	Block a user