mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-11-15 01:05:42 +00:00
Restructure code
This commit is contained in:
parent
fc1389e8b1
commit
10b5254e82
@ -43,8 +43,8 @@ def create_app(config: Config = Config) -> Flask:
|
|||||||
message_queue=app.config['NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI']
|
message_queue=app.config['NOPAQUE_SOCKETIO_MESSAGE_QUEUE_URI']
|
||||||
)
|
)
|
||||||
|
|
||||||
from .events import socketio as socketio_events
|
from app import socketio_event_listeners
|
||||||
from .events import sqlalchemy as sqlalchemy_events
|
from app import sqlalchemy_event_listeners
|
||||||
|
|
||||||
from .admin import bp as admin_blueprint
|
from .admin import bp as admin_blueprint
|
||||||
app.register_blueprint(admin_blueprint, url_prefix='/admin')
|
app.register_blueprint(admin_blueprint, url_prefix='/admin')
|
||||||
|
@ -16,8 +16,8 @@ def create_message(
|
|||||||
f'{subject_prefix} {subject}',
|
f'{subject_prefix} {subject}',
|
||||||
recipients=[recipient]
|
recipients=[recipient]
|
||||||
)
|
)
|
||||||
msg.body: Text = render_template(f'{template}.txt.j2', **kwargs)
|
msg.body = render_template(f'{template}.txt.j2', **kwargs)
|
||||||
msg.html: Text = render_template(f'{template}.html.j2', **kwargs)
|
msg.html = render_template(f'{template}.html.j2', **kwargs)
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
from app import db, login
|
||||||
from app.converters.vrt import normalize_vrt_file
|
from app.converters.vrt import normalize_vrt_file
|
||||||
|
from app.sqlalchemy_custom_types import ContainerColumn, IntEnumColumn
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
from flask import current_app, url_for
|
from flask import current_app, url_for
|
||||||
@ -8,7 +10,6 @@ from itsdangerous import BadSignature, TimedJSONWebSignatureSerializer
|
|||||||
from time import sleep
|
from time import sleep
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash
|
from werkzeug.security import generate_password_hash, check_password_hash
|
||||||
from . import db, login
|
|
||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
@ -22,45 +23,10 @@ TRANSKRIBUS_HTR_MODELS = \
|
|||||||
json.loads(requests.get('https://transkribus.eu/TrpServer/rest/models/text').content)['trpModelMetadata'] # noqa
|
json.loads(requests.get('https://transkribus.eu/TrpServer/rest/models/text').content)['trpModelMetadata'] # noqa
|
||||||
|
|
||||||
|
|
||||||
class IntEnumColumn(db.TypeDecorator):
|
|
||||||
impl = db.Integer
|
|
||||||
|
|
||||||
def __init__(self, enum_type, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.enum_type = enum_type
|
|
||||||
|
|
||||||
def process_bind_param(self, value, dialect):
|
|
||||||
if isinstance(value, self.enum_type) and isinstance(value.value, int):
|
|
||||||
return value.value
|
|
||||||
elif isinstance(value, int):
|
|
||||||
return self.enum_type(value).value
|
|
||||||
else:
|
|
||||||
return TypeError()
|
|
||||||
|
|
||||||
def process_result_value(self, value, dialect):
|
|
||||||
return self.enum_type(value)
|
|
||||||
|
|
||||||
|
|
||||||
class ContainerColumn(db.TypeDecorator):
|
|
||||||
impl = db.String
|
|
||||||
|
|
||||||
def __init__(self, container_type, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
self.container_type = container_type
|
|
||||||
|
|
||||||
def process_bind_param(self, value, dialect):
|
|
||||||
if isinstance(value, self.container_type):
|
|
||||||
return json.dumps(value)
|
|
||||||
elif isinstance(value, str) and isinstance(json.loads(value), self.container_type): # noqa
|
|
||||||
return value
|
|
||||||
else:
|
|
||||||
return TypeError()
|
|
||||||
|
|
||||||
def process_result_value(self, value, dialect):
|
|
||||||
return json.loads(value)
|
|
||||||
|
|
||||||
|
|
||||||
class FileMixin:
|
class FileMixin:
|
||||||
|
'''
|
||||||
|
Mixin for db.Model classes. All file related models should use this.
|
||||||
|
'''
|
||||||
creation_date = db.Column(db.DateTime, default=datetime.utcnow)
|
creation_date = db.Column(db.DateTime, default=datetime.utcnow)
|
||||||
filename = db.Column(db.String(255))
|
filename = db.Column(db.String(255))
|
||||||
last_edited_date = db.Column(db.DateTime, default=datetime.utcnow)
|
last_edited_date = db.Column(db.DateTime, default=datetime.utcnow)
|
||||||
@ -127,7 +93,7 @@ class Role(HashidMixin, db.Model):
|
|||||||
}
|
}
|
||||||
if relationships:
|
if relationships:
|
||||||
dict_role['users'] = {
|
dict_role['users'] = {
|
||||||
x.to_dict(backrefs=False, relationships=True)
|
x.hashid: x.to_dict(backrefs=False, relationships=True)
|
||||||
for x in self.users
|
for x in self.users
|
||||||
}
|
}
|
||||||
return dict_role
|
return dict_role
|
||||||
|
@ -5,9 +5,6 @@ from flask_login import current_user
|
|||||||
from flask_socketio import join_room
|
from flask_socketio import join_room
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Socket.IO event handlers #
|
|
||||||
###############################################################################
|
|
||||||
@socketio.on('users.user.get')
|
@socketio.on('users.user.get')
|
||||||
@socketio_login_required
|
@socketio_login_required
|
||||||
def users_user_get(user_hashid):
|
def users_user_get(user_hashid):
|
43
app/sqlalchemy_custom_types.py
Normal file
43
app/sqlalchemy_custom_types.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
from app import db
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class IntEnumColumn(db.TypeDecorator):
|
||||||
|
impl = db.Integer
|
||||||
|
|
||||||
|
def __init__(self, enum_type, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.enum_type = enum_type
|
||||||
|
|
||||||
|
def process_bind_param(self, value, dialect):
|
||||||
|
if isinstance(value, self.enum_type) and isinstance(value.value, int):
|
||||||
|
return value.value
|
||||||
|
elif isinstance(value, int):
|
||||||
|
return self.enum_type(value).value
|
||||||
|
else:
|
||||||
|
return TypeError()
|
||||||
|
|
||||||
|
def process_result_value(self, value, dialect):
|
||||||
|
return self.enum_type(value)
|
||||||
|
|
||||||
|
|
||||||
|
class ContainerColumn(db.TypeDecorator):
|
||||||
|
impl = db.String
|
||||||
|
|
||||||
|
def __init__(self, container_type, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.container_type = container_type
|
||||||
|
|
||||||
|
def process_bind_param(self, value, dialect):
|
||||||
|
if isinstance(value, self.container_type):
|
||||||
|
return json.dumps(value)
|
||||||
|
elif (
|
||||||
|
isinstance(value, str)
|
||||||
|
and isinstance(json.loads(value), self.container_type)
|
||||||
|
):
|
||||||
|
return value
|
||||||
|
else:
|
||||||
|
return TypeError()
|
||||||
|
|
||||||
|
def process_result_value(self, value, dialect):
|
||||||
|
return json.loads(value)
|
@ -13,9 +13,6 @@ from datetime import datetime
|
|||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# SQLAlchemy event handlers #
|
|
||||||
###############################################################################
|
|
||||||
@db.event.listens_for(Corpus, 'after_delete')
|
@db.event.listens_for(Corpus, 'after_delete')
|
||||||
@db.event.listens_for(CorpusFile, 'after_delete')
|
@db.event.listens_for(CorpusFile, 'after_delete')
|
||||||
@db.event.listens_for(Job, 'after_delete')
|
@db.event.listens_for(Job, 'after_delete')
|
Loading…
Reference in New Issue
Block a user