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