Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-oslo.context for openSUSE:Factory checked in at 2022-06-19 21:11:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-oslo.context (Old) and /work/SRC/openSUSE:Factory/.python-oslo.context.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.context" Sun Jun 19 21:11:44 2022 rev:19 rq:983771 version:4.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-oslo.context/python-oslo.context.changes 2021-10-27 22:21:22.687203964 +0200 +++ /work/SRC/openSUSE:Factory/.python-oslo.context.new.1548/python-oslo.context.changes 2022-06-19 21:12:01.562229835 +0200 @@ -1,0 +2,11 @@ +Tue Jun 7 09:16:22 UTC 2022 - cloud-de...@suse.de + +- update to version 4.1.0 + - Don't test with setuptools local distutils. + - Remove the deprecated argument tenant from RequestContext + - Update master for stable/xena + - Integrate mypy + - Add Python3 yoga unit tests + - Fix context from_dict() for system_scope + +------------------------------------------------------------------- Old: ---- oslo.context-3.3.1.tar.gz New: ---- oslo.context-4.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-oslo.context.spec ++++++ --- /var/tmp/diff_new_pack.IHvXEK/_old 2022-06-19 21:12:01.966230436 +0200 +++ /var/tmp/diff_new_pack.IHvXEK/_new 2022-06-19 21:12:01.974230448 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-oslo.context # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,13 +18,13 @@ %bcond_without test Name: python-oslo.context -Version: 3.3.1 +Version: 4.1.0 Release: 0 Summary: OpenStack Oslo context library License: Apache-2.0 Group: Development/Languages/Python URL: https://docs.openstack.org/oslo.context -Source0: https://files.pythonhosted.org/packages/source/o/oslo.context/oslo.context-3.3.1.tar.gz +Source0: https://files.pythonhosted.org/packages/source/o/oslo.context/oslo.context-4.1.0.tar.gz BuildRequires: openstack-macros BuildRequires: python3-pbr >= 2.0.0 BuildArch: noarch @@ -63,7 +63,7 @@ Documentation for the oslo-context library. %prep -%autosetup -p1 -n oslo.context-3.3.1 +%autosetup -p1 -n oslo.context-4.1.0 %py_req_cleanup %build ++++++ oslo.context-3.3.1.tar.gz -> oslo.context-4.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/.zuul.yaml new/oslo.context-4.1.0/.zuul.yaml --- old/oslo.context-3.3.1/.zuul.yaml 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/.zuul.yaml 2022-02-16 19:48:48.000000000 +0100 @@ -2,7 +2,7 @@ templates: - check-requirements - lib-forward-testing-python3 - - openstack-python3-xena-jobs + - openstack-python3-yoga-jobs - periodic-stable-jobs - publish-openstack-docs-pti - release-notes-jobs-python3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/AUTHORS new/oslo.context-4.1.0/AUTHORS --- old/oslo.context-3.3.1/AUTHORS 2021-08-19 14:38:39.000000000 +0200 +++ new/oslo.context-4.1.0/AUTHORS 2022-02-16 19:49:28.000000000 +0100 @@ -32,6 +32,7 @@ Kirill Bespalov <kbespa...@mirantis.com> Lance Bragstad <lbrags...@gmail.com> Michael Basnight <mbasni...@gmail.com> +Michael Johnson <johnso...@gmail.com> Mois??s Guimar??es de Medeiros <mogui...@redhat.com> Monty Taylor <mord...@inaugust.com> Morgan Fainberg <morgan.fainb...@gmail.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/ChangeLog new/oslo.context-4.1.0/ChangeLog --- old/oslo.context-3.3.1/ChangeLog 2021-08-19 14:38:39.000000000 +0200 +++ new/oslo.context-4.1.0/ChangeLog 2022-02-16 19:49:28.000000000 +0100 @@ -1,6 +1,24 @@ CHANGES ======= +4.1.0 +----- + +* Integrate mypy + +4.0.0 +----- + +* Don't test with setuptools local distutils +* Remove the deprecated argument tenant from RequestContext + +3.4.0 +----- + +* Add Python3 yoga unit tests +* Update master for stable/xena +* Fix context from\_dict() for system\_scope + 3.3.1 ----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/PKG-INFO new/oslo.context-4.1.0/PKG-INFO --- old/oslo.context-3.3.1/PKG-INFO 2021-08-19 14:38:39.219790200 +0200 +++ new/oslo.context-4.1.0/PKG-INFO 2022-02-16 19:49:28.687795000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: oslo.context -Version: 3.3.1 +Version: 4.1.0 Summary: Oslo Context library Home-page: https://docs.openstack.org/oslo.context/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo.context.egg-info/PKG-INFO new/oslo.context-4.1.0/oslo.context.egg-info/PKG-INFO --- old/oslo.context-3.3.1/oslo.context.egg-info/PKG-INFO 2021-08-19 14:38:39.000000000 +0200 +++ new/oslo.context-4.1.0/oslo.context.egg-info/PKG-INFO 2022-02-16 19:49:28.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: oslo.context -Version: 3.3.1 +Version: 4.1.0 Summary: Oslo Context library Home-page: https://docs.openstack.org/oslo.context/latest/ Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo.context.egg-info/SOURCES.txt new/oslo.context-4.1.0/oslo.context.egg-info/SOURCES.txt --- old/oslo.context-3.3.1/oslo.context.egg-info/SOURCES.txt 2021-08-19 14:38:39.000000000 +0200 +++ new/oslo.context-4.1.0/oslo.context.egg-info/SOURCES.txt 2022-02-16 19:49:28.000000000 +0100 @@ -43,9 +43,11 @@ oslo_context/tests/__init__.py oslo_context/tests/test_context.py oslo_context/tests/test_fixture.py +releasenotes/notes/Fix-system-scope-from_dict-29615af90723ba4d.yaml releasenotes/notes/add_reno-3b4ae0789e9c45b4.yaml releasenotes/notes/dont-leak-auth-token-fb7075316cf87b7c.yaml releasenotes/notes/drop-python27-support-b421329839e69d41.yaml +releasenotes/notes/remove_deprecated_args_tenant-77724de1422f46d9.yaml releasenotes/source/conf.py releasenotes/source/index.rst releasenotes/source/newton.rst @@ -59,5 +61,6 @@ releasenotes/source/ussuri.rst releasenotes/source/victoria.rst releasenotes/source/wallaby.rst +releasenotes/source/xena.rst releasenotes/source/_static/.placeholder releasenotes/source/_templates/.placeholder \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo.context.egg-info/pbr.json new/oslo.context-4.1.0/oslo.context.egg-info/pbr.json --- old/oslo.context-3.3.1/oslo.context.egg-info/pbr.json 2021-08-19 14:38:39.000000000 +0200 +++ new/oslo.context-4.1.0/oslo.context.egg-info/pbr.json 2022-02-16 19:49:28.000000000 +0100 @@ -1 +1 @@ -{"git_version": "641a1e0", "is_release": true} \ No newline at end of file +{"git_version": "3400cc2", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo_context/context.py new/oslo.context-4.1.0/oslo_context/context.py --- old/oslo.context-3.3.1/oslo_context/context.py 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/oslo_context/context.py 2022-02-16 19:48:48.000000000 +0100 @@ -30,6 +30,7 @@ import functools import itertools import threading +import typing as ty import uuid import warnings @@ -41,27 +42,21 @@ # These arguments will be passed to a new context from the first available # header to support backwards compatibility. -_ENVIRON_HEADERS = { - 'auth_token': ['HTTP_X_AUTH_TOKEN', - 'HTTP_X_STORAGE_TOKEN'], - 'user_id': ['HTTP_X_USER_ID', - 'HTTP_X_USER'], - 'project_id': ['HTTP_X_PROJECT_ID', - 'HTTP_X_TENANT_ID', - 'HTTP_X_TENANT'], +_ENVIRON_HEADERS: ty.Dict[str, ty.List[str]] = { + 'auth_token': ['HTTP_X_AUTH_TOKEN', 'HTTP_X_STORAGE_TOKEN'], + 'user_id': ['HTTP_X_USER_ID', 'HTTP_X_USER'], + 'project_id': ['HTTP_X_PROJECT_ID', 'HTTP_X_TENANT_ID', 'HTTP_X_TENANT'], 'domain_id': ['HTTP_X_DOMAIN_ID'], 'system_scope': ['HTTP_OPENSTACK_SYSTEM_SCOPE'], 'user_domain_id': ['HTTP_X_USER_DOMAIN_ID'], 'project_domain_id': ['HTTP_X_PROJECT_DOMAIN_ID'], 'user_name': ['HTTP_X_USER_NAME'], - 'project_name': ['HTTP_X_PROJECT_NAME', - 'HTTP_X_TENANT_NAME'], + 'project_name': ['HTTP_X_PROJECT_NAME', 'HTTP_X_TENANT_NAME'], 'user_domain_name': ['HTTP_X_USER_DOMAIN_NAME'], 'project_domain_name': ['HTTP_X_PROJECT_DOMAIN_NAME'], 'request_id': ['openstack.request_id'], 'global_request_id': ['openstack.global_request_id'], - 'service_token': ['HTTP_X_SERVICE_TOKEN'], 'service_user_id': ['HTTP_X_SERVICE_USER_ID'], 'service_user_name': ['HTTP_X_SERVICE_USER_NAME'], @@ -74,7 +69,7 @@ } -def generate_request_id(): +def generate_request_id() -> str: """Generate a unique request id.""" return 'req-%s' % uuid.uuid4() @@ -87,11 +82,11 @@ these values as oslo.policy will do will trigger a DeprecationWarning. """ - def __init__(self, data): + def __init__(self, data: ty.Dict[str, ty.Any]): self._data = data - self._deprecated = {} + self._deprecated: ty.Dict[str, ty.Any] = {} - def __getitem__(self, k): + def __getitem__(self, k: str) -> ty.Any: try: return self._data[k] except KeyError: @@ -110,32 +105,33 @@ raise KeyError(k) - def __setitem__(self, k, v): + def __setitem__(self, k: str, v: ty.Any) -> None: self._deprecated[k] = v - def __delitem__(self, k): + def __delitem__(self, k: str) -> None: del self._deprecated[k] - def __iter__(self): + def __iter__(self) -> ty.Iterator[ty.Any]: return iter(self._dict) - def __len__(self): + def __len__(self) -> int: return len(self._dict) - def __str__(self): + def __str__(self) -> str: return self._dict.__str__() - def __repr__(self): + def __repr__(self) -> str: return self._dict.__repr__() @property - def _dict(self): + def _dict(self) -> ty.Dict[str, ty.Any]: d = self._deprecated.copy() d.update(self._data) return d -def _moved_msg(new_name, old_name): +# TODO(stephenfin): Remove this in the 4.0 release +def _moved_msg(new_name: str, old_name: ty.Optional[str]) -> None: if old_name: deprecated_msg = "Property '%(old_name)s' has moved to '%(new_name)s'" deprecated_msg = deprecated_msg % {'old_name': old_name, @@ -147,22 +143,23 @@ stacklevel=5) -def _moved_property(new_name, old_name=None, target=None): - - if not target: - target = new_name +def _moved_property( + new_name: str, + old_name: ty.Optional[str] = None, + target: ty.Optional[str] = None, +) -> ty.Any: - def getter(self): + def getter(self: ty.Any) -> ty.Any: _moved_msg(new_name, old_name) - return getattr(self, target) + return getattr(self, target or new_name) - def setter(self, value): + def setter(self: ty.Any, value: str) -> None: _moved_msg(new_name, old_name) - setattr(self, target, value) + setattr(self, target or new_name, value) - def deleter(self): + def deleter(self: ty.Any) -> None: _moved_msg(new_name, old_name) - delattr(self, target) + delattr(self, target or new_name) return property(getter, setter, deleter) @@ -181,48 +178,49 @@ accesses the system, as well as additional request information. """ - user_idt_format = u'{user} {tenant} {domain} {user_domain} {p_domain}' + user_idt_format = '{user} {project_id} {domain} {user_domain} {p_domain}' # Can be overridden in subclasses to specify extra keys that should be # read when constructing a context using from_dict. - FROM_DICT_EXTRA_KEYS = [] + FROM_DICT_EXTRA_KEYS: ty.List[str] = [] @_renamed_kwarg('user', 'user_id') - @_renamed_kwarg('tenant', 'project_id') @_renamed_kwarg('domain', 'domain_id') @_renamed_kwarg('user_domain', 'user_domain_id') @_renamed_kwarg('project_domain', 'project_domain_id') - def __init__(self, - auth_token=None, - user_id=None, - project_id=None, - domain_id=None, - user_domain_id=None, - project_domain_id=None, - is_admin=False, - read_only=False, - show_deleted=False, - request_id=None, - resource_uuid=None, - overwrite=True, - roles=None, - user_name=None, - project_name=None, - domain_name=None, - user_domain_name=None, - project_domain_name=None, - is_admin_project=True, - service_token=None, - service_user_id=None, - service_user_name=None, - service_user_domain_id=None, - service_user_domain_name=None, - service_project_id=None, - service_project_name=None, - service_project_domain_id=None, - service_project_domain_name=None, - service_roles=None, - global_request_id=None, - system_scope=None): + def __init__( + self, + auth_token: ty.Optional[str] = None, + user_id: ty.Optional[str] = None, + project_id: ty.Optional[str] = None, + domain_id: ty.Optional[str] = None, + user_domain_id: ty.Optional[str] = None, + project_domain_id: ty.Optional[str] = None, + is_admin: bool = False, + read_only: bool = False, + show_deleted: bool = False, + request_id: ty.Optional[str] = None, + resource_uuid: ty.Optional[str] = None, + overwrite: bool = True, + roles: ty.Optional[ty.List[str]] = None, + user_name: ty.Optional[str] = None, + project_name: ty.Optional[str] = None, + domain_name: ty.Optional[str] = None, + user_domain_name: ty.Optional[str] = None, + project_domain_name: ty.Optional[str] = None, + is_admin_project: bool = True, + service_token: ty.Optional[str] = None, + service_user_id: ty.Optional[str] = None, + service_user_name: ty.Optional[str] = None, + service_user_domain_id: ty.Optional[str] = None, + service_user_domain_name: ty.Optional[str] = None, + service_project_id: ty.Optional[str] = None, + service_project_name: ty.Optional[str] = None, + service_project_domain_id: ty.Optional[str] = None, + service_project_domain_name: ty.Optional[str] = None, + service_roles: ty.Optional[ty.List[str]] = None, + global_request_id: ty.Optional[str] = None, + system_scope: ty.Optional[str] = None, + ): """Initialize the RequestContext :param overwrite: Set to False to ensure that the greenthread local @@ -277,17 +275,14 @@ self.update_store() # NOTE(jamielennox): To prevent circular lookups on subclasses that might - # point user to user_id we make user/user_id tenant/project_id etc point + # point user to user_id we make user/user_id etc point # to the same private variable rather than each other. - tenant = _moved_property('project_id', 'tenant', target='_project_id') user = _moved_property('user_id', 'user', target='_user_id') domain = _moved_property('domain_id', 'domain', target='_domain_id') - user_domain = _moved_property('user_domain_id', - 'user_domain', - target='_user_domain_id') - project_domain = _moved_property('project_domain_id', - 'project_domain', - target='_project_domain_id') + user_domain = _moved_property( + 'user_domain_id', 'user_domain', target='_user_domain_id') + project_domain = _moved_property( + 'project_domain_id', 'project_domain', target='_project_domain_id') user_id = _moved_property('_user_id') project_id = _moved_property('_project_id') @@ -295,11 +290,11 @@ user_domain_id = _moved_property('_user_domain_id') project_domain_id = _moved_property('_project_domain_id') - def update_store(self): + def update_store(self) -> None: """Store the context in the current thread.""" _request_store.context = self - def to_policy_values(self): + def to_policy_values(self) -> _DeprecatedPolicyValues: """A dictionary of context attributes to enforce policy with. oslo.policy enforcement requires a dictionary of attributes @@ -328,19 +323,21 @@ 'service_user_domain_id': self.service_user_domain_id, 'service_project_id': self.service_project_id, 'service_project_domain_id': self.service_project_domain_id, - 'service_roles': self.service_roles}) + 'service_roles': self.service_roles, + }) - def to_dict(self): + def to_dict(self) -> ty.Dict[str, ty.Any]: """Return a dictionary of context attributes.""" user_idt = self.user_idt_format.format( user=self.user_id or '-', - tenant=self.project_id or '-', + project_id=self.project_id or '-', domain=self.domain_id or '-', user_domain=self.user_domain_id or '-', - p_domain=self.project_domain_id or '-') + p_domain=self.project_domain_id or '-', + ) return {'user': self.user_id, - 'tenant': self.project_id, + 'project_id': self.project_id, 'system_scope': self.system_scope, 'project': self.project_id, 'domain': self.domain_id, @@ -357,7 +354,7 @@ 'user_identity': user_idt, 'is_admin_project': self.is_admin_project} - def get_logging_values(self): + def get_logging_values(self) -> ty.Dict[str, ty.Any]: """Return a dictionary of logging specific context attributes.""" values = {'user_name': self.user_name, 'project_name': self.project_name, @@ -381,7 +378,7 @@ return values @property - def global_id(self): + def global_id(self) -> str: """Return a sensible value for global_id to pass on. When we want to make a call with to another service, it's @@ -392,15 +389,16 @@ @classmethod @_renamed_kwarg('user', 'user_id') - @_renamed_kwarg('tenant', 'project_id') @_renamed_kwarg('domain', 'domain_id') @_renamed_kwarg('user_domain', 'user_domain_id') @_renamed_kwarg('project_domain', 'project_domain_id') - def from_dict(cls, values, **kwargs): + def from_dict( + cls, values: ty.Dict[str, ty.Any], **kwargs: ty.Any, + ) -> 'RequestContext': """Construct a context object from a provided dictionary.""" kwargs.setdefault('auth_token', values.get('auth_token')) kwargs.setdefault('user_id', values.get('user')) - kwargs.setdefault('project_id', values.get('tenant')) + kwargs.setdefault('project_id', values.get('project_id')) kwargs.setdefault('domain_id', values.get('domain')) kwargs.setdefault('user_domain_id', values.get('user_domain')) kwargs.setdefault('project_domain_id', values.get('project_domain')) @@ -419,17 +417,19 @@ values.get('project_domain_name')) kwargs.setdefault('is_admin_project', values.get('is_admin_project', True)) + kwargs.setdefault('system_scope', values.get('system_scope')) for key in cls.FROM_DICT_EXTRA_KEYS: kwargs.setdefault(key, values.get(key)) return cls(**kwargs) @classmethod @_renamed_kwarg('user', 'user_id') - @_renamed_kwarg('tenant', 'project_id') @_renamed_kwarg('domain', 'domain_id') @_renamed_kwarg('user_domain', 'user_domain_id') @_renamed_kwarg('project_domain', 'project_domain_id') - def from_environ(cls, environ, **kwargs): + def from_environ( + cls, environ: ty.Dict[str, ty.Any], **kwargs: ty.Any, + ) -> 'RequestContext': """Load a context object from a request environment. If keyword arguments are provided then they override the values in the @@ -472,7 +472,7 @@ return cls(**kwargs) -def get_admin_context(show_deleted=False): +def get_admin_context(show_deleted: bool = False) -> RequestContext: """Create an administrator context.""" context = RequestContext(None, project_id=None, @@ -482,13 +482,16 @@ return context -def get_context_from_function_and_args(function, args, kwargs): +def get_context_from_function_and_args( + function: ty.Callable, + args: ty.List[ty.Any], + kwargs: ty.Dict[str, ty.Any], +) -> ty.Optional[RequestContext]: """Find an arg of type RequestContext and return it. - This is useful in a couple of decorators where we don't - know much about the function we're wrapping. + This is useful in a couple of decorators where we don't know much about the + function we're wrapping. """ - for arg in itertools.chain(kwargs.values(), args): if isinstance(arg, RequestContext): return arg @@ -496,7 +499,7 @@ return None -def is_user_context(context): +def is_user_context(context: RequestContext) -> bool: """Indicates if the request context is a normal user.""" if not context or not isinstance(context, RequestContext): return False @@ -505,7 +508,7 @@ return True -def get_current(): +def get_current() -> ty.Optional[RequestContext]: """Return this thread's current context If no context is set, returns None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo_context/fixture.py new/oslo.context-4.1.0/oslo_context/fixture.py --- old/oslo.context-3.3.1/oslo_context/fixture.py 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/oslo_context/fixture.py 2022-02-16 19:48:48.000000000 +0100 @@ -24,7 +24,7 @@ run later in the same process. """ - def setUp(self): + def setUp(self) -> None: super(ClearRequestContext, self).setUp() # we need to clear both when we start, and when we finish, # because there might be other tests running that don't handle @@ -32,7 +32,7 @@ self._remove_cached_context() self.addCleanup(self._remove_cached_context) - def _remove_cached_context(self): + def _remove_cached_context(self) -> None: """Remove the thread-local context stored in the module.""" try: del context._request_store.context diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo_context/tests/test_context.py new/oslo.context-4.1.0/oslo_context/tests/test_context.py --- old/oslo.context-3.3.1/oslo_context/tests/test_context.py 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/oslo_context/tests/test_context.py 2022-02-16 19:48:48.000000000 +0100 @@ -129,7 +129,7 @@ "auth_token": "token1", "user": "user1", "user_name": "user1_name", - "tenant": "tenant1", + "project_id": "tenant1", "project_name": "tenant1_name", "domain": "domain1", "domain_name": "domain1_name", @@ -143,12 +143,13 @@ "request_id": "request1", "global_request_id": "req-uuid", "resource_uuid": "instance1", - "extra_data": "foo" + "extra_data": "foo", + "system_scope": "all" } ctx = context.RequestContext.from_dict(dct) self.assertEqual(dct['auth_token'], ctx.auth_token) self.assertEqual(dct['user'], ctx.user_id) - self.assertEqual(dct['tenant'], ctx.project_id) + self.assertEqual(dct['project_id'], ctx.project_id) self.assertEqual(dct['domain'], ctx.domain_id) self.assertEqual(dct['user_domain'], ctx.user_domain_id) self.assertEqual(dct['project_domain'], ctx.project_domain_id) @@ -163,6 +164,7 @@ self.assertEqual(dct['domain_name'], ctx.domain_name) self.assertEqual(dct['user_domain_name'], ctx.user_domain_name) self.assertEqual(dct['project_domain_name'], ctx.project_domain_name) + self.assertEqual(dct['system_scope'], ctx.system_scope) def test_from_dict_unknown_keys(self): dct = { @@ -196,7 +198,7 @@ self.assertEqual("token1", ctx.auth_token) self.assertEqual("user2", ctx.user) self.assertEqual("project1", ctx.project_name) - self.assertIsNone(ctx.tenant) + self.assertIsNone(ctx.project_id) self.assertFalse(ctx.is_admin) self.assertTrue(ctx.read_only) @@ -320,7 +322,7 @@ environ = {'HTTP_X_TENANT': value} ctx = context.RequestContext.from_environ(environ=environ) - self.assertEqual(value, ctx.tenant) + self.assertEqual(value, ctx.project_id) environ = {'HTTP_X_ROLE': value} ctx = context.RequestContext.from_environ(environ=environ) @@ -352,7 +354,7 @@ self.assertEqual(new, ctx.project_id) ctx = context.RequestContext.from_environ(environ=environ, - tenant=override) + project_id=override) self.assertEqual(override, ctx.project_id) environ = {'HTTP_X_TENANT_NAME': old, @@ -422,7 +424,7 @@ ctx = context.RequestContext(auth_token=auth_token, user=user_id, user_name=user_name, - tenant=project_id, + project_id=project_id, project_name=project_name, domain=domain_id, domain_name=domain_name, @@ -456,7 +458,7 @@ d = ctx.to_dict() self.assertIn('auth_token', d) self.assertIn('user', d) - self.assertIn('tenant', d) + self.assertIn('project_id', d) self.assertIn('domain', d) self.assertIn('user_domain', d) self.assertIn('project_domain', d) @@ -474,7 +476,7 @@ self.assertNotIn('project_domain_name', d) self.assertEqual(auth_token, d['auth_token']) - self.assertEqual(project_id, d['tenant']) + self.assertEqual(project_id, d['project_id']) self.assertEqual(domain_id, d['domain']) self.assertEqual(user_domain_id, d['user_domain']) self.assertEqual(project_domain_id, d['project_domain']) @@ -492,7 +494,7 @@ self.assertIn('auth_token', d) self.assertEqual(d['auth_token'], '***') self.assertIn('user', d) - self.assertIn('tenant', d) + self.assertIn('project_id', d) self.assertIn('domain', d) self.assertIn('user_domain', d) self.assertIn('project_domain', d) @@ -544,7 +546,7 @@ def test_policy_dict(self): user = uuid.uuid4().hex user_domain = uuid.uuid4().hex - tenant = uuid.uuid4().hex + project_id = uuid.uuid4().hex project_domain = uuid.uuid4().hex roles = [uuid.uuid4().hex, uuid.uuid4().hex, uuid.uuid4().hex] service_user_id = uuid.uuid4().hex @@ -554,7 +556,7 @@ # default is_admin_project is True ctx = context.RequestContext(user=user, user_domain=user_domain, - tenant=tenant, + project_id=project_id, project_domain=project_domain, roles=roles, service_user_id=service_user_id, @@ -565,7 +567,7 @@ 'user_domain_id': user_domain, 'system_scope': None, 'domain_id': None, - 'project_id': tenant, + 'project_id': project_id, 'project_domain_id': project_domain, 'roles': roles, 'is_admin_project': True, @@ -630,7 +632,7 @@ ctx = context.RequestContext(user=user, user_domain=user_domain, - tenant=tenant, + project_id=project_id, project_domain=project_domain, roles=roles, is_admin_project=False, @@ -642,7 +644,7 @@ 'user_domain_id': user_domain, 'system_scope': None, 'domain_id': None, - 'project_id': tenant, + 'project_id': project_id, 'project_domain_id': project_domain, 'roles': roles, 'is_admin_project': False, @@ -656,13 +658,13 @@ def test_policy_deprecations(self): user = uuid.uuid4().hex user_domain = uuid.uuid4().hex - tenant = uuid.uuid4().hex + project_id = uuid.uuid4().hex project_domain = uuid.uuid4().hex roles = [uuid.uuid4().hex, uuid.uuid4().hex, uuid.uuid4().hex] ctx = context.RequestContext(user=user, user_domain=user_domain, - tenant=tenant, + project_id=project_id, project_domain=project_domain, roles=roles) @@ -705,11 +707,9 @@ self.assertEqual(0, len(self.warnings)) self.assertEqual(user_id, ctx.user) self.assertEqual(1, len(self.warnings)) - self.assertEqual(project_id, ctx.tenant) - self.assertEqual(2, len(self.warnings)) self.assertEqual(domain_id, ctx.domain) - self.assertEqual(3, len(self.warnings)) + self.assertEqual(2, len(self.warnings)) self.assertEqual(user_domain_id, ctx.user_domain) - self.assertEqual(4, len(self.warnings)) + self.assertEqual(3, len(self.warnings)) self.assertEqual(project_domain_id, ctx.project_domain) - self.assertEqual(5, len(self.warnings)) + self.assertEqual(4, len(self.warnings)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/oslo_context/version.py new/oslo.context-4.1.0/oslo_context/version.py --- old/oslo.context-3.3.1/oslo_context/version.py 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/oslo_context/version.py 2022-02-16 19:48:48.000000000 +0100 @@ -12,7 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. - import pbr.version version_info = pbr.version.VersionInfo('oslo.context') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/releasenotes/notes/Fix-system-scope-from_dict-29615af90723ba4d.yaml new/oslo.context-4.1.0/releasenotes/notes/Fix-system-scope-from_dict-29615af90723ba4d.yaml --- old/oslo.context-3.3.1/releasenotes/notes/Fix-system-scope-from_dict-29615af90723ba4d.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.context-4.1.0/releasenotes/notes/Fix-system-scope-from_dict-29615af90723ba4d.yaml 2022-02-16 19:48:48.000000000 +0100 @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixes context from_dict() to properly handle system_scope. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/releasenotes/notes/remove_deprecated_args_tenant-77724de1422f46d9.yaml new/oslo.context-4.1.0/releasenotes/notes/remove_deprecated_args_tenant-77724de1422f46d9.yaml --- old/oslo.context-3.3.1/releasenotes/notes/remove_deprecated_args_tenant-77724de1422f46d9.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.context-4.1.0/releasenotes/notes/remove_deprecated_args_tenant-77724de1422f46d9.yaml 2022-02-16 19:48:48.000000000 +0100 @@ -0,0 +1,5 @@ +--- +upgrade: + - | + The ``tenant`` argument of ``RequestContext`` that was deprecated for + long time is now removed. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/releasenotes/source/index.rst new/oslo.context-4.1.0/releasenotes/source/index.rst --- old/oslo.context-3.3.1/releasenotes/source/index.rst 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/releasenotes/source/index.rst 2022-02-16 19:48:48.000000000 +0100 @@ -6,6 +6,7 @@ :maxdepth: 1 unreleased + xena wallaby victoria ussuri diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/releasenotes/source/xena.rst new/oslo.context-4.1.0/releasenotes/source/xena.rst --- old/oslo.context-3.3.1/releasenotes/source/xena.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/oslo.context-4.1.0/releasenotes/source/xena.rst 2022-02-16 19:48:48.000000000 +0100 @@ -0,0 +1,6 @@ +========================= +Xena Series Release Notes +========================= + +.. release-notes:: + :branch: stable/xena diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/setup.cfg new/oslo.context-4.1.0/setup.cfg --- old/oslo.context-3.3.1/setup.cfg 2021-08-19 14:38:39.219790200 +0200 +++ new/oslo.context-4.1.0/setup.cfg 2022-02-16 19:49:28.691795000 +0100 @@ -25,6 +25,17 @@ packages = oslo_context +[mypy] +show_column_numbers = true +show_error_context = true +ignore_missing_imports = true +check_untyped_defs = true +warn_unused_ignores = true +disallow_untyped_defs = true + +[mypy-oslo_context.tests.*] +ignore_errors = true + [egg_info] tag_build = tag_date = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/test-requirements.txt new/oslo.context-4.1.0/test-requirements.txt --- old/oslo.context-3.3.1/test-requirements.txt 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/test-requirements.txt 2022-02-16 19:48:48.000000000 +0100 @@ -3,6 +3,7 @@ # process, which may cause wedges in the gate later. hacking>=3.0.1,<3.1.0 # Apache-2.0 +mypy>=0.761 # MIT fixtures>=3.0.0 # Apache-2.0/BSD oslotest>=3.2.0 # Apache-2.0 coverage!=4.4,>=4.0 # Apache-2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/oslo.context-3.3.1/tox.ini new/oslo.context-4.1.0/tox.ini --- old/oslo.context-3.3.1/tox.ini 2021-08-19 14:36:52.000000000 +0200 +++ new/oslo.context-4.1.0/tox.ini 2022-02-16 19:48:48.000000000 +0100 @@ -5,32 +5,48 @@ [testenv] basepython = python3 +# TODO(damani): Drop distutils override once logging improves in setuptools +# https://github.com/pypa/setuptools/issues/3038 +setenv = + SETUPTOOLS_USE_DISTUTILS=stdlib deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/test-requirements.txt commands = stestr run --slowest {posargs} +[testenv:mypy] +description = + Run type checks. +envdir = {toxworkdir}/shared +commands = + python -m mypy {posargs:.} + [testenv:pep8] -deps = {[testenv]deps} +envdir = {toxworkdir}/shared commands = pre-commit run -a # Run security linter bandit -r oslo_context -x tests -n5 [testenv:venv] +envdir = {toxworkdir}/shared commands = {posargs} [testenv:docs] -whitelist_externals = rm deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/doc/requirements.txt +whitelist_externals = rm commands = rm -fr doc/build sphinx-build -W --keep-going -b html doc/source doc/build/html [testenv:cover] +# TODO(damani): Drop distutils override once logging improves in setuptools +# https://github.com/pypa/setuptools/issues/3038 +envdir = {toxworkdir}/shared setenv = + SETUPTOOLS_USE_DISTUTILS=stdlib PYTHON=coverage run --source oslo_context --parallel-mode commands = stestr run {posargs} @@ -48,6 +64,7 @@ import_exceptions = [testenv:releasenotes] +envdir = {toxworkdir}/docs whitelist_externals = rm deps = {[testenv:docs]deps} commands =