summaryrefslogtreecommitdiff
path: root/megapixels/app/server
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2018-12-14 18:10:27 +0100
committerJules Laplace <julescarbon@gmail.com>2018-12-14 18:10:27 +0100
commit38746f284b17400d4e2555509ea60df5912b824a (patch)
tree6dea93f4ba348d12a58a761424ec5547697fcf1f /megapixels/app/server
parent36b6082dfa768cbf35d40dc2c82706dfae0b687b (diff)
all the sql stuff communicating nicely
Diffstat (limited to 'megapixels/app/server')
-rw-r--r--megapixels/app/server/api.py72
-rw-r--r--megapixels/app/server/api/image.py40
-rw-r--r--megapixels/app/server/create.py23
3 files changed, 88 insertions, 47 deletions
diff --git a/megapixels/app/server/api.py b/megapixels/app/server/api.py
new file mode 100644
index 00000000..e7db11f1
--- /dev/null
+++ b/megapixels/app/server/api.py
@@ -0,0 +1,72 @@
+from flask import Blueprint, jsonify
+
+from app.models.sql_factory import list_datasets, get_dataset, get_table
+
+# from jinja2 import TemplateNotFound
+
+# import os
+# import sys
+# import json
+# import time
+# import argparse
+# import cv2 as cv
+# import numpy as np
+# from datetime import datetime
+# from flask import Flask, request, render_template, jsonify
+# from PIL import Image # todo: try to remove PIL dependency
+# import re
+
+# sanitize_re = re.compile('[\W]+')
+# valid_exts = ['.gif', '.jpg', '.jpeg', '.png']
+
+# from dotenv import load_dotenv
+# load_dotenv()
+
+# from feature_extractor import FeatureExtractor
+
+# DEFAULT_LIMIT = 50
+
+api = Blueprint('api', __name__)
+
+@api.route('/')
+def index():
+ return jsonify({ 'datasets': list_datasets() })
+
+@api.route('/dataset/<dataset>/test', methods=['POST'])
+def test(dataset='test'):
+ dataset = get_dataset(dataset)
+ print('hiiiiii')
+ return jsonify({ 'test': 'OK', 'dataset': dataset })
+
+# @router.route('/<dataset>/face', methods=['POST'])
+# def upload(name):
+# file = request.files['query_img']
+# fn = file.filename
+# if fn.endswith('blob'):
+# fn = 'filename.jpg'
+
+# basename, ext = os.path.splitext(fn)
+# print("got {}, type {}".format(basename, ext))
+# if ext.lower() not in valid_exts:
+# return jsonify({ 'error': 'not an image' })
+
+# uploaded_fn = datetime.now().isoformat() + "_" + basename
+# uploaded_fn = sanitize_re.sub('', uploaded_fn)
+# uploaded_img_path = "static/uploaded/" + uploaded_fn + ext
+# uploaded_img_path = uploaded_img_path.lower()
+# print('query: {}'.format(uploaded_img_path))
+
+# img = Image.open(file.stream).convert('RGB')
+# # img.save(uploaded_img_path)
+# # vec = db.load_feature_vector_from_file(uploaded_img_path)
+# vec = fe.extract(img)
+# # print(vec.shape)
+
+# results = db.search(vec, limit=limit)
+# query = {
+# 'timing': time.time() - start,
+# }
+# print(results)
+# return jsonify({
+# 'results': results,
+# })
diff --git a/megapixels/app/server/api/image.py b/megapixels/app/server/api/image.py
deleted file mode 100644
index f2f4a4f9..00000000
--- a/megapixels/app/server/api/image.py
+++ /dev/null
@@ -1,40 +0,0 @@
-from flask import Blueprint, render_template, abort
-# from jinja2 import TemplateNotFound
-
-router = Blueprint('image', __name__)
-
-@router.route('/<dataset>/test', methods=['POST'])
-def test(name):
- # dataset =
-@router.route('/<dataset>/face', methods=['POST'])
-def upload(name):
- file = request.files['query_img']
- fn = file.filename
- if fn.endswith('blob'):
- fn = 'filename.jpg'
-
- basename, ext = os.path.splitext(fn)
- print("got {}, type {}".format(basename, ext))
- if ext.lower() not in valid_exts:
- return jsonify({ 'error': 'not an image' })
-
- uploaded_fn = datetime.now().isoformat() + "_" + basename
- uploaded_fn = sanitize_re.sub('', uploaded_fn)
- uploaded_img_path = "static/uploaded/" + uploaded_fn + ext
- uploaded_img_path = uploaded_img_path.lower()
- print('query: {}'.format(uploaded_img_path))
-
- img = Image.open(file.stream).convert('RGB')
- # img.save(uploaded_img_path)
- # vec = db.load_feature_vector_from_file(uploaded_img_path)
- vec = fe.extract(img)
- # print(vec.shape)
-
- results = db.search(vec, limit=limit)
- query = {
- 'timing': time.time() - start,
- }
- print(results)
- return jsonify({
- 'results': results,
- })
diff --git a/megapixels/app/server/create.py b/megapixels/app/server/create.py
index 1119ee8f..9efed669 100644
--- a/megapixels/app/server/create.py
+++ b/megapixels/app/server/create.py
@@ -1,10 +1,8 @@
-from flask import Flask, Blueprint
+from flask import Flask, Blueprint, jsonify
from flask_sqlalchemy import SQLAlchemy
-from app.models.sql_factory import connection_url
+from app.models.sql_factory import connection_url, load_sql_datasets
-from app.server.api import router as api_router
-
-# from app.server.views.assets import assets
+from app.server.api import api
db = SQLAlchemy()
@@ -14,8 +12,10 @@ def create_app(script_info=None):
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
- app.register_blueprint(api)
-
+ datasets = load_sql_datasets(replace=False, base_model=db.Model)
+
+ app.register_blueprint(api, url_prefix='/api')
+
@app.route('/', methods=['GET'])
def index():
return app.send_static_file('index.html')
@@ -24,4 +24,13 @@ def create_app(script_info=None):
def shell_context():
return { 'app': app, 'db': db }
+ @app.route("/site-map")
+ def site_map():
+ links = []
+ for rule in app.url_map.iter_rules():
+ # url = url_for(rule.endpoint, **(rule.defaults or {}))
+ # print(url)
+ links.append((rule.endpoint))
+ return(jsonify(links))
+
return app