summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--check/app/server/api.py20
-rw-r--r--check/app/server/create.py57
-rw-r--r--check/app/settings/__init__.py1
-rw-r--r--check/app/settings/app_cfg.py26
-rw-r--r--check/app/settings/types.py7
-rw-r--r--check/cli_flask.py20
6 files changed, 131 insertions, 0 deletions
diff --git a/check/app/server/api.py b/check/app/server/api.py
new file mode 100644
index 0000000..620e604
--- /dev/null
+++ b/check/app/server/api.py
@@ -0,0 +1,20 @@
+import os
+import re
+import time
+import numpy as np
+from flask import Blueprint, request, jsonify
+from PIL import Image
+
+# from app.utils.im_utils import pil2np
+
+sanitize_re = re.compile('[\W]+')
+valid_exts = ['.gif', '.jpg', '.jpeg', '.png']
+
+LIMIT = 9
+
+api = Blueprint('api', __name__)
+
+@api.route('/')
+def index():
+ """List the datasets and their fields"""
+ return jsonify({ 'status': 'ok' })
diff --git a/check/app/server/create.py b/check/app/server/create.py
new file mode 100644
index 0000000..11174d2
--- /dev/null
+++ b/check/app/server/create.py
@@ -0,0 +1,57 @@
+import os
+import logging
+import logging.handlers
+
+logger = logging.getLogger("")
+logger.setLevel(logging.DEBUG)
+handler = logging.handlers.RotatingFileHandler("flask.log",
+ maxBytes=3000000, backupCount=2)
+formatter = logging.Formatter(
+ '[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s')
+handler.setFormatter(formatter)
+logger.addHandler(handler)
+logging.getLogger().addHandler(logging.StreamHandler())
+
+logging.debug("starting app")
+
+from flask import Flask, Blueprint, jsonify, send_from_directory, request
+from flask_sqlalchemy import SQLAlchemy
+from app.models.sql_factory import connection_url, load_sql_datasets
+
+from app.settings import app_cfg as cfg
+# from app.server.api import api
+
+db = SQLAlchemy()
+
+def create_app(script_info=None):
+ """
+ functional pattern for creating the flask app
+ """
+ app = Flask(__name__, static_folder='static', static_url_path='')
+ app.config['SQLALCHEMY_DATABASE_URI'] = connection_url
+ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
+ app.config['CELERY_BROKER_URL'] = cfg.CELERY_BROKER_URL
+ app.config['CELERY_RESULT_BACKEND'] = cfg.CELERY_RESULT_BACKEND
+
+ db.init_app(app)
+ datasets = load_sql_datasets(replace=False, base_model=db.Model)
+
+ # app.register_blueprint(api, url_prefix='/api')
+
+ @app.errorhandler(404)
+ def page_not_found(e):
+ path = os.path.join(os.path.dirname(__file__), './static', request.path[1:], 'index.html')
+ if os.path.exists(path):
+ with open(path, "r") as f:
+ return f.read(), 200
+ return "404", 404
+
+ @app.route('/', methods=['GET'])
+ def index():
+ return app.send_static_file('index.html')
+
+ @app.shell_context_processor
+ def shell_context():
+ return { 'app': app, 'db': db }
+
+ return app
diff --git a/check/app/settings/__init__.py b/check/app/settings/__init__.py
new file mode 100644
index 0000000..93f5256
--- /dev/null
+++ b/check/app/settings/__init__.py
@@ -0,0 +1 @@
+__init__.py \ No newline at end of file
diff --git a/check/app/settings/app_cfg.py b/check/app/settings/app_cfg.py
new file mode 100644
index 0000000..c340170
--- /dev/null
+++ b/check/app/settings/app_cfg.py
@@ -0,0 +1,26 @@
+import os
+from os.path import join
+import logging
+import collections
+from dotenv import load_dotenv
+
+from app.settings import types
+from app.utils import click_utils
+from pathlib import Path
+
+import codecs
+codecs.register(lambda name: codecs.lookup('utf8') if name == 'utf8mb4' else None)
+
+# -----------------------------------------------------------------------------
+# S3 storage
+# -----------------------------------------------------------------------------
+S3_ROOT_URL = 's3://check-vframe/v1/'
+S3_METADATA_URL = join(S3_ROOT_URL, 'metadata')
+S3_HTTP_URL = 'https://check-vframe.nyc3.digitaloceanspaces.com/v1/'
+S3_HTTP_METADATA_URL = join(S3_HTTP_URL, 'metadata')
+
+# -----------------------------------------------------------------------------
+# Celery
+# -----------------------------------------------------------------------------
+CELERY_BROKER_URL = 'redis://localhost:6379/0'
+CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
diff --git a/check/app/settings/types.py b/check/app/settings/types.py
new file mode 100644
index 0000000..e3e9b4e
--- /dev/null
+++ b/check/app/settings/types.py
@@ -0,0 +1,7 @@
+from enum import Enum
+
+def find_type(name, enum_type):
+ for enum_opt in enum_type:
+ if name == enum_opt.name.lower():
+ return enum_opt
+ return None
diff --git a/check/cli_flask.py b/check/cli_flask.py
new file mode 100644
index 0000000..e80526c
--- /dev/null
+++ b/check/cli_flask.py
@@ -0,0 +1,20 @@
+# --------------------------------------------------------
+# wrapper for flask CLI API
+# NB: python cli_flask.py run
+# --------------------------------------------------------
+
+import click
+
+from flask.cli import FlaskGroup
+from app.server.create import create_app
+
+# from app.settings import app_cfg as cfg
+# from app.utils import logger_utils
+
+cli = FlaskGroup(create_app=create_app)
+
+# --------------------------------------------------------
+# Entrypoint
+# --------------------------------------------------------
+if __name__ == '__main__':
+ cli()