mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Simplify code for editing models via forms
This commit is contained in:
		@@ -13,7 +13,7 @@ from wtforms.validators import InputRequired, Length
 | 
			
		||||
from app.services import SERVICES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateContributionBaseForm(FlaskForm):
 | 
			
		||||
class ContributionBaseForm(FlaskForm):
 | 
			
		||||
    title = StringField(
 | 
			
		||||
        'Title',
 | 
			
		||||
        validators=[InputRequired(), Length(max=64)]
 | 
			
		||||
@@ -48,7 +48,7 @@ class CreateContributionBaseForm(FlaskForm):
 | 
			
		||||
    submit = SubmitField()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateTesseractOCRPipelineModelForm(CreateContributionBaseForm):
 | 
			
		||||
class CreateTesseractOCRPipelineModelForm(ContributionBaseForm):
 | 
			
		||||
    tesseract_model_file = FileField(
 | 
			
		||||
        'File',
 | 
			
		||||
        validators=[FileRequired()]
 | 
			
		||||
@@ -72,7 +72,7 @@ class CreateTesseractOCRPipelineModelForm(CreateContributionBaseForm):
 | 
			
		||||
        self.compatible_service_versions.default = ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateSpaCyNLPPipelineModelForm(CreateContributionBaseForm):
 | 
			
		||||
class CreateSpaCyNLPPipelineModelForm(ContributionBaseForm):
 | 
			
		||||
    spacy_model_file = FileField(
 | 
			
		||||
        'File',
 | 
			
		||||
        validators=[FileRequired()]
 | 
			
		||||
@@ -100,17 +100,8 @@ class CreateSpaCyNLPPipelineModelForm(CreateContributionBaseForm):
 | 
			
		||||
        self.compatible_service_versions.default = ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditContributionBaseForm(CreateContributionBaseForm):
 | 
			
		||||
    def prefill(self, model_file):
 | 
			
		||||
        ''' Pre-fill the form with data of an exististing corpus file '''
 | 
			
		||||
        self.title.data = model_file.title
 | 
			
		||||
        self.description.data = model_file.description
 | 
			
		||||
        self.publisher.data = model_file.publisher
 | 
			
		||||
        self.publishing_year.data = model_file.publishing_year
 | 
			
		||||
        self.publisher_url.data = model_file.publisher_url
 | 
			
		||||
        self.publishing_url.data = model_file.publishing_url
 | 
			
		||||
        self.version.data = model_file.version
 | 
			
		||||
        self.shared.data = model_file.shared
 | 
			
		||||
class EditContributionBaseForm(ContributionBaseForm):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EditTesseractOCRPipelineModelForm(EditContributionBaseForm):
 | 
			
		||||
@@ -122,7 +113,3 @@ class EditSpaCyNLPPipelineModelForm(EditContributionBaseForm):
 | 
			
		||||
        'Pipeline name',
 | 
			
		||||
        validators=[InputRequired(), Length(max=64)]
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def prefill(self, model_file):
 | 
			
		||||
        super().prefill(model_file)
 | 
			
		||||
        self.pipeline_name.data = model_file.pipeline_name
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,12 @@
 | 
			
		||||
from flask import abort, current_app, flash, Markup, render_template, url_for
 | 
			
		||||
from flask import (
 | 
			
		||||
    abort,
 | 
			
		||||
    current_app,
 | 
			
		||||
    flash,
 | 
			
		||||
    Markup,
 | 
			
		||||
    redirect,
 | 
			
		||||
    render_template,
 | 
			
		||||
    url_for
 | 
			
		||||
)
 | 
			
		||||
from flask_login import login_required, current_user
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from app import db
 | 
			
		||||
@@ -43,33 +51,17 @@ def tesseract_ocr_pipeline_models():
 | 
			
		||||
@bp.route('/tesseract-ocr-pipeline-models/<hashid:tesseract_ocr_pipeline_model_id>', methods=['GET', 'POST'])
 | 
			
		||||
def tesseract_ocr_pipeline_model(tesseract_ocr_pipeline_model_id):
 | 
			
		||||
    tesseract_ocr_pipeline_model = TesseractOCRPipelineModel.query.get_or_404(tesseract_ocr_pipeline_model_id)
 | 
			
		||||
    form = EditTesseractOCRPipelineModelForm(prefix='edit-tesseract-ocr-pipeline-model-form')
 | 
			
		||||
    form = EditTesseractOCRPipelineModelForm(
 | 
			
		||||
        obj=tesseract_ocr_pipeline_model,
 | 
			
		||||
        prefix='edit-tesseract-ocr-pipeline-model-form'
 | 
			
		||||
    )
 | 
			
		||||
    if form.validate_on_submit():
 | 
			
		||||
        if tesseract_ocr_pipeline_model.title != form.title.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.title = form.title.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.description != form.description.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.description = form.description.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.publisher != form.publisher.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.publisher = form.publisher.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.publishing_year != form.publishing_year.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.publishing_year = form.publishing_year.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.publisher_url != form.publisher_url.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.publisher_url = form.publisher_url.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.publishing_url != form.publishing_url.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.publishing_url = form.publishing_url.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.version != form.version.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.version = form.version.data
 | 
			
		||||
        if tesseract_ocr_pipeline_model.shared != form.shared.data:
 | 
			
		||||
            tesseract_ocr_pipeline_model.shared = form.shared.data
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        tesseract_ocr_pipeline_model_url = url_for(
 | 
			
		||||
            '.tesseract_ocr_pipeline_model',
 | 
			
		||||
            tesseract_ocr_pipeline_model_id=tesseract_ocr_pipeline_model.id
 | 
			
		||||
        )
 | 
			
		||||
        message = Markup(f'Tesseract OCR Pipeline model "<a href="{tesseract_ocr_pipeline_model_url}">{tesseract_ocr_pipeline_model.title}</a>" updated')
 | 
			
		||||
        flash(message)
 | 
			
		||||
        return {}, 201, {'Location': tesseract_ocr_pipeline_model_url}
 | 
			
		||||
    form.prefill(tesseract_ocr_pipeline_model)
 | 
			
		||||
        form.populate_obj(tesseract_ocr_pipeline_model)
 | 
			
		||||
        if db.session.is_modified(tesseract_ocr_pipeline_model):
 | 
			
		||||
            message = Markup(f'Tesseract OCR Pipeline model "<a href="{tesseract_ocr_pipeline_model.url}">{tesseract_ocr_pipeline_model.title}</a>" updated')
 | 
			
		||||
            flash(message)
 | 
			
		||||
            db.session.commit()
 | 
			
		||||
        return redirect(url_for('.tesseract_ocr_pipeline_models'))
 | 
			
		||||
    return render_template(
 | 
			
		||||
        'contributions/tesseract_ocr_pipeline_model.html.j2',
 | 
			
		||||
        form=form,
 | 
			
		||||
@@ -146,36 +138,17 @@ def spacy_nlp_pipeline_models():
 | 
			
		||||
@bp.route('/spacy-nlp-pipeline-models/<hashid:spacy_nlp_pipeline_model_id>', methods=['GET', 'POST'])
 | 
			
		||||
def spacy_nlp_pipeline_model(spacy_nlp_pipeline_model_id):
 | 
			
		||||
    spacy_nlp_pipeline_model = SpaCyNLPPipelineModel.query.get_or_404(spacy_nlp_pipeline_model_id)
 | 
			
		||||
    form = EditSpaCyNLPPipelineModelForm(prefix='edit-spacy-nlp-pipeline-model-form')
 | 
			
		||||
    form = EditSpaCyNLPPipelineModelForm(
 | 
			
		||||
        obj=spacy_nlp_pipeline_model,
 | 
			
		||||
        prefix='edit-spacy-nlp-pipeline-model-form'
 | 
			
		||||
    )
 | 
			
		||||
    if form.validate_on_submit():
 | 
			
		||||
        if spacy_nlp_pipeline_model.title != form.title.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.title = form.title.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.description != form.description.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.description = form.description.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.pipeline_name != form.pipeline_name.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.pipeline_name = form.pipeline_name.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.publisher != form.publisher.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.publisher = form.publisher.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.publishing_year != form.publishing_year.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.publishing_year = form.publishing_year.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.publisher_url != form.publisher_url.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.publisher_url = form.publisher_url.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.publishing_url != form.publishing_url.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.publishing_url = form.publishing_url.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.version != form.version.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.version = form.version.data
 | 
			
		||||
        if spacy_nlp_pipeline_model.shared != form.shared.data:
 | 
			
		||||
            spacy_nlp_pipeline_model.shared = form.shared.data
 | 
			
		||||
        current_app.logger.warning(db.session.dirty)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
        spacy_nlp_pipeline_model_url = url_for(
 | 
			
		||||
            '.spacy_nlp_pipeline_model',
 | 
			
		||||
            spacy_nlp_pipeline_model_id=spacy_nlp_pipeline_model.id
 | 
			
		||||
        )
 | 
			
		||||
        message = Markup(f'SpaCy NLP Pipeline model "<a href="{spacy_nlp_pipeline_model_url}">{spacy_nlp_pipeline_model.title}</a>" updated')
 | 
			
		||||
        flash(message)
 | 
			
		||||
        return {}, 201, {'Location': url_for('.contributions')}
 | 
			
		||||
    form.prefill(spacy_nlp_pipeline_model)
 | 
			
		||||
        form.populate_obj(spacy_nlp_pipeline_model)
 | 
			
		||||
        if db.session.is_modified(spacy_nlp_pipeline_model):
 | 
			
		||||
            message = Markup(f'SpaCy NLP Pipeline model "<a href="{spacy_nlp_pipeline_model.url}">{spacy_nlp_pipeline_model.title}</a>" updated')
 | 
			
		||||
            flash(message)
 | 
			
		||||
            db.session.commit()
 | 
			
		||||
        return redirect(url_for('.spacy_nlp_pipeline_models'))
 | 
			
		||||
    return render_template(
 | 
			
		||||
        'contributions/spacy_nlp_pipeline_model.html.j2',
 | 
			
		||||
        form=form,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user