[TIC-CORE] Support analysis of unified repositories
[archive/20170607/tools/tic-core.git] / tic / server / tic_server.py
index 29e8e15..106b26a 100644 (file)
@@ -5,11 +5,13 @@ from flask.globals import request
 from flask.helpers import url_for
 import json
 import os
+import logging
 from tic import command
 from tic.utils import error
-
+#from flask_cors import CORS
 
 app = Flask(__name__)
+#CORS(app)
 
 @app.route('/')
 def index():
@@ -18,39 +20,56 @@ def index():
         <h1> TIC-Core web server is working<h1>
     '''
 
-@app.route('/analysis', methods=['GET', 'POST'])
-def anlayze():
+@app.route('/analysis', methods=['POST'])
+def analysis():
     try:
-        repo_list = []
-        recipe_list = []
-        if request.method == 'GET':
-            repo_list = request.args.getlist('repos')
-            recipe_list = request.args.getlist('recipes')
-        else:
-            repo_info = json.loads(request.data)
-            if 'repos' in repo_info:
-                repo_list = repo_info['repos']
-            if 'recipes' in repo_info:
-                recipe_list = repo_info['recipes']
-        view_data = command.analyze(repo_list, recipe_list)
+        logger = logging.getLogger(__name__)
+        logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
+        repo_info = json.loads(request.data)
+        view_data = command.analyze(repo_info.get('repos'), repo_info.get('recipes'))
         resp = makeresponse(view_data, None)
     except error.TICError as err:
+        logger.error(err)
         resp = makeresponse(str(err), err)
     except ValueError as ve:
+        logger.error(ve)
+        resp = makeresponse(str(ve), ve)
+#     except Exception as ex:
+#         logger.error(ex)
+#         resp = makeresponse(str(ex), ex)
+    
+    return resp
+
+@app.route('/exports', methods=['POST'])
+def exports():
+    try:
+        logger = logging.getLogger(__name__)
+        logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
+        exportInfo = json.loads(request.data)
+        export_type = request.args.get('format')
+        output = command.exports(export_type, exportInfo.get('recipe'), exportInfo.get('packages'), exportInfo.get('outdir'), exportInfo.get('filename'))
+        resp = makeresponse(output, None)
+    except error.TICError as err:
+        logger.error(err)
+        resp = makeresponse(str(err), err)
+    except ValueError as ve:
+        logger.error(ve)
         resp = makeresponse(str(ve), ve)
     except Exception as ex:
+        logger.error(ex)
         resp = makeresponse(str(ex), ex)
-    
     return resp
 
-def start(port_num=59001):
+
+def start(port_num=8082):
     # cryptographic random generator
     app.secret_key = os.urandom(24) 
     
     with app.test_request_context():
         print(url_for('index'))
-        print(url_for('anlayze'))
-    app.run(host='0.0.0.0', port=port_num)
+        print(url_for('analysis'))
+        print(url_for('exports'))
+    app.run(host='0.0.0.0', threaded=True, port=port_num)
 
 
 def makeresponse(data, err):
@@ -66,7 +85,7 @@ def makeresponse(data, err):
     
     resp = Response(status=status, 
                     mimetype='application/json',
-                    response= res_body)
+                    response=res_body)
     return resp
 
 
@@ -75,4 +94,4 @@ def ResultInfo(result='false', data=None, message=None):
     return ResultInfoType(result, data, message)
 
 if __name__ == '__main__':
-    start()
+    start(8082)