mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-10-31 18:42:45 +00:00 
			
		
		
		
	Move ocr job to extra package.
This commit is contained in:
		| @@ -23,13 +23,16 @@ def create_app(config_name): | |||||||
|     db.init_app(app) |     db.init_app(app) | ||||||
|     login_manager.init_app(app) |     login_manager.init_app(app) | ||||||
|     mail.init_app(app) |     mail.init_app(app) | ||||||
|     if not hasattr(app, 'extensions'): |  | ||||||
|         app.extensions = {} |  | ||||||
|  |  | ||||||
|     from .auth import auth as auth_blueprint |     from .auth import auth as auth_blueprint | ||||||
|     app.register_blueprint(auth_blueprint, url_prefix='/auth') |     app.register_blueprint(auth_blueprint, url_prefix='/auth') | ||||||
|  |  | ||||||
|  |     from .services import services as services_blueprint | ||||||
|  |     app.register_blueprint(services_blueprint, url_prefix='/services') | ||||||
|  |  | ||||||
|     from .main import main as main_blueprint |     from .main import main as main_blueprint | ||||||
|     app.register_blueprint(main_blueprint) |     app.register_blueprint(main_blueprint) | ||||||
|  |  | ||||||
|  |     print(app.url_map) | ||||||
|  |  | ||||||
|     return app |     return app | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| from flask_wtf import FlaskForm |  | ||||||
| from wtforms import SubmitField |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class SwarmForm(FlaskForm): |  | ||||||
|     submit = SubmitField('Submit') |  | ||||||
|   | |||||||
| @@ -1,12 +1,9 @@ | |||||||
| from flask import redirect, render_template, url_for | from flask import render_template | ||||||
| from ..models import User | from ..models import User | ||||||
| from ..tables import AdminUserTable, AdminUserItem | from ..tables import AdminUserTable, AdminUserItem | ||||||
| from . import main | from . import main | ||||||
| from ..decorators import admin_required | from ..decorators import admin_required | ||||||
| from flask_login import current_user, login_required | from flask_login import login_required | ||||||
| from .forms import SwarmForm |  | ||||||
| from ..import swarm |  | ||||||
| from threading import Thread |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @main.route('/') | @main.route('/') | ||||||
| @@ -29,32 +26,5 @@ def for_admins_only(): | |||||||
|     users = User.query.order_by(User.username).all() |     users = User.query.order_by(User.username).all() | ||||||
|     items = [AdminUserItem(u.username, u.email, u.role_id, u.confirmed) for u in users] |     items = [AdminUserItem(u.username, u.email, u.role_id, u.confirmed) for u in users] | ||||||
|     table = AdminUserTable(items) |     table = AdminUserTable(items) | ||||||
|  |  | ||||||
|     swarm_form = SwarmForm() |  | ||||||
|     if swarm_form.validate_on_submit(): |  | ||||||
|         ''' |  | ||||||
|         ' TODO: Implement a Job class. For now a dictionary representation is |  | ||||||
|         '       enough. |  | ||||||
|         ''' |  | ||||||
|         job = { |  | ||||||
|             'creator': current_user.id, |  | ||||||
|             'id': '5fd40cb0cadef3ab5676c4968fc3d748', |  | ||||||
|             'requested_cpus': 2, |  | ||||||
|             'requested_memory': 2048, |  | ||||||
|             'service': 'ocr', |  | ||||||
|             'service_args': { |  | ||||||
|                 'lang': 'eng' |  | ||||||
|             }, |  | ||||||
|             'status': 'queued' |  | ||||||
|         } |  | ||||||
|         ''' |  | ||||||
|         ' TODO: Let the scheduler run this job in the background. Using self |  | ||||||
|         '       created threads is just for testing purpose as there is no |  | ||||||
|         '       scheduler available. |  | ||||||
|         ''' |  | ||||||
|         thread = Thread(target=swarm.run, args=(job,)) |  | ||||||
|         thread.start() |  | ||||||
|         return redirect(url_for('main.for_admins_only')) |  | ||||||
|  |  | ||||||
|     return render_template('main/admin.html.j2', title='Administration tools', |     return render_template('main/admin.html.j2', title='Administration tools', | ||||||
|                            swarm_form=swarm_form, table=table.__html__()) |                            table=table.__html__()) | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								app/services/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/services/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | from flask import Blueprint | ||||||
|  |  | ||||||
|  | services = Blueprint('services', __name__) | ||||||
|  |  | ||||||
|  | from . import views | ||||||
							
								
								
									
										6
									
								
								app/services/forms.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/services/forms.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | from flask_wtf import FlaskForm | ||||||
