From df5ae19e687fb974e83d085064bef249ba5dd952 Mon Sep 17 00:00:00 2001
From: Inga Kirschnick <inga.kirschnick@uni-bielefeld.de>
Date: Mon, 14 Nov 2022 15:02:41 +0100
Subject: [PATCH] Addition pipeline_name in Contribution Package

---
 app/contributions/forms.py                       | 16 ++++++++++++++++
 app/contributions/routes.py                      | 10 +++++++---
 .../contribute_spacy_nlp_models.html.j2          |  7 +++++--
 .../spacy_nlp_pipeline_model.html.j2             |  3 +++
 4 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/app/contributions/forms.py b/app/contributions/forms.py
index c0611e17..8eb44842 100644
--- a/app/contributions/forms.py
+++ b/app/contributions/forms.py
@@ -58,6 +58,18 @@ class EditForm(CreateContributionBaseForm):
         self.version.data = model_file.version
         self.shared.data = model_file.shared
 
+class EditTesseractOCRModelForm(EditForm):
+    pass
+
+class EditSpaCyNLPPipelineModelForm(EditForm):
+    pipeline_name = StringField(
+        'Pipeline name',
+        validators=[InputRequired(), Length(max=64)]
+    )
+    def prefill(self, model_file):
+        super().prefill(model_file)
+        self.pipeline_name.data = model_file.pipeline_name
+
 class TesseractOCRModelContributionForm(CreateContributionBaseForm):
     tesseract_model_file = FileField(
         'File',
@@ -88,6 +100,10 @@ class SpacyNLPModelContributionForm(CreateContributionBaseForm):
     compatible_service_versions = SelectMultipleField(
         'Compatible service versions'
     )
+    pipeline_name = StringField(
+        'Pipeline name',
+        validators=[InputRequired(), Length(max=64)]
+    )
     def validate_spacy_model_file(self, field):
         current_app.logger.warning(field.data.filename)
         if not field.data.filename.lower().endswith('.tar.gz'):
diff --git a/app/contributions/routes.py b/app/contributions/routes.py
index c20774d7..33355b2d 100644
--- a/app/contributions/routes.py
+++ b/app/contributions/routes.py
@@ -5,7 +5,7 @@ from app import db
 from app.decorators import admin_required, permission_required 
 from app.models import Permission, SpaCyNLPPipelineModel, TesseractOCRPipelineModel
 from . import bp
-from .forms import TesseractOCRModelContributionForm, EditForm, SpacyNLPModelContributionForm
+from .forms import TesseractOCRModelContributionForm, EditSpaCyNLPPipelineModelForm, EditTesseractOCRModelForm, SpacyNLPModelContributionForm
 
 
 @bp.before_request
@@ -39,7 +39,7 @@ 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 = EditForm(prefix='tesseract-ocr-model-edit-form')
+    form = EditTesseractOCRModelForm(prefix='tesseract-ocr-model-edit-form')
     if form.validate_on_submit():
         if tesseract_ocr_pipeline_model.title != form.title.data:
             tesseract_ocr_pipeline_model.title = form.title.data
@@ -134,12 +134,14 @@ 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 = EditForm(prefix='spacy-nlp-model-edit-form')
+    form = EditSpaCyNLPPipelineModelForm(prefix='spacy-nlp-model-edit-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:
@@ -156,6 +158,7 @@ def spacy_nlp_pipeline_model(spacy_nlp_pipeline_model_id):
         message = Markup(f'Model "<a href="contribute/{spacy_nlp_pipeline_model.hashid}">{spacy_nlp_pipeline_model.title}</a>" updated')
         flash(message, category='corpus')
         return {}, 201, {'Location': url_for('contributions.contributions')}
+    print(spacy_nlp_pipeline_model.to_json())
     form.prefill(spacy_nlp_pipeline_model)
     return render_template(
         'contributions/spacy_nlp_pipeline_model.html.j2',
@@ -195,6 +198,7 @@ def add_spacy_nlp_pipeline_model():
                 form.spacy_model_file.data,
                 compatible_service_versions=form.compatible_service_versions.data,
                 description=form.description.data,
+                pipeline_name=form.pipeline_name.data,
                 publisher=form.publisher.data,
                 publisher_url=form.publisher_url.data,
                 publishing_url=form.publishing_url.data,
diff --git a/app/templates/contributions/contribute_spacy_nlp_models.html.j2 b/app/templates/contributions/contribute_spacy_nlp_models.html.j2
index b5ab9b0d..d1e3cd11 100644
--- a/app/templates/contributions/contribute_spacy_nlp_models.html.j2
+++ b/app/templates/contributions/contribute_spacy_nlp_models.html.j2
@@ -2,7 +2,7 @@
 {% import "materialize/wtf.html.j2" as wtf %}
 {% from "contributions/_breadcrumbs.html.j2" import breadcrumbs with context %}
 
-{% block main_attribs %} class="service-scheme" data-service="tesseract-ocr-pipeline"{% endblock main_attribs %}
+{% block main_attribs %} class="service-scheme" data-service="spacy-nlp-pipeline"{% endblock main_attribs %}
 
 {% block page_content %}
 <div class="container">
@@ -28,7 +28,7 @@
             <div class="col s12">
               <div class="card-panel z-depth-0">
                 <span class="card-title"><i class="left material-icons">layers</i>spaCy NLP Models</span>
-                <p>You can add more Tesseract OCR models using the form below. They will automatically appear in the list of usable models.</p>
+                <p>You can add more spaCy NLP models using the form below. They will automatically appear in the list of usable models.</p>
                 <p><a href="">Edit already uploaded models</a></p>
                 <p><a class="modal-trigger" href="#models-modal">Information about the already existing models.</a></p>
               </div>
@@ -54,6 +54,9 @@
               <div class="col s12">
                 {{ wtf.render_field(form.description, material_icon='description') }}
               </div>
+              <div class="col s12">
+                {{ wtf.render_field(form.pipeline_name, material_icon='emoji_objects') }}
+              </div>
               <div class="col s12 l6">
                 {{ wtf.render_field(form.publisher,  material_icon='account_balance') }}
               </div>
diff --git a/app/templates/contributions/spacy_nlp_pipeline_model.html.j2 b/app/templates/contributions/spacy_nlp_pipeline_model.html.j2
index 82fd6862..37248448 100644
--- a/app/templates/contributions/spacy_nlp_pipeline_model.html.j2
+++ b/app/templates/contributions/spacy_nlp_pipeline_model.html.j2
@@ -23,6 +23,9 @@
               <div class="col s12">
                 {{ wtf.render_field(form.description, material_icon='description') }}
               </div>
+              <div class="col s12">
+                {{ wtf.render_field(form.pipeline_name, material_icon='emoji_objects') }}
+              </div>
               <div class="col s12 l6">
                 {{ wtf.render_field(form.publisher, material_icon='account_balance') }}
               </div>
-- 
GitLab