From de506e31fe102a253c8f36ec2857b28a777e4837 Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Thu, 30 Apr 2020 13:01:26 +0000
Subject: [PATCH] added routes for OTRS data and export

---
 inventory_provider/__init__.py        |  7 ++-
 inventory_provider/routes/ims_otrs.py | 68 +++++++++++++++++++++++++++
 2 files changed, 73 insertions(+), 2 deletions(-)
 create mode 100644 inventory_provider/routes/ims_otrs.py

diff --git a/inventory_provider/__init__.py b/inventory_provider/__init__.py
index 60d148c8..3da1b743 100644
--- a/inventory_provider/__init__.py
+++ b/inventory_provider/__init__.py
@@ -52,8 +52,11 @@ def create_app():
 
     # OTRS routes
 
-    from inventory_provider.routes import otrs_jobs
-    app.register_blueprint(otrs_jobs.routes, url_prefix='/otrs')
+    from inventory_provider.routes import ims_otrs
+    app.register_blueprint(ims_otrs.routes, url_prefix='/otrs')
+
+    # from inventory_provider.routes import otrs_jobs
+    # app.register_blueprint(otrs_jobs.routes, url_prefix='/otrs')
 
     # end of OTRS routes
 
diff --git a/inventory_provider/routes/ims_otrs.py b/inventory_provider/routes/ims_otrs.py
new file mode 100644
index 00000000..7c7c21f5
--- /dev/null
+++ b/inventory_provider/routes/ims_otrs.py
@@ -0,0 +1,68 @@
+import csv
+import html
+from io import StringIO
+
+import requests
+from flask import Blueprint, request, Response, current_app
+
+from inventory_provider.db import ims_data
+from inventory_provider.db.ims import IMS
+from inventory_provider.routes import common
+from inventory_provider.tasks.ims_worker import OTRSFiles, export_data_for_otrs
+
+routes = Blueprint("otrs", __name__)
+
+
+@routes.after_request
+def after_request(resp):
+    return common.after_request(resp)
+
+
+def get_otrs_data(fn):
+    ims_config = current_app.config['INVENTORY_PROVIDER_CONFIG']["ims"]
+    ds = IMS(
+        ims_config['api'],
+        ims_config['username'],
+        ims_config['password'])
+
+    with StringIO() as sio:
+        writer = csv.writer(sio, delimiter='^')
+        writer.writerows(fn(ds))
+        data = sio.getvalue()
+    return Response(
+        response=data,
+        status=requests.codes.ok,
+        mimetype="text/html")
+
+
+@routes.route('customer-companies')
+def get_customer_companies_data():
+    return get_otrs_data(ims_data.otrs_get_customer_company_rows)
+
+
+@routes.route('customer-users')
+def get_customer_users_data():
+    return get_otrs_data(ims_data.otrs_get_customer_users_rows)
+
+
+@routes.route('export')
+def send_exports():
+    files_value = request.args.get('files', None)
+    if files_value:
+        try:
+            files_value = int(files_value)
+        except ValueError:
+            return Response(
+                response=html.escape('<files> should be an Integer'),
+                status=requests.codes.bad_request,
+                mimetype="text/html")
+        if files_value < 0 or files_value > sum(OTRSFiles):
+            return Response(
+                response=html.escape(f'Bad value for <files> {files_value}'),
+                status=requests.codes.bad_request,
+                mimetype="text/html")
+    task = export_data_for_otrs.delay(files_value)
+    return Response(
+        response=task.id,
+        status=requests.codes.ok,
+        mimetype="text/html")
\ No newline at end of file
-- 
GitLab