nfv/nfv/nfv-client/nfv_client/openstack/objects.py

78 lines
2.3 KiB
Python
Executable File

#
# Copyright (c) 2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import datetime
import iso8601
import re
class Token(object):
"""
Token
"""
def __init__(self, token_data, token_id):
self._expired = False
self._data = token_data
self._token_id = token_id
def set_expired(self):
self._expired = True
def is_expired(self, within_seconds=300):
if not self._expired:
end = iso8601.parse_date(self._data['token']['expires_at'])
now = iso8601.parse_date(datetime.datetime.utcnow().isoformat())
if end <= now:
return True
delta = abs(end - now).seconds
return delta <= within_seconds
return True
def get_id(self):
"""
Get the identifier of the token.
"""
return self._token_id
def get_tenant_id(self):
"""
Get the tenant identifier of the token.
"""
return self._data['token']['project']['id']
@staticmethod
def _url_strip_version(url):
"""
Strip the version information from the url
"""
# Get rid of the trailing '/' if present and remove the version
# information from the URL.
url = url.rstrip('/')
url_bits = url.split('/')
# Regular-Expression to match 'v1' or 'v2.0' etc
# prefix regular expression with r to treat as raw string to
# suppress lint 'anomalous backslash' warnings
if re.match(r'v\d+\.?\d*', url_bits[-1]):
url = '/'.join(url_bits[:-1])
elif re.match(r'v\d+\.?\d*', url_bits[-2]):
url = '/'.join(url_bits[:-2])
return url
def get_service_url(self, region_name, service_name, service_type, interface):
"""
Search the catalog of a service in a region for the url
"""
for catalog in self._data['token']['catalog']:
if catalog['type'] == service_type:
if catalog['name'] == service_name:
if 0 != len(catalog['endpoints']):
for endpoint in catalog['endpoints']:
if (endpoint['region'] == region_name and
endpoint['interface'] == interface):
return endpoint['url']
return None