from flask import current_app from flask_migrate import upgrade from . import db from .models import Corpus, Job, Role, User, TesseractOCRModel import click import os def _make_default_dirs(): base_dir = current_app.config['NOPAQUE_DATA_DIR'] default_directories = [ os.path.join(base_dir, 'tmp'), os.path.join(base_dir, 'users') ] for directory in default_directories: if os.path.exists(directory): if not os.path.isdir(directory): raise NotADirectoryError(f'{directory} is not a directory') else: os.mkdir(directory) def register(app): @app.cli.command() def deploy(): ''' Run deployment tasks. ''' # Make default directories _make_default_dirs() # migrate database to latest revision upgrade() # Insert/Update default database values current_app.logger.info('Insert/Update default roles') Role.insert_defaults() current_app.logger.info('Insert/Update default users') User.insert_defaults() current_app.logger.info('Insert/Update default tesseract ocr models') TesseractOCRModel.insert_defaults() @app.cli.group() def daemon(): ''' Daemon commands. ''' pass @daemon.command('run') def run_daemon(): ''' Run daemon ''' corpus: Corpus for corpus in Corpus.query.filter(Corpus.num_analysis_sessions > 0): corpus.num_analysis_sessions = 0 db.session.commit() from app.daemon import Daemon daemon: Daemon = Daemon() daemon.run() @app.cli.group() def converter(): ''' Converter commands. ''' pass @converter.command() @click.argument('json_db') @click.argument('data_dir') def sandpaper(json_db, data_dir): ''' Sandpaper converter ''' from app.converters.sandpaper import convert convert(json_db, data_dir) @app.cli.group() def test(): ''' Test commands. ''' pass @test.command('run') def run_test(): ''' Run unit tests. ''' from unittest import TestLoader, TextTestRunner from unittest.suite import TestSuite tests: TestSuite = TestLoader().discover('tests') TextTestRunner(verbosity=2).run(tests)