|  | from wtforms import SubmitField | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class OCRJobForm(FlaskForm): | ||||||
|  |     submit = SubmitField('Submit') | ||||||
							
								
								
									
										43
									
								
								app/services/views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/services/views.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | from flask import redirect, render_template, url_for | ||||||
|  | from . import services | ||||||
|  | from flask_login import current_user, login_required | ||||||
|  | from .forms import OCRJobForm | ||||||
|  | from ..import swarm | ||||||
|  | from threading import Thread | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @services.route('/ocr', methods=['GET', 'POST']) | ||||||
|  | @login_required | ||||||
|  | def ocr(): | ||||||
|  |     ocr_job_form = OCRJobForm() | ||||||
|  |     if ocr_job_form.validate_on_submit(): | ||||||
|  |         ''' | ||||||
|  |         ' TODO: Implement a Job class. For now a dictionary representation is | ||||||
|  |         '       enough. | ||||||
|  |         ''' | ||||||
|  |         job = {'worker': None, | ||||||
|  |                'creator': current_user.id, | ||||||
|  |                'id': '5fd40cb0cadef3ab5676c4968fc3d748', | ||||||
|  |                'requested_cpus': 2, | ||||||
|  |                'requested_memory': 2048, | ||||||
|  |                'service': 'ocr', | ||||||
|  |                'service_args': {'lang': 'eng', | ||||||
|  |                                 'version': 'latest' | ||||||
|  |                                 }, | ||||||
|  |                'status': 'queued' | ||||||
|  |                } | ||||||
|  |         ''' | ||||||
|  |         ' TODO: Let the scheduler run this job in the background. | ||||||
|  |         ' | ||||||
|  |         ' NOTE: Using self created threads is just for testing purpose as there | ||||||
|  |         '       is no scheduler available. | ||||||
|  |         ''' | ||||||
|  |         thread = Thread(target=swarm.run, args=(job,)) | ||||||
|  |         thread.start() | ||||||
|  |         return redirect(url_for('services.ocr')) | ||||||
|  |  | ||||||
|  |     return render_template( | ||||||
|  |         'services/ocr.html.j2', | ||||||
|  |         title='Optical Character Recognition', | ||||||
|  |         ocr_job_form=ocr_job_form | ||||||
|  |     ) | ||||||
| @@ -9,16 +9,4 @@ | |||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </div> | </div> | ||||||
|  |  | ||||||
| <div class="col s12"> |  | ||||||
|   <div class="card large"> |  | ||||||
|     <div class="card-content"> |  | ||||||
|       <span class="card-title">Swarm</span> |  | ||||||
|       <form method="POST"> |  | ||||||
|         {{ swarm_form.hidden_tag() }} |  | ||||||
|         {{ swarm_form.submit(class='btn') }} |  | ||||||
|       </form> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								app/templates/services/ocr.html.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/templates/services/ocr.html.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | {% extends "base.html.j2" %} | ||||||
|  |  | ||||||
|  | {% block page_content %} | ||||||
|  | <div class="col s12"> | ||||||
|  |   <div class="card large"> | ||||||
|  |     <div class="card-content"> | ||||||
|  |       <span class="card-title">OCR</span> | ||||||
|  |       <form method="POST"> | ||||||
|  |         {{ ocr_job_form.hidden_tag() }} | ||||||
|  |         {{ ocr_job_form.submit(class='btn') }} | ||||||
|  |       </form> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
|  | {% endblock %} | ||||||
		Reference in New Issue
	
	Block a user