From 42f26c64a9afe03cd9e7a0916046e1c055c07bb0 Mon Sep 17 00:00:00 2001 From: Gauvain Pocentek Date: Fri, 19 Jan 2018 11:10:40 +0100 Subject: [PATCH] Retire the project Change-Id: Ica930f34b107f6bd5c56c4a2aff78da18b556ef3 --- .gitreview | 4 - CONTRIBUTING.rst | 16 -- HACKING.rst | 4 - LICENSE | 176 ------------- MANIFEST.in | 6 - README.rst | 21 +- babel.cfg | 2 - cerberusclient/__init__.py | 19 -- cerberusclient/client.py | 23 -- cerberusclient/common/__init__.py | 0 cerberusclient/common/base.py | 171 ------------- cerberusclient/common/exceptions.py | 178 ------------- cerberusclient/common/http.py | 268 -------------------- cerberusclient/common/utils.py | 24 -- cerberusclient/exc.py | 40 --- cerberusclient/tests/__init__.py | 0 cerberusclient/tests/base.py | 23 -- cerberusclient/tests/test_cerberusclient.py | 139 ---------- cerberusclient/v1/__init__.py | 0 cerberusclient/v1/base.py | 24 -- cerberusclient/v1/client.py | 39 --- cerberusclient/v1/plugins.py | 40 --- cerberusclient/v1/security_alarms.py | 45 ---- cerberusclient/v1/security_reports.py | 46 ---- cerberusclient/v1/tasks.py | 70 ----- doc/source/conf.py | 75 ------ doc/source/contributing.rst | 4 - doc/source/index.rst | 25 -- doc/source/installation.rst | 12 - doc/source/readme.rst | 1 - doc/source/usage.rst | 7 - openstack-common.conf | 6 - requirements.txt | 6 - setup.cfg | 47 ---- setup.py | 22 -- test-requirements.txt | 15 -- tox.ini | 34 --- 37 files changed, 8 insertions(+), 1624 deletions(-) delete mode 100644 .gitreview delete mode 100644 CONTRIBUTING.rst delete mode 100644 HACKING.rst delete mode 100644 LICENSE delete mode 100644 MANIFEST.in delete mode 100644 babel.cfg delete mode 100644 cerberusclient/__init__.py delete mode 100644 cerberusclient/client.py delete mode 100644 cerberusclient/common/__init__.py delete mode 100644 cerberusclient/common/base.py delete mode 100644 cerberusclient/common/exceptions.py delete mode 100644 cerberusclient/common/http.py delete mode 100644 cerberusclient/common/utils.py delete mode 100644 cerberusclient/exc.py delete mode 100644 cerberusclient/tests/__init__.py delete mode 100644 cerberusclient/tests/base.py delete mode 100644 cerberusclient/tests/test_cerberusclient.py delete mode 100644 cerberusclient/v1/__init__.py delete mode 100644 cerberusclient/v1/base.py delete mode 100644 cerberusclient/v1/client.py delete mode 100644 cerberusclient/v1/plugins.py delete mode 100644 cerberusclient/v1/security_alarms.py delete mode 100644 cerberusclient/v1/security_reports.py delete mode 100644 cerberusclient/v1/tasks.py delete mode 100755 doc/source/conf.py delete mode 100644 doc/source/contributing.rst delete mode 100644 doc/source/index.rst delete mode 100644 doc/source/installation.rst delete mode 100644 doc/source/readme.rst delete mode 100644 doc/source/usage.rst delete mode 100644 openstack-common.conf delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100755 setup.py delete mode 100644 test-requirements.txt delete mode 100644 tox.ini diff --git a/.gitreview b/.gitreview deleted file mode 100644 index aedb364..0000000 --- a/.gitreview +++ /dev/null @@ -1,4 +0,0 @@ -[gerrit] -host=review.openstack.org -port=29418 -project=stackforge/python-cerberusclient.git diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index d4ecfe8..0000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,16 +0,0 @@ -If you would like to contribute to the development of OpenStack, -you must follow the steps in this page: - - http://docs.openstack.org/infra/manual/developers.html - -Once those steps have been completed, changes to OpenStack -should be submitted for review via the Gerrit tool, following -the workflow documented at: - - http://docs.openstack.org/infra/manual/developers.html#development-workflow - -Pull requests submitted through GitHub will be ignored. - -Bugs should be filed on Launchpad, not GitHub: - - https://bugs.launchpad.net/python-cerberusclient diff --git a/HACKING.rst b/HACKING.rst deleted file mode 100644 index 06f2f7e..0000000 --- a/HACKING.rst +++ /dev/null @@ -1,4 +0,0 @@ -python-cerberusclient Style Commandments -=============================================== - -Read the OpenStack Style Commandments http://docs.openstack.org/developer/hacking/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 68c771a..0000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index c978a52..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,6 +0,0 @@ -include AUTHORS -include ChangeLog -exclude .gitignore -exclude .gitreview - -global-exclude *.pyc diff --git a/README.rst b/README.rst index 93fd8e4..d98af48 100644 --- a/README.rst +++ b/README.rst @@ -1,15 +1,10 @@ -=============================== -python-cerberusclient -=============================== +This project is no longer maintained. -Python Cerberus Client +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". -* Free software: Apache license -* Documentation: http://docs.openstack.org/developer/python-cerberusclient -* Source: http://git.openstack.org/cgit/openstack/python-cerberusclient -* Bugs: http://bugs.launchpad.net/replace with the name of the project on launchpad - -Features --------- - -* TODO +For any further questions, please email +openstack-dev@lists.openstack.org or join #openstack-dev on +Freenode. diff --git a/babel.cfg b/babel.cfg deleted file mode 100644 index 15cd6cb..0000000 --- a/babel.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[python: **.py] - diff --git a/cerberusclient/__init__.py b/cerberusclient/__init__.py deleted file mode 100644 index 3bfef59..0000000 --- a/cerberusclient/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. - -import pbr.version - - -__version__ = pbr.version.VersionInfo( - 'python-cerberusclient').version_string() diff --git a/cerberusclient/client.py b/cerberusclient/client.py deleted file mode 100644 index 86414c3..0000000 --- a/cerberusclient/client.py +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import utils - - -def Client(version, *args, **kwargs): - module = utils.import_versioned_module(version, 'client') - client_class = getattr(module, 'Client') - return client_class(*args, **kwargs) diff --git a/cerberusclient/common/__init__.py b/cerberusclient/common/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/cerberusclient/common/base.py b/cerberusclient/common/base.py deleted file mode 100644 index ca9d241..0000000 --- a/cerberusclient/common/base.py +++ /dev/null @@ -1,171 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -""" -Base utilities to build API operation managers and objects on top of. -""" - -import copy - - -# Python 2.4 compat -try: - all -except NameError: - def all(iterable): - return True not in (not x for x in iterable) - - -def getid(obj): - """Wrapper to get object's ID. - - Abstracts the common pattern of allowing both an object or - an object's ID (UUID) as a parameter when dealing with relationships. - """ - try: - return obj.id - except AttributeError: - return obj - - -class Manager(object): - """Provides CRUD operations with a particular API. - - Managers interact with a particular type of API (servers, flavors, - images, etc.) and provide CRUD operations for them. - """ - resource_class = None - - def __init__(self, api): - self.api = api - - def _list(self, url, response_key=None, obj_class=None, - data=None, headers={}): - - resp, body = self.api.json_request('GET', url, headers=headers) - - if obj_class is None: - obj_class = self.resource_class - - if response_key: - if response_key not in body: - body[response_key] = [] - data = body[response_key] - else: - data = body - return [obj_class(self, res, loaded=True) for res in data if res] - - def _delete(self, url, headers={}): - self.api.raw_request('DELETE', url, headers=headers) - - def _update(self, url, data=None, response_key=None, headers={}): - resp, body = self.api.json_request('PUT', url, data=data, - headers=headers) - # PUT requests may not return a body - if body: - if response_key: - return self.resource_class(self, body[response_key]) - return self.resource_class(self, body) - - def _create(self, url, data=None, response_key=None, - return_raw=False, headers={}): - if data: - resp, body = self.api.json_request('POST', url, - data=data, headers=headers) - else: - resp, body = self.api.json_request('POST', url, headers=headers) - if return_raw: - if response_key: - return body[response_key] - return body - if response_key: - return self.resource_class(self, body[response_key]) - return self.resource_class(self, body) - - def _act(self, url, data, headers={}): - self.api.json_request('POST', url, data=data, headers=headers) - - def _get(self, url, response_key=None, return_raw=False, headers={}): - resp, body = self.api.json_request('GET', url, headers=headers) - if return_raw: - if response_key: - return body[response_key] - return body - if response_key: - return self.resource_class(self, body[response_key]) - return self.resource_class(self, body) - - -class Resource(object): - """Represents a particular instance of an object (tenant, user, etc). - - This is pretty much just a bag for attributes. - """ - def __init__(self, manager, info, loaded=False): - self.manager = manager - self._info = info - self._add_details(info) - self._loaded = loaded - - def _add_details(self, info): - for k, v in info.items(): - setattr(self, k, v) - - def __setstate__(self, d): - for k, v in d.items(): - setattr(self, k, v) - - def __getattr__(self, k): - if k not in self.__dict__: - # NOTE(bcwaldon): disallow lazy-loading if already loaded once - if not self.is_loaded(): - self.get() - return self.__getattr__(k) - raise AttributeError(k) - else: - return self.__dict__[k] - - def __repr__(self): - reprkeys = sorted(k for k in self.__dict__.keys() if k[0] != '_' and - k != 'manager') - info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys) - return "<%s %s>" % (self.__class__.__name__, info) - - def get(self): - # set_loaded() first ... so if we have to bail, we know we tried. - self.set_loaded(True) - if not hasattr(self.manager, 'get'): - return - - new = self.manager.get(self.id) - if new: - self._add_details(new._info) - - def __eq__(self, other): - if not isinstance(other, self.__class__): - return False - if hasattr(self, 'id') and hasattr(other, 'id'): - return self.id == other.id - return self._info == other._info - - def is_loaded(self): - return self._loaded - - def set_loaded(self, val): - self._loaded = val - - def to_dict(self): - return copy.deepcopy(self._info) diff --git a/cerberusclient/common/exceptions.py b/cerberusclient/common/exceptions.py deleted file mode 100644 index 8874b43..0000000 --- a/cerberusclient/common/exceptions.py +++ /dev/null @@ -1,178 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -import sys - - -# TODO(sjmc7): This module is likely redundant because it's replaced -# by openstack.common.apiclient; should be removed -class BaseException(Exception): - """An error occurred.""" - def __init__(self, message=None): - self.message = message - - def __str__(self): - return self.message or self.__class__.__doc__ - - -class InvalidEndpoint(BaseException): - """The provided endpoint is invalid.""" - - -class CommunicationError(BaseException): - """Unable to communicate with server.""" - - -class ClientException(Exception): - """DEPRECATED!""" - - -class HTTPException(ClientException): - """Base exception for all HTTP-derived exceptions.""" - code = 'N/A' - - def __init__(self, details=None): - self.details = details or self.__class__.__name__ - - def __str__(self): - return "%s (HTTP %s)" % (self.details, self.code) - - -class HTTPMultipleChoices(HTTPException): - code = 300 - - def __str__(self): - self.details = ("Requested version of Application Catalog API is not " - "available.") - return "%s (HTTP %s) %s" % (self.__class__.__name__, self.code, - self.details) - - -class BadRequest(HTTPException): - """DEPRECATED!""" - code = 400 - - -class HTTPBadRequest(BadRequest): - pass - - -class Unauthorized(HTTPException): - """DEPRECATED!""" - code = 401 - - -class HTTPUnauthorized(Unauthorized): - pass - - -class Forbidden(HTTPException): - """DEPRECATED!""" - code = 403 - - -class HTTPForbidden(Forbidden): - pass - - -class NotFound(HTTPException): - """DEPRECATED!""" - code = 404 - - -class HTTPNotFound(NotFound): - pass - - -class HTTPMethodNotAllowed(HTTPException): - code = 405 - - -class Conflict(HTTPException): - """DEPRECATED!""" - code = 409 - - -class HTTPConflict(Conflict): - pass - - -class OverLimit(HTTPException): - """DEPRECATED!""" - code = 413 - - -class HTTPOverLimit(OverLimit): - pass - - -class HTTPInternalServerError(HTTPException): - code = 500 - - -class HTTPNotImplemented(HTTPException): - code = 501 - - -class HTTPBadGateway(HTTPException): - code = 502 - - -class ServiceUnavailable(HTTPException): - """DEPRECATED!""" - code = 503 - - -class HTTPServiceUnavailable(ServiceUnavailable): - pass - - -# NOTE(bcwaldon): Build a mapping of HTTP codes to corresponding exception -# classes -_code_map = {} -for obj_name in dir(sys.modules[__name__]): - if obj_name.startswith('HTTP'): - obj = getattr(sys.modules[__name__], obj_name) - _code_map[obj.code] = obj - - -def from_response(response): - """Return an instance of an HTTPException based on httplib response.""" - cls = _code_map.get(response.status_code, HTTPException) - body = response.content - if body: - details = body.replace('\n\n', '\n') - return cls(details=details) - - return cls() - - -class NoTokenLookupException(Exception): - """DEPRECATED!""" - pass - - -class EndpointNotFound(Exception): - """DEPRECATED!""" - pass - - -class SSLConfigurationError(BaseException): - pass - - -class SSLCertificateError(BaseException): - pass diff --git a/cerberusclient/common/http.py b/cerberusclient/common/http.py deleted file mode 100644 index 7a01e4c..0000000 --- a/cerberusclient/common/http.py +++ /dev/null @@ -1,268 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -import copy -import logging -import socket - -from oslo.serialization import jsonutils -from oslo.utils import encodeutils -import requests -import six - -from cerberusclient.common import exceptions as exc - -LOG = logging.getLogger(__name__) -USER_AGENT = 'python-cerberusclient' - - -class HTTPClient(object): - - def __init__(self, endpoint, **kwargs): - self.endpoint = endpoint - self.auth_url = kwargs.get('auth_url') - self.auth_token = kwargs.get('token') - self.username = kwargs.get('username') - self.password = kwargs.get('password') - self.region_name = kwargs.get('region_name') - self.include_pass = kwargs.get('include_pass') - self.endpoint_url = endpoint - - self.cert_file = kwargs.get('cert_file') - self.key_file = kwargs.get('key_file') - self.timeout = kwargs.get('timeout') - - self.ssl_connection_params = { - 'ca_file': kwargs.get('ca_file'), - 'cert_file': kwargs.get('cert_file'), - 'key_file': kwargs.get('key_file'), - 'insecure': kwargs.get('insecure'), - } - - self.verify_cert = None - - def log_curl_request(self, method, url, kwargs): - curl = ['curl -i -X %s' % method] - - for (key, value) in kwargs['headers'].items(): - header = '-H \'%s: %s\'' % (encodeutils.safe_decode(key), - encodeutils.safe_decode(value)) - curl.append(header) - - conn_params_fmt = [ - ('key_file', '--key %s'), - ('cert_file', '--cert %s'), - ('ca_file', '--cacert %s'), - ] - for (key, fmt) in conn_params_fmt: - value = self.ssl_connection_params.get(key) - if value: - curl.append(fmt % value) - - if self.ssl_connection_params.get('insecure'): - curl.append('-k') - - if 'data' in kwargs: - curl.append('-d \'%s\'' % kwargs['data']) - - curl.append('%s%s' % (self.endpoint, url)) - LOG.debug(' '.join(curl)) - - @staticmethod - def log_http_response(resp): - status = (resp.raw.version / 10.0, resp.status_code, resp.reason) - dump = ['\nHTTP/%.1f %s %s' % status] - dump.extend(['%s: %s' % (k, v) for k, v in resp.headers.items()]) - dump.append('') - if resp.content: - content = resp.content - if isinstance(content, six.binary_type): - try: - content = encodeutils.safe_decode(resp.content) - except UnicodeDecodeError: - pass - else: - dump.extend([content, '']) - LOG.debug('\n'.join(dump)) - - def _http_request(self, url, method, **kwargs): - """Send an http request with the specified characteristics. - - Wrapper around requests.request to handle tasks such - as setting headers and error handling. - """ - # Copy the kwargs so we can reuse the original in case of redirects - kwargs['headers'] = copy.deepcopy(kwargs.get('headers', {})) - kwargs['headers'].setdefault('User-Agent', USER_AGENT) - if self.auth_token: - kwargs['headers'].setdefault('X-Auth-Token', self.auth_token) - else: - kwargs['headers'].update(self.credentials_headers()) - if self.auth_url: - kwargs['headers'].setdefault('X-Auth-Url', self.auth_url) - if self.region_name: - kwargs['headers'].setdefault('X-Region-Name', self.region_name) - - self.log_curl_request(method, url, kwargs) - - if self.cert_file and self.key_file: - kwargs['cert'] = (self.cert_file, self.key_file) - - if self.verify_cert is not None: - kwargs['verify'] = self.verify_cert - - if self.timeout is not None: - kwargs['timeout'] = float(self.timeout) - - # Allow the option not to follow redirects - follow_redirects = kwargs.pop('follow_redirects', True) - - # Since requests does not follow the RFC when doing redirection to sent - # back the same method on a redirect we are simply bypassing it. For - # example if we do a DELETE/POST/PUT on a URL and we get a 302 RFC says - # that we should follow that URL with the same method as before, - # requests doesn't follow that and send a GET instead for the method. - # Hopefully this could be fixed as they say in a comment in a future - # point version i.e.: 3.x - # See issue: https://github.com/kennethreitz/requests/issues/1704 - allow_redirects = False - - try: - resp = requests.request( - method, - self.endpoint_url + url, - allow_redirects=allow_redirects, - **kwargs) - except socket.gaierror as e: - message = ("Error finding address for %(url)s: %(e)s" % - {'url': self.endpoint_url + url, 'e': e}) - raise exc.InvalidEndpoint(message=message) - except (socket.error, - socket.timeout, - requests.exceptions.ConnectionError) as e: - endpoint = self.endpoint - message = ("Error communicating with %(endpoint)s %(e)s" % - {'endpoint': endpoint, 'e': e}) - raise exc.CommunicationError(message=message) - - self.log_http_response(resp) - - if ('X-Auth-Key' not in kwargs['headers'] and - (resp.status_code == 401 or - (resp.status_code == 500 and "(HTTP 401)" in resp.content))): - raise exc.HTTPUnauthorized("Authentication failed. Please try" - " again.\n%s" - % resp.content) - elif 400 <= resp.status_code < 600: - raise exc.from_response(resp) - elif resp.status_code in (301, 302, 305): - # Redirected. Reissue the request to the new location, - # unless caller specified follow_redirects=False - if follow_redirects: - location = resp.headers.get('location') - path = self.strip_endpoint(location) - resp = self._http_request(path, method, **kwargs) - elif resp.status_code == 300: - raise exc.from_response(resp) - - return resp - - def strip_endpoint(self, location): - if location is None: - message = "Location not returned with 302" - raise exc.InvalidEndpoint(message=message) - elif location.startswith(self.endpoint): - return location[len(self.endpoint):] - else: - message = "Prohibited endpoint redirect %s" % location - raise exc.InvalidEndpoint(message=message) - - def credentials_headers(self): - creds = {} - if self.username: - creds['X-Auth-User'] = self.username - if self.password: - creds['X-Auth-Key'] = self.password - return creds - - def json_request(self, method, url, content_type='application/json', - **kwargs): - kwargs.setdefault('headers', {}) - kwargs['headers'].setdefault('Content-Type', content_type) - # Don't set Accept because we aren't always dealing in JSON - - if 'body' in kwargs: - if 'data' in kwargs: - raise ValueError("Can't provide both 'data' and " - "'body' to a request") - LOG.warning("Use of 'body' is deprecated; use 'data' instead") - kwargs['data'] = kwargs.pop('body') - if 'data' in kwargs: - kwargs['data'] = jsonutils.dumps(kwargs['data']) - - resp = self._http_request(url, method, **kwargs) - body = resp.content - - if 'application/json' in resp.headers.get('content-type', []): - try: - body = resp.json() - except ValueError: - LOG.error('Could not decode response body as JSON') - else: - body = None - - return resp, body - - def json_patch_request(self, url, method='PATCH', **kwargs): - content_type = 'application/murano-packages-json-patch' - return self.json_request( - method, url, content_type=content_type, **kwargs) - - def raw_request(self, method, url, **kwargs): - kwargs.setdefault('headers', {}) - kwargs['headers'].setdefault('Content-Type', - 'application/octet-stream') - if 'body' in kwargs: - if 'data' in kwargs: - raise ValueError("Can't provide both 'data' and " - "'body' to a request") - LOG.warning("Use of 'body' is deprecated; use 'data' instead") - kwargs['data'] = kwargs.pop('body') - # Chunking happens automatically if 'body' is a - # file-like object - return self._http_request(url, method, **kwargs) - - def client_request(self, method, url, **kwargs): - resp, body = self.json_request(method, url, **kwargs) - return resp - - def head(self, url, **kwargs): - return self.client_request("HEAD", url, **kwargs) - - def get(self, url, **kwargs): - return self.client_request("GET", url, **kwargs) - - def post(self, url, **kwargs): - return self.client_request("POST", url, **kwargs) - - def put(self, url, **kwargs): - return self.client_request("PUT", url, **kwargs) - - def delete(self, url, **kwargs): - return self.raw_request("DELETE", url, **kwargs) - - def patch(self, url, **kwargs): - return self.client_request("PATCH", url, **kwargs) diff --git a/cerberusclient/common/utils.py b/cerberusclient/common/utils.py deleted file mode 100644 index 2ee2748..0000000 --- a/cerberusclient/common/utils.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from oslo.utils import importutils - - -def import_versioned_module(version, submodule=None): - module = 'cerberusclient.v%s' % version - if submodule: - module = '.'.join((module, submodule)) - return importutils.import_module(module) diff --git a/cerberusclient/exc.py b/cerberusclient/exc.py deleted file mode 100644 index cd3775b..0000000 --- a/cerberusclient/exc.py +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -import json - - -class HTTPException(BaseException): - """Base exception for all HTTP-derived exceptions.""" - code = 'N/A' - - def __init__(self, details=None): - self.details = details - - def __str__(self): - try: - data = json.loads(self.details) - message = data.get("error_message", {}).get("faultstring") - if message: - return "%s (HTTP %s) ERROR %s" % ( - self.__class__.__name__, self.code, message) - except (ValueError, TypeError, AttributeError): - pass - return "%s (HTTP %s)" % (self.__class__.__name__, self.code) - - -class HTTPNotFound(HTTPException): - code = 404 diff --git a/cerberusclient/tests/__init__.py b/cerberusclient/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/cerberusclient/tests/base.py b/cerberusclient/tests/base.py deleted file mode 100644 index 1c30cdb..0000000 --- a/cerberusclient/tests/base.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2010-2011 OpenStack Foundation -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. - -from oslotest import base - - -class TestCase(base.BaseTestCase): - - """Test case base class for all unit tests.""" diff --git a/cerberusclient/tests/test_cerberusclient.py b/cerberusclient/tests/test_cerberusclient.py deleted file mode 100644 index 902ead9..0000000 --- a/cerberusclient/tests/test_cerberusclient.py +++ /dev/null @@ -1,139 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -""" -test_python-cerberusclient ----------------------------------- - -Tests for `python-cerberusclient` module. -""" -import mock - -from cerberusclient import client -from cerberusclient.tests import base -from cerberusclient.v1 import plugins -from cerberusclient.v1 import security_alarms -from cerberusclient.v1 import security_reports -from cerberusclient.v1 import tasks - - -def my_mock(*a, **b): - return [a, b] - - -def my_mock_plugin(*a, **b): - b['plugin'] = b - return [a, b] - - -def my_mock_task(*a, **b): - b['task'] = b - return [a, b] - - -def my_mock_security_report(*a, **b): - b['security_report'] = b - return [a, b] - - -def my_mock_security_alarm(*a, **b): - b['security_alarm'] = b - return [a, b] - -api = mock.MagicMock(json_request=my_mock) - - -class TestCerberusclient(base.TestCase): - - def test_create_client_instance(self): - endpoint = 'http://no-resolved-host:8001' - test_client = client.Client('1', endpoint=endpoint, - token='1', timeout=10) - self.assertIsNotNone(test_client.plugins) - - def test_plugin_manager_list(self): - manager = plugins.PluginManager(api) - result = manager.list() - self.assertEqual([], result) - - def test_plugin_manager_get(self): - api = mock.MagicMock(json_request=my_mock_plugin) - manager = plugins.PluginManager(api) - result = manager.get('test') - self.assertIsNotNone(result.manager) - - def test_task_manager_create(self): - api = mock.MagicMock(json_request=my_mock_task) - manager = tasks.TaskManager(api) - result = manager.create('test', 'method') - self.assertIsNotNone(result.manager) - - def test_task_manager_list(self): - manager = tasks.TaskManager(api) - result = manager.list() - self.assertEqual([], result) - - def test_task_manager_get(self): - api = mock.MagicMock(json_request=my_mock_task) - manager = tasks.TaskManager(api) - result = manager.get('test') - self.assertIsNotNone(result.manager) - - def test_task_manager_stop(self): - api = mock.MagicMock() - manager = tasks.TaskManager(api) - result = manager.stop(1) - self.assertIsNone(result) - - def test_task_manager_delete(self): - api = mock.MagicMock() - manager = tasks.TaskManager(api) - result = manager.delete(1) - self.assertIsNone(result) - - def test_task_manager_force_delete(self): - api = mock.MagicMock() - manager = tasks.TaskManager(api) - result = manager.force_delete(1) - self.assertIsNone(result) - - def test_task_manager_restart(self): - api = mock.MagicMock() - manager = tasks.TaskManager(api) - result = manager.restart(1) - self.assertIsNone(result) - - def test_security_reports_manager_list(self): - manager = security_reports.SecurityReportManager(api) - result = manager.list() - self.assertIsNotNone(result) - - def test_security_reports_manager_get(self): - api = mock.MagicMock(json_request=my_mock_security_report) - manager = security_reports.SecurityReportManager(api) - result = manager.get('report_id') - self.assertIsNotNone(result) - - def test_security_alarms_manager_list(self): - manager = security_alarms.SecurityAlarmManager(api) - result = manager.list() - self.assertIsNotNone(result) - - def test_security_alarms_manager_get(self): - api = mock.MagicMock(json_request=my_mock_security_alarm) - manager = security_alarms.SecurityAlarmManager(api) - result = manager.get('alarm_id') - self.assertIsNotNone(result) diff --git a/cerberusclient/v1/__init__.py b/cerberusclient/v1/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/cerberusclient/v1/base.py b/cerberusclient/v1/base.py deleted file mode 100644 index 411f442..0000000 --- a/cerberusclient/v1/base.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import base - - -class BaseManager(base.Manager): - - def __init__(self, api): - super(BaseManager, self).__init__(api) - self.url_prefix = '/v1' diff --git a/cerberusclient/v1/client.py b/cerberusclient/v1/client.py deleted file mode 100644 index df9b780..0000000 --- a/cerberusclient/v1/client.py +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import http -from cerberusclient.v1 import plugins -from cerberusclient.v1 import security_alarms -from cerberusclient.v1 import security_reports -from cerberusclient.v1 import tasks - - -class Client(http.HTTPClient): - """Client for the Cerberus v1 API. - - :param string endpoint: A user-supplied endpoint URL for the service. - :param string token: Token for authentication. - :param integer timeout: Allows customization of the timeout for client - http requests. (optional) - """ - - def __init__(self, *args, **kwargs): - """Initialize a new client for the Cerberus v1 API.""" - super(Client, self).__init__(*args, **kwargs) - self.plugins = plugins.PluginManager(self) - self.tasks = tasks.TaskManager(self) - self.security_reports = security_reports.SecurityReportManager(self) - self.security_alarms = security_alarms.SecurityAlarmManager(self) diff --git a/cerberusclient/v1/plugins.py b/cerberusclient/v1/plugins.py deleted file mode 100644 index da63c58..0000000 --- a/cerberusclient/v1/plugins.py +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright (c) 2014 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import base -from cerberusclient.v1 import base as v1_base - - -class Plugin(base.Resource): - def __repr__(self): - return "" % self._info - - def data(self, **kwargs): - return self.manager.data(self, **kwargs) - - -class PluginManager(v1_base.BaseManager): - resource_class = Plugin - - def __init__(self, api): - super(PluginManager, self).__init__(api) - self.url = self.url_prefix + '/plugins' - - def list(self): - return self._list(self.url, 'plugins') - - def get(self, plugin_id): - return self._get(self.url + '/{uuid}'.format(uuid=plugin_id)) diff --git a/cerberusclient/v1/security_alarms.py b/cerberusclient/v1/security_alarms.py deleted file mode 100644 index dbae133..0000000 --- a/cerberusclient/v1/security_alarms.py +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import base -from cerberusclient.v1 import base as v1_base - - -class SecurityAlarm(base.Resource): - def __repr__(self): - return "" % self._info - - def data(self, **kwargs): - return self.manager.data(self, **kwargs) - - -class SecurityAlarmManager(v1_base.BaseManager): - resource_class = SecurityAlarm - - def __init__(self, api): - super(SecurityAlarmManager, self).__init__(api) - self.url = self.url_prefix + '/security_alarms' - - def list(self): - return self._list(self.url, 'security_alarms') - - def get(self, alarm_id): - return self._get(self.url + '/{id}'.format(id=alarm_id)) - - def put(self, alarm_id, ticket_id): - return self._update(self.url + '/{id}'.format(id=alarm_id) + - '/tickets/' + '{ticket_id}'.format( - ticket_id=ticket_id)) diff --git a/cerberusclient/v1/security_reports.py b/cerberusclient/v1/security_reports.py deleted file mode 100644 index d1e9490..0000000 --- a/cerberusclient/v1/security_reports.py +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import base -from cerberusclient.v1 import base as v1_base - - -class SecurityReport(base.Resource): - def __repr__(self): - return "" % self._info - - def data(self, **kwargs): - return self.manager.data(self, **kwargs) - - -class SecurityReportManager(v1_base.BaseManager): - resource_class = SecurityReport - - def __init__(self, api): - super(SecurityReportManager, self).__init__(api) - self.url = self.url_prefix + '/security_reports' - - def list(self): - return self._list(self.url, 'security_reports') - - def get(self, report_uuid): - - return self._get(self.url + '/{uuid}'.format(uuid=report_uuid)) - - def put(self, report_uuid, ticket_id): - return self._update(self.url + '/{uuid}'.format(uuid=report_uuid) + - '/tickets/' + '{ticket_id}'.format( - ticket_id=ticket_id)) diff --git a/cerberusclient/v1/tasks.py b/cerberusclient/v1/tasks.py deleted file mode 100644 index be3e8c8..0000000 --- a/cerberusclient/v1/tasks.py +++ /dev/null @@ -1,70 +0,0 @@ -# -# Copyright (c) 2015 EUROGICIEL -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file 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. -# - -from cerberusclient.common import base -from cerberusclient.v1 import base as v1_base - - -class Task(base.Resource): - def __repr__(self): - return "" % self._info - - def data(self, **kwargs): - return self.manager.data(self, **kwargs) - - -class TaskManager(v1_base.BaseManager): - resource_class = Task - - def __init__(self, api): - super(TaskManager, self).__init__(api) - self.url = self.url_prefix + '/tasks' - - def list(self): - return self._list(self.url, 'tasks') - - def get(self, task_id): - return self._get(self.url + '/{id}'.format(id=task_id)) - - def create(self, plugin_id, method, name='unknown', type='unique', - period=None, persistent='False'): - data = {} - data['method'] = method - data['name'] = name - data['type'] = type - data['period'] = period - data['plugin_id'] = plugin_id - data['persistent'] = persistent - return self._create(self.url, - data=data) - - def stop(self, task_id): - return self._act(self.url + '/{id}'.format(id=task_id) - + '/action/stop', - {}) - - def delete(self, task_id): - return self._delete(self.url + '/{id}'.format(id=task_id)) - - def force_delete(self, task_id): - return self._act(self.url + '/{id}'.format(id=task_id) - + '/action/force_delete', - {}) - - def restart(self, task_id): - return self._act(self.url + '/{id}'.format(id=task_id) - + '/action/restart', - {}) diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100755 index d501e83..0000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file 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. - -import os -import sys - -sys.path.insert(0, os.path.abspath('../..')) -# -- General configuration ---------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.autodoc', - #'sphinx.ext.intersphinx', - 'oslosphinx' -] - -# autodoc generation is a bit aggressive and a nuisance when doing heavy -# text edit cycles. -# execute "export SPHINX_DEBUG=1" in your terminal to disable - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'python-cerberusclient' -copyright = u'2013, OpenStack Foundation' - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# -- Options for HTML output -------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -# html_theme_path = ["."] -# html_theme = '_theme' -# html_static_path = ['static'] - -# Output file base name for HTML help builder. -htmlhelp_basename = '%sdoc' % project - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass -# [howto/manual]). -latex_documents = [ - ('index', - '%s.tex' % project, - u'%s Documentation' % project, - u'OpenStack Foundation', 'manual'), -] - -# Example configuration for intersphinx: refer to the Python standard library. -#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst deleted file mode 100644 index 1728a61..0000000 --- a/doc/source/contributing.rst +++ /dev/null @@ -1,4 +0,0 @@ -============ -Contributing -============ -.. include:: ../../CONTRIBUTING.rst diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index fb6d65b..0000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. python-cerberusclient documentation master file, created by - sphinx-quickstart on Tue Jul 9 22:26:36 2013. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to python-cerberusclient's documentation! -======================================================== - -Contents: - -.. toctree:: - :maxdepth: 2 - - readme - installation - usage - contributing - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/doc/source/installation.rst b/doc/source/installation.rst deleted file mode 100644 index 1306dff..0000000 --- a/doc/source/installation.rst +++ /dev/null @@ -1,12 +0,0 @@ -============ -Installation -============ - -At the command line:: - - $ pip install python-cerberusclient - -Or, if you have virtualenvwrapper installed:: - - $ mkvirtualenv python-cerberusclient - $ pip install python-cerberusclient diff --git a/doc/source/readme.rst b/doc/source/readme.rst deleted file mode 100644 index a6210d3..0000000 --- a/doc/source/readme.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../../README.rst diff --git a/doc/source/usage.rst b/doc/source/usage.rst deleted file mode 100644 index 144ed84..0000000 --- a/doc/source/usage.rst +++ /dev/null @@ -1,7 +0,0 @@ -======== -Usage -======== - -To use python-cerberusclient in a project:: - - import python-cerberusclient diff --git a/openstack-common.conf b/openstack-common.conf deleted file mode 100644 index 69c7758..0000000 --- a/openstack-common.conf +++ /dev/null @@ -1,6 +0,0 @@ -[DEFAULT] - -# The list of modules to copy from oslo-incubator.git - -# The base module to hold the copy of openstack.common -base=python-cerberusclient diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 95137a6..0000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. - -pbr>=0.6,!=0.7,<1.0 -Babel>=1.3 diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index e0df393..0000000 --- a/setup.cfg +++ /dev/null @@ -1,47 +0,0 @@ -[metadata] -name = python-cerberusclient -summary = Python Cerberus Client -description-file = - README.rst -author = OpenStack -author-email = openstack-dev@lists.openstack.org -home-page = http://www.openstack.org/ -classifier = - Environment :: OpenStack - Intended Audience :: Information Technology - Intended Audience :: System Administrators - License :: OSI Approved :: Apache Software License - Operating System :: POSIX :: Linux - Programming Language :: Python - Programming Language :: Python :: 2 - Programming Language :: Python :: 2.7 - Programming Language :: Python :: 2.6 - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.3 - Programming Language :: Python :: 3.4 - -[files] -packages = - cerberusclient - -[build_sphinx] -source-dir = doc/source -build-dir = doc/build -all_files = 1 - -[upload_sphinx] -upload-dir = doc/build/html - -[compile_catalog] -directory = python-cerberusclient/locale -domain = python-cerberusclient - -[update_catalog] -domain = python-cerberusclient -output_dir = python-cerberusclient/locale -input_file = python-cerberusclient/locale/python-cerberusclient.pot - -[extract_messages] -keywords = _ gettext ngettext l_ lazy_gettext -mapping_file = babel.cfg -output_file = python-cerberusclient/locale/python-cerberusclient.pot diff --git a/setup.py b/setup.py deleted file mode 100755 index 70c2b3f..0000000 --- a/setup.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file 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. - -# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT -import setuptools - -setuptools.setup( - setup_requires=['pbr'], - pbr=True) diff --git a/test-requirements.txt b/test-requirements.txt deleted file mode 100644 index 644b0a8..0000000 --- a/test-requirements.txt +++ /dev/null @@ -1,15 +0,0 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. - -hacking>=0.9.2,<0.10 - -coverage>=3.6 -discover -python-subunit -oslotest>=1.1.0.0a1 -testrepository>=0.0.18 -testscenarios>=0.4 -testtools>=0.9.34 -sphinx>=1.1.2,<1.1.999 -oslosphinx<=2.5.0 \ No newline at end of file diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 1a9841c..0000000 --- a/tox.ini +++ /dev/null @@ -1,34 +0,0 @@ -[tox] -minversion = 1.6 -envlist = py33,py34,py26,py27,pypy,pep8 -skipsdist = True - -[testenv] -usedevelop = True -install_command = pip install -U {opts} {packages} -setenv = - VIRTUAL_ENV={envdir} -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:pep8] -commands = flake8 - -[testenv:venv] -commands = {posargs} - -[testenv:cover] -commands = - nosetests --with-xunit --with-xcoverage --cover-package=sticks --nocapture --cover-tests --cover-branches --cover-min-percentage=50 - -[testenv:docs] -commands = python setup.py build_sphinx - -[flake8] -# H803 skipped on purpose per list discussion. -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,H803 -builtins = _ -exclude=.venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build