From bdf930c0c8c73c2cb4118a7051277dc90ce253f9 Mon Sep 17 00:00:00 2001 From: Reena-cell Date: Tue, 1 Nov 2022 13:13:14 +0100 Subject: [PATCH] API collection list and create page --- apimanager/apicollectionlist/__init__.py | 0 apimanager/apicollectionlist/apps.py | 5 ++ apimanager/apicollectionlist/forms.py | 0 .../css/apicollectionlist.css | 18 +++++ .../apicollectionlist/js/apicollectionlist.js | 5 ++ .../apicollectionlist/apicollectionlist.html | 43 +++++++++++ apimanager/apicollectionlist/urls.py | 16 ++++ apimanager/apicollectionlist/views.py | 74 +++++++++++++++++++ .../templates/apicollections/index.html | 2 +- apimanager/apicollections/views.py | 12 +-- apimanager/apimanager/settings.py | 3 +- apimanager/apimanager/urls.py | 1 + apimanager/base/templates/base.html | 3 +- 13 files changed, 171 insertions(+), 11 deletions(-) create mode 100644 apimanager/apicollectionlist/__init__.py create mode 100644 apimanager/apicollectionlist/apps.py create mode 100644 apimanager/apicollectionlist/forms.py create mode 100644 apimanager/apicollectionlist/static/apicollectionlist/css/apicollectionlist.css create mode 100644 apimanager/apicollectionlist/static/apicollectionlist/js/apicollectionlist.js create mode 100644 apimanager/apicollectionlist/templates/apicollectionlist/apicollectionlist.html create mode 100644 apimanager/apicollectionlist/urls.py create mode 100644 apimanager/apicollectionlist/views.py diff --git a/apimanager/apicollectionlist/__init__.py b/apimanager/apicollectionlist/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/apimanager/apicollectionlist/apps.py b/apimanager/apicollectionlist/apps.py new file mode 100644 index 0000000..3ebc4d0 --- /dev/null +++ b/apimanager/apicollectionlist/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CustomersConfig(AppConfig): + name = 'customers_list' diff --git a/apimanager/apicollectionlist/forms.py b/apimanager/apicollectionlist/forms.py new file mode 100644 index 0000000..e69de29 diff --git a/apimanager/apicollectionlist/static/apicollectionlist/css/apicollectionlist.css b/apimanager/apicollectionlist/static/apicollectionlist/css/apicollectionlist.css new file mode 100644 index 0000000..38c1c62 --- /dev/null +++ b/apimanager/apicollectionlist/static/apicollectionlist/css/apicollectionlist.css @@ -0,0 +1,18 @@ +#apicollectionlist div { + margin: 5px 0; +} + +/* The actual popup (appears on top) */ +.popuptext { + width: 250px; + background-color: #555; + color: #fff; + text-align: left; + border-radius: 6px; + padding: 8px 0; + z-index: 1; + /*bottom: 125%;*/ + top:100% + left: 50%; + margin-left: -80px; +} diff --git a/apimanager/apicollectionlist/static/apicollectionlist/js/apicollectionlist.js b/apimanager/apicollectionlist/static/apicollectionlist/js/apicollectionlist.js new file mode 100644 index 0000000..338fe9e --- /dev/null +++ b/apimanager/apicollectionlist/static/apicollectionlist/js/apicollectionlist.js @@ -0,0 +1,5 @@ +$(document).ready(function($) { + $('#info').click(function() { + alert("Hello World") + }); +}); diff --git a/apimanager/apicollectionlist/templates/apicollectionlist/apicollectionlist.html b/apimanager/apicollectionlist/templates/apicollectionlist/apicollectionlist.html new file mode 100644 index 0000000..d029878 --- /dev/null +++ b/apimanager/apicollectionlist/templates/apicollectionlist/apicollectionlist.html @@ -0,0 +1,43 @@ +{% extends 'base.html' %} {% load static %} {% load i18n %} +{% block page_title %} {{ block.super }} / {% trans "Customer List" %}{% endblock page_title %} {% block content %} +
+

{% trans "My API Collection List" %}

