- Introduction of API-functionality (to be continued). Deduplication of document and url uploads between views and api. - Improvements on document processing - introduction of processor classes to streamline document inputs - Removed pure Youtube functionality, as Youtube retrieval of documents continuously changes. But added upload of srt, mp3, ogg and mp4
73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
from flask import Flask, jsonify
|
|
from flask_jwt_extended import get_jwt_identity
|
|
from common.extensions import db, api, jwt, minio_client
|
|
import os
|
|
import logging.config
|
|
|
|
from common.utils.database import Database
|
|
from config.logging_config import LOGGING
|
|
from .api.document_api import AddDocumentResource
|
|
from .api.auth import TokenResource
|
|
from config.config import get_config
|
|
from common.utils.celery_utils import make_celery, init_celery
|
|
from common.utils.eveai_exceptions import EveAIException
|
|
|
|
|
|
def create_app(config_file=None):
|
|
app = Flask(__name__)
|
|
|
|
environment = os.getenv('FLASK_ENV', 'development')
|
|
|
|
match environment:
|
|
case 'development':
|
|
app.config.from_object(get_config('dev'))
|
|
case 'production':
|
|
app.config.from_object(get_config('prod'))
|
|
case _:
|
|
app.config.from_object(get_config('dev'))
|
|
|
|
app.config['SESSION_KEY_PREFIX'] = 'eveai_api_'
|
|
|
|
app.celery = make_celery(app.name, app.config)
|
|
init_celery(app.celery, app)
|
|
|
|
logging.config.dictConfig(LOGGING)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
logger.info("eveai_api starting up")
|
|
|
|
# Register Necessary Extensions
|
|
register_extensions(app)
|
|
|
|
# Error handler for the API
|
|
@app.errorhandler(EveAIException)
|
|
def handle_eveai_exception(error):
|
|
response = jsonify(error.to_dict())
|
|
response.status_code = error.status_code
|
|
return response
|
|
|
|
@api.before_request
|
|
def before_request():
|
|
# Extract tenant_id from the JWT token
|
|
tenant_id = get_jwt_identity()
|
|
|
|
# Switch to the correct schema
|
|
Database(tenant_id).switch_schema()
|
|
|
|
# Register resources
|
|
register_api_resources()
|
|
|
|
return app
|
|
|
|
|
|
def register_extensions(app):
|
|
db.init_app(app)
|
|
api.init_app(app)
|
|
jwt.init_app(app)
|
|
minio_client.init_app(app)
|
|
|
|
|
|
def register_api_resources():
|
|
api.add_resource(AddDocumentResource, '/api/v1/documents/add_document')
|
|
api.add_resource(TokenResource, '/api/v1/token')
|