From 0788f53fa1c4fa20b73133f36c2cfa2c888ca7bf Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Fri, 28 Feb 2014 13:31:00 +1000 Subject: [PATCH] Start using positional decorator Apply the positional decorator to functions. It has been added as I think best practice would dictate, though in some places it has been added in a way that doesn't break existing tests. Closes-Bug: #1295881 Change-Id: I4f7ddbede4cba4ab79d144ad1f9dc83ea76f204a --- keystoneclient/auth/identity/v2.py | 2 ++ keystoneclient/auth/identity/v3.py | 2 ++ keystoneclient/httpclient.py | 4 ++++ keystoneclient/service_catalog.py | 5 +++++ keystoneclient/session.py | 3 +++ keystoneclient/v2_0/tokens.py | 2 ++ keystoneclient/v3/credentials.py | 3 +++ keystoneclient/v3/domains.py | 3 +++ keystoneclient/v3/endpoints.py | 4 ++++ keystoneclient/v3/groups.py | 5 +++++ keystoneclient/v3/policies.py | 4 ++++ keystoneclient/v3/projects.py | 5 +++++ keystoneclient/v3/roles.py | 7 +++++++ keystoneclient/v3/services.py | 3 +++ keystoneclient/v3/users.py | 5 ++++- 15 files changed, 56 insertions(+), 1 deletion(-) diff --git a/keystoneclient/auth/identity/v2.py b/keystoneclient/auth/identity/v2.py index e78761ef5..db9562de0 100644 --- a/keystoneclient/auth/identity/v2.py +++ b/keystoneclient/auth/identity/v2.py @@ -19,6 +19,7 @@ import six from keystoneclient import access from keystoneclient.auth.identity import base from keystoneclient import exceptions +from keystoneclient import utils @six.add_metaclass(abc.ABCMeta) @@ -51,6 +52,7 @@ class Auth(base.BaseIdentityPlugin): msg = 'A username and password or token is required.' raise exceptions.NoMatchingPlugin(msg) + @utils.positional() def __init__(self, auth_url, trust_id=None, tenant_id=None, diff --git a/keystoneclient/auth/identity/v3.py b/keystoneclient/auth/identity/v3.py index 19085b655..7cd967b98 100644 --- a/keystoneclient/auth/identity/v3.py +++ b/keystoneclient/auth/identity/v3.py @@ -20,12 +20,14 @@ import six from keystoneclient import access from keystoneclient.auth.identity import base from keystoneclient import exceptions +from keystoneclient import utils _logger = logging.getLogger(__name__) class Auth(base.BaseIdentityPlugin): + @utils.positional() def __init__(self, auth_url, auth_methods, trust_id=None, domain_id=None, diff --git a/keystoneclient/httpclient.py b/keystoneclient/httpclient.py index 5a30ae4ff..db69e09a2 100644 --- a/keystoneclient/httpclient.py +++ b/keystoneclient/httpclient.py @@ -42,6 +42,7 @@ from keystoneclient import baseclient from keystoneclient import exceptions from keystoneclient.openstack.common import jsonutils from keystoneclient import session as client_session +from keystoneclient import utils _logger = logging.getLogger(__name__) @@ -54,6 +55,7 @@ request = client_session.request class HTTPClient(baseclient.Client, base.BaseAuthPlugin): + @utils.positional(enforcement=utils.positional.WARN) def __init__(self, username=None, tenant_id=None, tenant_name=None, password=None, auth_url=None, region_name=None, endpoint=None, token=None, debug=False, auth_ref=None, use_keyring=False, @@ -287,6 +289,7 @@ class HTTPClient(baseclient.Client, base.BaseAuthPlugin): """ return self.project_name + @utils.positional(enforcement=utils.positional.WARN) def authenticate(self, username=None, password=None, tenant_name=None, tenant_id=None, auth_url=None, token=None, user_id=None, domain_name=None, domain_id=None, @@ -496,6 +499,7 @@ class HTTPClient(baseclient.Client, base.BaseAuthPlugin): # permanently setting _endpoint would better match that behaviour. self._endpoint = value + @utils.positional(enforcement=utils.positional.WARN) def get_raw_token_from_identity_service(self, auth_url, username=None, password=None, tenant_name=None, tenant_id=None, token=None, diff --git a/keystoneclient/service_catalog.py b/keystoneclient/service_catalog.py index e99e98d37..917c59818 100644 --- a/keystoneclient/service_catalog.py +++ b/keystoneclient/service_catalog.py @@ -21,6 +21,7 @@ import abc import six from keystoneclient import exceptions +from keystoneclient import utils @six.add_metaclass(abc.ABCMeta) @@ -140,6 +141,7 @@ class ServiceCatalog(object): return endpoints @abc.abstractmethod + @utils.positional(enforcement=utils.positional.WARN) def get_urls(self, attr=None, filter_value=None, service_type='identity', endpoint_type='publicURL', region_name=None): @@ -162,6 +164,7 @@ class ServiceCatalog(object): """ raise NotImplementedError() + @utils.positional(3, enforcement=utils.positional.WARN) def url_for(self, attr=None, filter_value=None, service_type='identity', endpoint_type='publicURL', region_name=None): @@ -248,6 +251,7 @@ class ServiceCatalogV2(ServiceCatalog): pass return token + @utils.positional(enforcement=utils.positional.WARN) def get_urls(self, attr=None, filter_value=None, service_type='identity', endpoint_type='publicURL', region_name=None): @@ -312,6 +316,7 @@ class ServiceCatalogV3(ServiceCatalog): pass return token + @utils.positional(enforcement=utils.positional.WARN) def get_urls(self, attr=None, filter_value=None, service_type='identity', endpoint_type='public', region_name=None): diff --git a/keystoneclient/session.py b/keystoneclient/session.py index 61f12ea43..89654563b 100644 --- a/keystoneclient/session.py +++ b/keystoneclient/session.py @@ -17,6 +17,7 @@ import six from keystoneclient import exceptions from keystoneclient.openstack.common import jsonutils +from keystoneclient import utils USER_AGENT = 'python-keystoneclient' @@ -51,6 +52,7 @@ class Session(object): REDIRECT_STATUSES = (301, 302, 303, 305, 307) DEFAULT_REDIRECT_LIMIT = 30 + @utils.positional(2, enforcement=utils.positional.WARN) def __init__(self, auth=None, session=None, original_ip=None, verify=True, cert=None, timeout=None, user_agent=None, redirect=DEFAULT_REDIRECT_LIMIT): @@ -108,6 +110,7 @@ class Session(object): if user_agent is not None: self.user_agent = user_agent + @utils.positional(enforcement=utils.positional.WARN) def request(self, url, method, json=None, original_ip=None, user_agent=None, redirect=None, authenticated=None, **kwargs): diff --git a/keystoneclient/v2_0/tokens.py b/keystoneclient/v2_0/tokens.py index d6f3462eb..53ea1da97 100644 --- a/keystoneclient/v2_0/tokens.py +++ b/keystoneclient/v2_0/tokens.py @@ -11,6 +11,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Token(base.Resource): @@ -33,6 +34,7 @@ class Token(base.Resource): class TokenManager(base.Manager): resource_class = Token + @utils.positional(enforcement=utils.positional.WARN) def authenticate(self, username=None, tenant_id=None, tenant_name=None, password=None, token=None, return_raw=False): if token: diff --git a/keystoneclient/v3/credentials.py b/keystoneclient/v3/credentials.py index eb17813ab..be28cc51e 100644 --- a/keystoneclient/v3/credentials.py +++ b/keystoneclient/v3/credentials.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Credential(base.Resource): @@ -47,6 +48,7 @@ class CredentialManager(base.CrudManager): raise ValueError( "Credential requires blob to be specified") + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, user, type, blob=None, data=None, project=None, **kwargs): return super(CredentialManager, self).create( user_id=base.getid(user), @@ -67,6 +69,7 @@ class CredentialManager(base.CrudManager): """ return super(CredentialManager, self).list(**kwargs) + @utils.positional(2, enforcement=utils.positional.WARN) def update(self, credential, user, type=None, blob=None, data=None, project=None, **kwargs): return super(CredentialManager, self).update( diff --git a/keystoneclient/v3/domains.py b/keystoneclient/v3/domains.py index ebe48f942..e0d082d07 100644 --- a/keystoneclient/v3/domains.py +++ b/keystoneclient/v3/domains.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Domain(base.Resource): @@ -33,6 +34,7 @@ class DomainManager(base.CrudManager): collection_key = 'domains' key = 'domain' + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, description=None, enabled=True, **kwargs): return super(DomainManager, self).create( name=name, @@ -56,6 +58,7 @@ class DomainManager(base.CrudManager): kwargs['enabled'] = 0 return super(DomainManager, self).list(**kwargs) + @utils.positional(enforcement=utils.positional.WARN) def update(self, domain, name=None, description=None, enabled=True, **kwargs): return super(DomainManager, self).update( diff --git a/keystoneclient/v3/endpoints.py b/keystoneclient/v3/endpoints.py index d7a5efac9..3f9dfbd0a 100644 --- a/keystoneclient/v3/endpoints.py +++ b/keystoneclient/v3/endpoints.py @@ -16,6 +16,7 @@ from keystoneclient import base from keystoneclient import exceptions +from keystoneclient import utils VALID_INTERFACES = ['public', 'admin', 'internal'] @@ -48,6 +49,7 @@ class EndpointManager(base.CrudManager): msg = msg % ', '.join(VALID_INTERFACES) raise exceptions.ValidationError(msg) + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, service, url, interface=None, region=None, enabled=True, **kwargs): self._validate_interface(interface) @@ -63,6 +65,7 @@ class EndpointManager(base.CrudManager): return super(EndpointManager, self).get( endpoint_id=base.getid(endpoint)) + @utils.positional(enforcement=utils.positional.WARN) def list(self, service=None, interface=None, region=None, enabled=None, **kwargs): """List endpoints. @@ -78,6 +81,7 @@ class EndpointManager(base.CrudManager): enabled=enabled, **kwargs) + @utils.positional(enforcement=utils.positional.WARN) def update(self, endpoint, service=None, url=None, interface=None, region=None, enabled=None, **kwargs): self._validate_interface(interface) diff --git a/keystoneclient/v3/groups.py b/keystoneclient/v3/groups.py index f9d6103f6..a998323fa 100644 --- a/keystoneclient/v3/groups.py +++ b/keystoneclient/v3/groups.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Group(base.Resource): @@ -26,6 +27,7 @@ class Group(base.Resource): * description: group description """ + @utils.positional(enforcement=utils.positional.WARN) def update(self, name=None, description=None): kwargs = { 'name': name if name is not None else self.name, @@ -49,6 +51,7 @@ class GroupManager(base.CrudManager): collection_key = 'groups' key = 'group' + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, domain=None, description=None, **kwargs): return super(GroupManager, self).create( name=name, @@ -56,6 +59,7 @@ class GroupManager(base.CrudManager): description=description, **kwargs) + @utils.positional(enforcement=utils.positional.WARN) def list(self, user=None, domain=None, **kwargs): """List groups. @@ -78,6 +82,7 @@ class GroupManager(base.CrudManager): return super(GroupManager, self).get( group_id=base.getid(group)) + @utils.positional(enforcement=utils.positional.WARN) def update(self, group, name=None, description=None, **kwargs): return super(GroupManager, self).update( group_id=base.getid(group), diff --git a/keystoneclient/v3/policies.py b/keystoneclient/v3/policies.py index 545ec08a4..78cad9376 100644 --- a/keystoneclient/v3/policies.py +++ b/keystoneclient/v3/policies.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Policy(base.Resource): @@ -26,6 +27,7 @@ class Policy(base.Resource): * type: the mime type of the policy blob """ + @utils.positional(enforcement=utils.positional.WARN) def update(self, blob=None, type=None): kwargs = { 'blob': blob if blob is not None else self.blob, @@ -47,6 +49,7 @@ class PolicyManager(base.CrudManager): collection_key = 'policies' key = 'policy' + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, blob, type='application/json', **kwargs): return super(PolicyManager, self).create( blob=blob, @@ -65,6 +68,7 @@ class PolicyManager(base.CrudManager): """ return super(PolicyManager, self).list(**kwargs) + @utils.positional(enforcement=utils.positional.WARN) def update(self, entity, blob=None, type=None, **kwargs): return super(PolicyManager, self).update( policy_id=base.getid(entity), diff --git a/keystoneclient/v3/projects.py b/keystoneclient/v3/projects.py index 90fe0b322..ffc9f3233 100644 --- a/keystoneclient/v3/projects.py +++ b/keystoneclient/v3/projects.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Project(base.Resource): @@ -27,6 +28,7 @@ class Project(base.Resource): * enabled: boolean to indicate if project is enabled """ + @utils.positional(enforcement=utils.positional.WARN) def update(self, name=None, description=None, enabled=None): kwargs = { 'name': name if name is not None else self.name, @@ -51,6 +53,7 @@ class ProjectManager(base.CrudManager): collection_key = 'projects' key = 'project' + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, domain, description=None, enabled=True, **kwargs): return super(ProjectManager, self).create( domain_id=base.getid(domain), @@ -59,6 +62,7 @@ class ProjectManager(base.CrudManager): enabled=enabled, **kwargs) + @utils.positional(enforcement=utils.positional.WARN) def list(self, domain=None, user=None, **kwargs): """List projects. @@ -78,6 +82,7 @@ class ProjectManager(base.CrudManager): return super(ProjectManager, self).get( project_id=base.getid(project)) + @utils.positional(enforcement=utils.positional.WARN) def update(self, project, name=None, domain=None, description=None, enabled=None, **kwargs): return super(ProjectManager, self).update( diff --git a/keystoneclient/v3/roles.py b/keystoneclient/v3/roles.py index 53c770007..40c624a47 100644 --- a/keystoneclient/v3/roles.py +++ b/keystoneclient/v3/roles.py @@ -16,6 +16,7 @@ from keystoneclient import base from keystoneclient import exceptions +from keystoneclient import utils class Role(base.Resource): @@ -72,6 +73,7 @@ class RoleManager(base.CrudManager): msg = 'Must specify either a user or group' raise exceptions.ValidationError(msg) + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, **kwargs): return super(RoleManager, self).create( name=name, @@ -81,6 +83,7 @@ class RoleManager(base.CrudManager): return super(RoleManager, self).get( role_id=base.getid(role)) + @utils.positional(enforcement=utils.positional.WARN) def list(self, user=None, group=None, domain=None, project=None, **kwargs): """Lists roles and role grants. @@ -104,6 +107,7 @@ class RoleManager(base.CrudManager): return super(RoleManager, self).list(**kwargs) + @utils.positional(enforcement=utils.positional.WARN) def update(self, role, name=None, **kwargs): return super(RoleManager, self).update( role_id=base.getid(role), @@ -114,6 +118,7 @@ class RoleManager(base.CrudManager): return super(RoleManager, self).delete( role_id=base.getid(role)) + @utils.positional(enforcement=utils.positional.WARN) def grant(self, role, user=None, group=None, domain=None, project=None): """Grants a role to a user or group on a domain or project.""" self._require_domain_xor_project(domain, project) @@ -123,6 +128,7 @@ class RoleManager(base.CrudManager): base_url=self._role_grants_base_url(user, group, domain, project), role_id=base.getid(role)) + @utils.positional(enforcement=utils.positional.WARN) def check(self, role, user=None, group=None, domain=None, project=None): """Checks if a user or group has a role on a domain or project.""" self._require_domain_xor_project(domain, project) @@ -132,6 +138,7 @@ class RoleManager(base.CrudManager): base_url=self._role_grants_base_url(user, group, domain, project), role_id=base.getid(role)) + @utils.positional(enforcement=utils.positional.WARN) def revoke(self, role, user=None, group=None, domain=None, project=None): """Revokes a role from a user or group on a domain or project.""" self._require_domain_xor_project(domain, project) diff --git a/keystoneclient/v3/services.py b/keystoneclient/v3/services.py index ae11f31aa..795dc247c 100644 --- a/keystoneclient/v3/services.py +++ b/keystoneclient/v3/services.py @@ -15,6 +15,7 @@ # under the License. from keystoneclient import base +from keystoneclient import utils class Service(base.Resource): @@ -36,6 +37,7 @@ class ServiceManager(base.CrudManager): collection_key = 'services' key = 'service' + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, type, enabled=True, **kwargs): return super(ServiceManager, self).create( name=name, @@ -47,6 +49,7 @@ class ServiceManager(base.CrudManager): return super(ServiceManager, self).get( service_id=base.getid(service)) + @utils.positional(enforcement=utils.positional.WARN) def update(self, service, name=None, type=None, enabled=None, **kwargs): return super(ServiceManager, self).update( service_id=base.getid(service), diff --git a/keystoneclient/v3/users.py b/keystoneclient/v3/users.py index f10a0e4eb..70f569714 100644 --- a/keystoneclient/v3/users.py +++ b/keystoneclient/v3/users.py @@ -18,7 +18,7 @@ import logging from keystoneclient import base from keystoneclient import exceptions - +from keystoneclient import utils LOG = logging.getLogger(__name__) @@ -44,6 +44,7 @@ class UserManager(base.CrudManager): msg = 'Specify both a user and a group' raise exceptions.ValidationError(msg) + @utils.positional(1, enforcement=utils.positional.WARN) def create(self, name, domain=None, project=None, password=None, email=None, description=None, enabled=True, default_project=None, **kwargs): @@ -70,6 +71,7 @@ class UserManager(base.CrudManager): enabled=enabled, **kwargs) + @utils.positional(enforcement=utils.positional.WARN) def list(self, project=None, domain=None, group=None, default_project=None, **kwargs): """List users. @@ -106,6 +108,7 @@ class UserManager(base.CrudManager): return super(UserManager, self).get( user_id=base.getid(user)) + @utils.positional(enforcement=utils.positional.WARN) def update(self, user, name=None, domain=None, project=None, password=None, email=None, description=None, enabled=None, default_project=None, **kwargs):