From 1f2bdd16580bf1f19f6bbdbefa322af7fe6842d1 Mon Sep 17 00:00:00 2001 From: jssuzanne Date: Thu, 15 Apr 2021 14:16:37 +0200 Subject: [PATCH] Upgrade Pyramid >= 2.0 and AnyBlok >= 1.1.0 (#36) * Updated travis configuration + fixed version * Fixed some import * Fixed some warnings --- .travis.yml | 17 ++++++++-------- anyblok_pyramid/anyblok.py | 7 ++++--- anyblok_pyramid/bloks/auth/user.py | 14 ++++++------- .../bloks/authorization/authorization.py | 20 +++++++++---------- anyblok_pyramid/bloks/authorization/query.py | 2 +- .../bloks/authorization/tests/test_get_acl.py | 2 +- anyblok_pyramid/bloks/password/user.py | 2 +- anyblok_pyramid/bloks/pyramid/model.py | 6 +++--- anyblok_pyramid/security.py | 2 +- anyblok_pyramid/test_bloks/test2/__init__.py | 8 ++++---- anyblok_pyramid/test_bloks/test2/models.py | 4 ++-- setup.py | 4 ++-- 12 files changed, 45 insertions(+), 43 deletions(-) diff --git a/.travis.yml b/.travis.yml index 416bd73..7f35e5f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,13 @@ python: - "3.6" - "3.7" - "3.8" - - "3.9-dev" + - "3.9" + - "3.10-dev" - "nightly" matrix: allow_failures: - - python: "3.9-dev" + - python: "3.10-dev" - python: "nightly" virtualenv: @@ -34,18 +35,18 @@ env: script: - flake8 anyblok_pyramid - psql -c 'create database travis_ci_test;' -U postgres - - pytest --cov-report= --cov=anyblok_pyramid anyblok_pyramid/tests + - pytest --cov=anyblok_pyramid anyblok_pyramid/tests - psql -c 'drop database travis_ci_test;' -U postgres - anyblok_createdb --install-bloks auth - - pytest --cov-report= --cov=anyblok_pyramid anyblok_pyramid/bloks/auth + - pytest --cov-append --cov=anyblok_pyramid anyblok_pyramid/bloks/auth - psql -c 'drop database travis_ci_test;' -U postgres - anyblok_createdb --install-bloks auth-password - - pytest --cov-report= --cov=anyblok_pyramid anyblok_pyramid/bloks/password + - pytest --cov-append --cov=anyblok_pyramid anyblok_pyramid/bloks/password - psql -c 'drop database travis_ci_test;' -U postgres - anyblok_createdb --install-bloks authorization - - pytest --cov-report= --cov=anyblok_pyramid anyblok_pyramid/bloks/authorization + - pytest --cov-append --cov=anyblok_pyramid anyblok_pyramid/bloks/authorization - psql -c 'drop database travis_ci_test;' -U postgres - anyblok_createdb --install-bloks user-identity - - pytest --cov-report= --cov=anyblok_pyramid anyblok_pyramid/bloks/user_identity + - pytest --cov-append --cov=anyblok_pyramid anyblok_pyramid/bloks/user_identity -after_success: coveralls --data_file=.coverage --config_file=.coveragerc +after_success: coveralls diff --git a/anyblok_pyramid/anyblok.py b/anyblok_pyramid/anyblok.py index 122d6c4..6ee5151 100644 --- a/anyblok_pyramid/anyblok.py +++ b/anyblok_pyramid/anyblok.py @@ -183,9 +183,10 @@ def after_bulk_delete(self, session, query, query_context, result): mark_changed(session, self.transaction_manager, self.keep_session) def before_commit(self, session): - assert (session.transaction.nested or # noqa - self.transaction_manager.get().status == ZopeStatus.COMMITTING, - "Transaction must be committed using the transaction manager") + assert ( + session.transaction.nested or # noqa + self.transaction_manager.get().status == ZopeStatus.COMMITTING + ), "Transaction must be committed using the transaction manager" def register(session, initial_state=STATUS_ACTIVE, diff --git a/anyblok_pyramid/bloks/auth/user.py b/anyblok_pyramid/bloks/auth/user.py index 093830c..57c7152 100644 --- a/anyblok_pyramid/bloks/auth/user.py +++ b/anyblok_pyramid/bloks/auth/user.py @@ -9,7 +9,7 @@ from pyramid.httpexceptions import HTTPUnauthorized from anyblok import Declarations from anyblok.column import String -from pyramid.security import Allow, ALL_PERMISSIONS +from pyramid.authorization import Allow, ALL_PERMISSIONS @Declarations.register(Declarations.Model) @@ -22,7 +22,7 @@ def get_roles(cls, login): :param login: str, login attribute of the user :rtype: list of str (name of the roles) """ - return cls.registry.Pyramid.User.get_roles(login) + return cls.anyblok.Pyramid.User.get_roles(login) @classmethod def get_acl(cls, login, resource, params=None): @@ -38,7 +38,7 @@ def get_acl(cls, login, resource, params=None): :param resource: str, name of a resource :param params: all options need to compute ACL """ - return cls.registry.Pyramid.User.get_acl( + return cls.anyblok.Pyramid.User.get_acl( login, resource, params=params) @classmethod @@ -53,7 +53,7 @@ def check_acl(cls, login, resource, type_): :param type: str, name of the action :param params: all options need to compute ACL """ - return cls.registry.Pyramid.User.check_acl( + return cls.anyblok.Pyramid.User.check_acl( login, resource, type_) @classmethod @@ -70,11 +70,11 @@ def check_login(cls, **kwargs): :param kwargs: any options need to validate credential """ - return cls.registry.Pyramid.User.check_login(**kwargs) + return cls.anyblok.Pyramid.User.check_login(**kwargs) @classmethod def check_user_exists(cls, login): - user = cls.registry.Pyramid.User.query().get(login) + user = cls.anyblok.Pyramid.User.query().get(login) if user is None: raise KeyError(f"{login} is not a valid login") @@ -88,7 +88,7 @@ def get_user(cls, user_id): invalidation in case of user modification that could impact restricted query by user id """ - return cls.registry.Pyramid.User.query().get(user_id) + return cls.anyblok.Pyramid.User.query().get(user_id) @Declarations.register(Declarations.Model.Pyramid) diff --git a/anyblok_pyramid/bloks/authorization/authorization.py b/anyblok_pyramid/bloks/authorization/authorization.py index b3e783d..e538efb 100644 --- a/anyblok_pyramid/bloks/authorization/authorization.py +++ b/anyblok_pyramid/bloks/authorization/authorization.py @@ -11,7 +11,7 @@ from anyblok.relationship import Many2One from anyblok.field import JsonRelated from .exceptions import AuthorizationValidationException -from pyramid.security import Allow, Deny, ALL_PERMISSIONS +from pyramid.authorization import Allow, Deny, ALL_PERMISSIONS from sqlalchemy import or_ @@ -52,8 +52,8 @@ class Authorization: def get_acl_filter_model(cls): """Return the Model to use to check the permission""" return { - 'User': cls.registry.Pyramid.User, - 'Role': cls.registry.Pyramid.Role, + 'User': cls.anyblok.Pyramid.User, + 'Role': cls.anyblok.Pyramid.Role, } @classmethod @@ -64,8 +64,8 @@ def get_acl(cls, login, resource, params=None): :param resource: str, name of the resource """ # cache the method - User = cls.registry.Pyramid.User - Role = cls.registry.Pyramid.Role + User = cls.anyblok.Pyramid.User + Role = cls.anyblok.Pyramid.Role query = cls.query() query = query.filter( @@ -123,8 +123,8 @@ def check_acl(cls, login, resource, type_): :param type: str, name of the action """ # cache the method - User = cls.registry.Pyramid.User - Role = cls.registry.Pyramid.Role + User = cls.anyblok.Pyramid.User + Role = cls.anyblok.Pyramid.Role query = cls.query() query = query.filter( @@ -206,14 +206,14 @@ def ensure_exists( # pv: at some point adding index on this criteria may boost things # while setting authorizations authz = ( - cls.registry.Pyramid.Authorization.query() + cls.anyblok.Pyramid.Authorization.query() .filter_by( code=code, ) .one_or_none() ) if not authz: - authz = cls.registry.Pyramid.Authorization.insert( + authz = cls.anyblok.Pyramid.Authorization.insert( code=code, **kwargs ) else: @@ -274,7 +274,7 @@ def ensure_exists( default: capitalized name. :return: Created or updated role """ - Pyramid = cls.registry.Pyramid + Pyramid = cls.anyblok.Pyramid role = Pyramid.Role.query().get(name) if not role: if not label: diff --git a/anyblok_pyramid/bloks/authorization/query.py b/anyblok_pyramid/bloks/authorization/query.py index 8114381..a35eef9 100644 --- a/anyblok_pyramid/bloks/authorization/query.py +++ b/anyblok_pyramid/bloks/authorization/query.py @@ -63,7 +63,7 @@ def get_value_for_relationship(query, entry, keys): return query, res if hasattr(entry, '__registry_name__'): - Model = query.registry.get(entry.__registry_name__) + Model = query.anyblok.get(entry.__registry_name__) if entry is Model: query = query.join(res) diff --git a/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py b/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py index 73265d4..7c72ed7 100644 --- a/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py +++ b/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py @@ -6,7 +6,7 @@ # v. 2.0. If a copy of the MPL was not distributed with this file,You can # obtain one at http://mozilla.org/MPL/2.0/. import pytest -from pyramid.security import Allow, Deny, ALL_PERMISSIONS +from pyramid.authorization import Allow, Deny, ALL_PERMISSIONS @pytest.mark.usefixtures('rollback_registry') diff --git a/anyblok_pyramid/bloks/password/user.py b/anyblok_pyramid/bloks/password/user.py index cce07c2..58f280e 100644 --- a/anyblok_pyramid/bloks/password/user.py +++ b/anyblok_pyramid/bloks/password/user.py @@ -34,7 +34,7 @@ def check_login(cls, login=None, password=None, **kwargs): :param password: str :exception: HTTPUnauthorized """ - Credential = cls.registry.Pyramid.CredentialStore + Credential = cls.anyblok.Pyramid.CredentialStore credential = Credential.query().filter( Credential.login == login ).one_or_none() diff --git a/anyblok_pyramid/bloks/pyramid/model.py b/anyblok_pyramid/bloks/pyramid/model.py index 0f96115..527f1ae 100644 --- a/anyblok_pyramid/bloks/pyramid/model.py +++ b/anyblok_pyramid/bloks/pyramid/model.py @@ -8,7 +8,7 @@ # obtain one at http://mozilla.org/MPL/2.0/. from pyramid.httpexceptions import HTTPUnauthorized from anyblok import Declarations -from pyramid.security import Allow, ALL_PERMISSIONS +from pyramid.authorization import Allow, ALL_PERMISSIONS @Declarations.register(Declarations.Model) @@ -125,12 +125,12 @@ def restrict_query_by_user( have to manage or mind to cache invalidation while using this method. """ - for method in cls.registry.restrict_query_by_user_methods.get( + for method in cls.anyblok.restrict_query_by_user_methods.get( query.Model, [] ): query = getattr( - cls.registry.get(query.Model), method + cls.anyblok.get(query.Model), method )(query, cls.get_user(user_code)) return query diff --git a/anyblok_pyramid/security.py b/anyblok_pyramid/security.py index cea0cbf..77c9065 100644 --- a/anyblok_pyramid/security.py +++ b/anyblok_pyramid/security.py @@ -6,7 +6,7 @@ # v. 2.0. If a copy of the MPL was not distributed with this file,You can # obtain one at http://mozilla.org/MPL/2.0/. from pyramid.httpexceptions import HTTPUnauthorized -from pyramid.security import Deny, Everyone, ALL_PERMISSIONS +from pyramid.authorization import Deny, Everyone, ALL_PERMISSIONS def group_finder(userid, request): diff --git a/anyblok_pyramid/test_bloks/test2/__init__.py b/anyblok_pyramid/test_bloks/test2/__init__.py index 2dc6db8..f42b47d 100644 --- a/anyblok_pyramid/test_bloks/test2/__init__.py +++ b/anyblok_pyramid/test_bloks/test2/__init__.py @@ -64,7 +64,7 @@ def pyramid_load_config(cls, config): def update(self, latest): if not latest: - self.registry.Pyramid.User.insert(login="admin") - self.registry.Pyramid.User.insert(login="viewer") - self.registry.Pyramid.User.insert(login="user@anyblok.org") - self.registry.Pyramid.User.insert(login="user2@anyblok.org") + self.anyblok.Pyramid.User.insert(login="admin") + self.anyblok.Pyramid.User.insert(login="viewer") + self.anyblok.Pyramid.User.insert(login="user@anyblok.org") + self.anyblok.Pyramid.User.insert(login="user2@anyblok.org") diff --git a/anyblok_pyramid/test_bloks/test2/models.py b/anyblok_pyramid/test_bloks/test2/models.py index f47af2b..3acf0e0 100644 --- a/anyblok_pyramid/test_bloks/test2/models.py +++ b/anyblok_pyramid/test_bloks/test2/models.py @@ -7,7 +7,7 @@ # v. 2.0. If a copy of the MPL was not distributed with this file,You can # obtain one at http://mozilla.org/MPL/2.0/. from anyblok import Declarations -from pyramid.security import Allow, Authenticated +from pyramid.authorization import Allow, Authenticated from anyblok_pyramid.bloks.pyramid.restrict import restrict_query_by_user @@ -16,7 +16,7 @@ class User: @classmethod def check_login(cls, login=None, password=None): - return cls.registry.Pyramid.User.query().get(login) + return cls.anyblok.Pyramid.User.query().get(login) @classmethod def get_acl(cls, login, resource, **params): diff --git a/setup.py b/setup.py index 51ba428..6848c5b 100644 --- a/setup.py +++ b/setup.py @@ -12,8 +12,8 @@ version = '1.2.0' requires = [ - 'anyblok>=0.9.0', - 'pyramid', + 'anyblok>=1.1.0', + 'pyramid>=2.0.0', 'pyramid_tm', 'zope.sqlalchemy', 'passlib',