summaryrefslogtreecommitdiffstats
path: root/django/engagementmanager/cms_client/api.py
diff options
context:
space:
mode:
authorPaul McGoldrick <paul.mcgoldrick@att.com>2017-09-28 10:03:40 -0700
committerPaul McGoldrick <paul.mcgoldrick@att.com>2017-09-28 10:14:55 -0700
commitbd886d918ef2adbabd16c61fdd2e47984e21dfd7 (patch)
treed41683dffa58fd698df450d148fab3cc2521b0c5 /django/engagementmanager/cms_client/api.py
parent474554adad912f3edb7ddc3ad14406abb369fb3c (diff)
initial seed code commit VVP-5
Change-Id: I6560c87ef48a6d0d1fe8197c7c6439c7e6ad653f Signed-off-by: Paul McGoldrick <paul.mcgoldrick@att.com>
Diffstat (limited to 'django/engagementmanager/cms_client/api.py')
-rwxr-xr-xdjango/engagementmanager/cms_client/api.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/django/engagementmanager/cms_client/api.py b/django/engagementmanager/cms_client/api.py
new file mode 100755
index 0000000..a0ca5b1
--- /dev/null
+++ b/django/engagementmanager/cms_client/api.py
@@ -0,0 +1,159 @@
+#
+# ============LICENSE_START==========================================
+# org.onap.vvp/engagementmgr
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the “License”);
+# you may not use this software except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+#
+# Unless otherwise specified, all documentation contained herein is licensed
+# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
+# you may not use this documentation except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://creativecommons.org/licenses/by/4.0/
+#
+# Unless required by applicable law or agreed to in writing, documentation
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END============================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+import json
+
+from django.conf import settings
+from oauthlib.oauth2 import BackendApplicationClient, TokenExpiredError
+from requests_oauthlib import OAuth2Session
+from rest_framework.status import HTTP_401_UNAUTHORIZED
+from engagementmanager.service.logging_service import LoggingServiceFactory
+
+logger = LoggingServiceFactory.get_logger()
+
+
+class CMSClient(object):
+ """
+ ICE CMS (Mezzanine) API Client SDK
+ """
+
+ def __init__(self):
+ """
+ Ice CMS client constructor ->
+ :param MZN_ID: from env vars.
+ :param MZN_Secret: from env vars.
+ """
+ super(CMSClient, self).__init__()
+
+ self.client_id = settings.CMS_APP_CLIENT_ID
+ self.client_secret = settings.CMS_APP_CLIENT_SECRET
+ self.api_url = settings.CMS_URL
+ self.token = self.generateToken(self.client_id, self.client_secret)
+ self.session = OAuth2Session(self.client_id, token=self.token)
+
+ # PROBLEM TO REMOVE TRY AND CATCH
+ def generateToken(self, client_id, client_secret):
+ """
+ Create oauth2 token by id and secret (via cms server)
+ :param client_id: client id (from env vars)
+ :param client_secret: client secret (from env vars)
+ :return: return the result token.
+ """
+ token = None
+
+ try:
+ client = BackendApplicationClient(client_id=client_id)
+ oatuh = OAuth2Session(client=client)
+ token = oatuh.fetch_token(token_url=self.api_url + 'oauth2/token/', client_id=client_id,
+ client_secret=client_secret)
+ except Exception as exception:
+ logger.error(
+ 'Could not create CMS token, error message: ' + str(exception))
+
+ return token
+
+ @staticmethod
+ def json_serialize(obj):
+ """
+ Returns JSON serialization of object
+ """
+ return json.dumps(obj)
+
+ @staticmethod
+ def json_deserialize(string):
+ """
+ Returns deserialization of JSON
+ """
+ return json.loads(string)
+
+ def get(self, resource, params=None):
+ """
+ Make a GET HTTP request
+ """
+ response = None
+ try:
+ response = self.session.get(self.api_url + resource, params=params)
+ if response.status_code == HTTP_401_UNAUTHORIZED:
+ logger.error('Token expired (401 status excepted), will renew cms token now')
+ self.__init__()
+ response = self.session.get(self.api_url + resource, params=params)
+ except TokenExpiredError as exception:
+ logger.error('Token expired (TokenExpiredError exception excepted),'
+ ' will renew cms token now: ' + str(exception))
+ self.__init__()
+ response = self.session.get(self.api_url + resource, params=params)
+ item = self.json_deserialize(response.content.decode('utf-8'))
+ return item
+
+ def get_posts(self, offset=0, limit=10, category="", date_min=""):
+ """
+ Get published blog posts
+ :param date_min: all the posts returned will be after this date
+ :param offset: pagination offset
+ :param limit: pagination limit
+ :param category: the category which the post related to
+ :param limit: date_min of posts to return
+ :return: list of dicts for most recently published blog posts
+ """
+ return self.get('posts?offset={}&limit={}&category_name={}&date_min={}'.format(int(offset), int(limit),
+ category, date_min))['results']
+
+ def get_pages(self, title=""):
+ """
+ Get all pages and it's children.
+ :param title: The title of the page we want
+ :return: list of pages by out filters declaration
+ """
+ return self.get('pages?title={}'.format(title))['results']
+
+ def get_page(self, id):
+ """
+ Return specific page by id
+ :param id: The id of the page we want to require
+ :return: the page result
+ """
+ return self.get('pages/{}'.format(int(id)))
+
+ def search_pages(self, keyword):
+ """
+ Return pages by keyword contained in title or content
+ :param keyword: The keyword which will be searched in title and content
+ :return: the pages as result
+ """
+
+ return self.get('pages/search/?keyword={}'.format(keyword))