+
+ +
+
+ + + + + + + + + {% for apicollection in apicollections_list %} + + {% url 'apicollection_update' apicollection.api_collection_id apicollection.user_id as url_apicollection_update %} + + + + + + + + {% endfor %} + +
{% trans "API Collection Id" %}{% trans "User Id" %}{% trans "API Collection Name" %}{% trans "More info" %}
{{ apicollection.api_collection_id }}{{ apicollection.user_id }}{{ apicollection.api_collection_name }} +
+
    +
  • {% trans "Other Info" %}: +
      +
    • {{apicollection.is_sharable}}
    • +
    +
  • +
+
+
{% trans "View" %}
+
+
+{% endblock %} {% block extrajs %} {% endblock extrajs %} {% block extracss %} + {% endblock extracss %} \ No newline at end of file diff --git a/apimanager/apicollectionlist/urls.py b/apimanager/apicollectionlist/urls.py new file mode 100644 index 0000000..2b0e83c --- /dev/null +++ b/apimanager/apicollectionlist/urls.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +URLs for Api Collection list app +""" + +from django.conf.urls import url +from .views import ApiCollectionListView, ExportCsvView + +urlpatterns = [ + url(r'^$', + ApiCollectionListView.as_view(), + name='apicollection-list'), + url(r'^export_csv$', + ExportCsvView.as_view(), + name='export-csv-apicollection') +] diff --git a/apimanager/apicollectionlist/views.py b/apimanager/apicollectionlist/views.py new file mode 100644 index 0000000..2f0182a --- /dev/null +++ b/apimanager/apicollectionlist/views.py @@ -0,0 +1,74 @@ +from django.shortcuts import render + +# Create your views here. +# -*- coding: utf-8 -*- +""" +Views of Api Collection list app +""" +import datetime +from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin +import json +from django.urls import reverse_lazy +from django.http import HttpResponse +from django.views.generic import FormView,TemplateView, View +from apicollections.views import IndexView +from obp.api import API, APIError +import csv + + + +class ApiCollectionListView(IndexView, LoginRequiredMixin, FormView ): + template_name = "apicollectionlist/apicollectionlist.html" + success_url = '/apicollections/list' + + def get_apicollections(self, context): + api = API(self.request.session.get('obp')) + try: + apicollections_list = [] + urlpath = '/my/api-collections' + result = api.get(urlpath) + if 'api_collections' in result: + apicollections_list.extend(result['api_collections']) + except APIError as err: + messages.error(self.request, err) + return [] + except Exception as inst: + messages.error(self.request, "Unknown Error {}".format(type(inst).__name__)) + return [] + + return apicollections_list + + def get_context_data(self, **kwargs): + context = super(IndexView, self).get_context_data(**kwargs) + apicollections_list = self.get_apicollections(context) + context.update({ + 'apicollections_list': apicollections_list, + }) + return context + +class ExportCsvView(LoginRequiredMixin, View): + """View to export the user to csv""" + + def get(self, request, *args, **kwargs): + api = API(self.request.session.get('obp')) + try: + apicollections_list = [] + urlpath = '/my/api-collections' + result = api.get(urlpath) + if 'api_collections' in result: + apicollections_list.extend(result['api_collections']) + except APIError as err: + messages.error(self.request, err) + except Exception as inst: + messages.error(self.request, "Unknown Error {}".format(type(inst).__name__)) + response = HttpResponse(content_type = 'text/csv') + response['Content-Disposition'] = 'attachment;filename= ApiCollections'+ str(datetime.datetime.now())+'.csv' + writer = csv.writer(response) + writer.writerow(["api_collection_id","user_id","api_collection_name","is_sharable","description"]) + for user in apicollections_list: + writer.writerow([user['api_collection_id'],user['user_id'], user['api_collection_name'], user["is_sharable"], + user["description"]]) + return response + + diff --git a/apimanager/apicollections/templates/apicollections/index.html b/apimanager/apicollections/templates/apicollections/index.html index 05d0a46..3555a48 100644 --- a/apimanager/apicollections/templates/apicollections/index.html +++ b/apimanager/apicollections/templates/apicollections/index.html @@ -3,7 +3,7 @@ {% block page_title %}{{ block.super }} / API Collections{% endblock page_title %} {% block content %} -

{% trans "API Collections" %}

+

{% trans "My API Collections" %}


diff --git a/apimanager/apicollections/views.py b/apimanager/apicollections/views.py index 665a31c..4db4df6 100644 --- a/apimanager/apicollections/views.py +++ b/apimanager/apicollections/views.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -Views of config app +Views of API Collection app """ import json @@ -16,7 +16,7 @@ from django.views.decorators.csrf import csrf_exempt class IndexView(LoginRequiredMixin, FormView): - """Index view for config""" + """Index view for API Collection""" template_name = "apicollections/index.html" form_class = ApiCollectionsForm success_url = reverse_lazy('apicollections-index') @@ -97,9 +97,7 @@ class DetailView(LoginRequiredMixin, FormView): else: api_collection_endpoints=response['api_collection_endpoints'] except APIError as err: - error_once_only(self.request, Exception("OBP-API server is not running or do not response properly. " - "Please check OBP-API server. " - "Details: " + str(err))) + messages.error(self.request, result['message']) except BaseException as err: error_once_only(self.request, (Exception("Unknown Error. Details:" + str(err)))) else: @@ -115,8 +113,7 @@ class DeleteCollectionEndpointView(LoginRequiredMixin, FormView): """Deletes api collection endpoint from API""" api = API(self.request.session.get('obp')) try: - urlpath = '/my/api-collections-ids/{}/api-collection-endpoints/{}'\ - .format(kwargs['api_collection_id'],kwargs['operation_id']) + urlpath = '/my/api-collections-ids/{}/api-collection-endpoints/{}'.format(kwargs['api_collection_id'],kwargs['operation_id']) result = api.delete(urlpath) if result is not None and 'code' in result and result['code']>=400: messages.error(request, result['message']) @@ -127,7 +124,6 @@ class DeleteCollectionEndpointView(LoginRequiredMixin, FormView): messages.error(request, err) except: messages.error(self.request, 'Unknown Error') - redirect_url = reverse('my-api-collection-detail',kwargs={"api_collection_id":kwargs['api_collection_id']}) return HttpResponseRedirect(redirect_url) diff --git a/apimanager/apimanager/settings.py b/apimanager/apimanager/settings.py index d9f1922..682674e 100644 --- a/apimanager/apimanager/settings.py +++ b/apimanager/apimanager/settings.py @@ -68,7 +68,8 @@ INSTALLED_APPS = [ 'methodrouting', 'connectormethod', 'dynamicendpoints', - 'apicollections' + 'apicollections', + 'apicollectionlist' ] MIDDLEWARE = [ diff --git a/apimanager/apimanager/urls.py b/apimanager/apimanager/urls.py index 8e84678..891248e 100644 --- a/apimanager/apimanager/urls.py +++ b/apimanager/apimanager/urls.py @@ -53,6 +53,7 @@ urlpatterns += i18n_patterns( url(r'^connectormethod/', include('connectormethod.urls')), url(r'^dynamicendpoints/', include('dynamicendpoints.urls')), url(r'^apicollections/', include('apicollections.urls')), + url(r'^apicollections/list', include('apicollectionlist.urls')), ) #prefix_default_language=False, #)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/apimanager/base/templates/base.html b/apimanager/base/templates/base.html index f599dcf..51e9e70 100644 --- a/apimanager/base/templates/base.html +++ b/apimanager/base/templates/base.html @@ -75,7 +75,7 @@
  • {% trans "Product List" %}
  • - {% url "config-index" as config_index_url %} {% url "webui-index" as webui_props_index_url %} {% url "methodrouting-index" as methodrouting_index_url %} {% url "connectormethod" as connectormethod_url %} {% url "dynamicendpoints-index" as dynamic_endpoints_index_url %} {% url "apicollections-index" as api_collections_index_url %} + {% url "config-index" as config_index_url %} {% url "webui-index" as webui_props_index_url %} {% url "methodrouting-index" as methodrouting_index_url %} {% url "connectormethod" as connectormethod_url %} {% url "dynamicendpoints-index" as dynamic_endpoints_index_url %} {% url "apicollections-index" as api_collections_index_url %} {% url "apicollection-list" as api_collections_list_url %} {% if SHOW_API_TESTER %}