From f4a8731a42411c6bee31dec5220d206028e3b64f Mon Sep 17 00:00:00 2001 From: jssuzanne Date: Mon, 3 May 2021 14:47:43 +0200 Subject: [PATCH 1/4] Fixed pyramid version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 51ba428..24df246 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ requires = [ 'anyblok>=0.9.0', - 'pyramid', + 'pyramid<2.0.0', 'pyramid_tm', 'zope.sqlalchemy', 'passlib', From d99d66deb556d00150c0f671a5e110a42766892c Mon Sep 17 00:00:00 2001 From: jssuzanne Date: Tue, 4 May 2021 17:08:24 +0200 Subject: [PATCH 2/4] Replaced registry by anyblok --- anyblok_pyramid/anyblok.py | 7 ++++--- anyblok_pyramid/bloks/auth/user.py | 12 ++++++------ .../bloks/authorization/authorization.py | 18 +++++++++--------- anyblok_pyramid/bloks/authorization/query.py | 2 +- anyblok_pyramid/bloks/password/user.py | 2 +- anyblok_pyramid/bloks/pyramid/model.py | 4 ++-- anyblok_pyramid/test_bloks/test2/__init__.py | 8 ++++---- anyblok_pyramid/test_bloks/test2/models.py | 2 +- 8 files changed, 28 insertions(+), 27 deletions(-) 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..6e0ff40 100644 --- a/anyblok_pyramid/bloks/auth/user.py +++ b/anyblok_pyramid/bloks/auth/user.py @@ -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..f149079 100644 --- a/anyblok_pyramid/bloks/authorization/authorization.py +++ b/anyblok_pyramid/bloks/authorization/authorization.py @@ -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/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..d498fc5 100644 --- a/anyblok_pyramid/bloks/pyramid/model.py +++ b/anyblok_pyramid/bloks/pyramid/model.py @@ -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/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..d589702 100644 --- a/anyblok_pyramid/test_bloks/test2/models.py +++ b/anyblok_pyramid/test_bloks/test2/models.py @@ -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): From 4584e920639345b56e9b7055b2ac97eabb4a91e1 Mon Sep 17 00:00:00 2001 From: jssuzanne Date: Thu, 6 May 2021 10:18:26 +0200 Subject: [PATCH 3/4] Import work with Pyramid 1.* and 2.* --- anyblok_pyramid/bloks/auth/user.py | 5 ++++- anyblok_pyramid/bloks/authorization/authorization.py | 5 ++++- anyblok_pyramid/bloks/pyramid/__init__.py | 7 ++++++- anyblok_pyramid/bloks/pyramid/model.py | 5 ++++- anyblok_pyramid/security.py | 5 ++++- anyblok_pyramid/test_bloks/test2/models.py | 5 ++++- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/anyblok_pyramid/bloks/auth/user.py b/anyblok_pyramid/bloks/auth/user.py index 57c7152..3d59e2f 100644 --- a/anyblok_pyramid/bloks/auth/user.py +++ b/anyblok_pyramid/bloks/auth/user.py @@ -9,7 +9,10 @@ from pyramid.httpexceptions import HTTPUnauthorized from anyblok import Declarations from anyblok.column import String -from pyramid.authorization import Allow, ALL_PERMISSIONS +try: + from pyramid.authorization import Allow, ALL_PERMISSIONS +except ImportError: + from pyramid.security import Allow, ALL_PERMISSIONS @Declarations.register(Declarations.Model) diff --git a/anyblok_pyramid/bloks/authorization/authorization.py b/anyblok_pyramid/bloks/authorization/authorization.py index e538efb..6ff0f73 100644 --- a/anyblok_pyramid/bloks/authorization/authorization.py +++ b/anyblok_pyramid/bloks/authorization/authorization.py @@ -11,8 +11,11 @@ from anyblok.relationship import Many2One from anyblok.field import JsonRelated from .exceptions import AuthorizationValidationException -from pyramid.authorization import Allow, Deny, ALL_PERMISSIONS from sqlalchemy import or_ +try: + from pyramid.authorization import Allow, Deny, ALL_PERMISSIONS +except ImportError: + from pyramid.security import Allow, Deny, ALL_PERMISSIONS Pyramid = Declarations.Model.Pyramid diff --git a/anyblok_pyramid/bloks/pyramid/__init__.py b/anyblok_pyramid/bloks/pyramid/__init__.py index 52af99b..a4bb07a 100644 --- a/anyblok_pyramid/bloks/pyramid/__init__.py +++ b/anyblok_pyramid/bloks/pyramid/__init__.py @@ -6,7 +6,12 @@ # 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.blok import Blok -from pyramid.authorization import ACLAuthorizationPolicy +try: + from pyramid.authorization import ACLAuthorizationPolicy +except ImportError: + from pyramid.security import ACLAuthorizationPolicy + + from anyblok_pyramid.security import RootFactory from .pyramid import getAuthenticationPolicy diff --git a/anyblok_pyramid/bloks/pyramid/model.py b/anyblok_pyramid/bloks/pyramid/model.py index 527f1ae..4103108 100644 --- a/anyblok_pyramid/bloks/pyramid/model.py +++ b/anyblok_pyramid/bloks/pyramid/model.py @@ -8,7 +8,10 @@ # obtain one at http://mozilla.org/MPL/2.0/. from pyramid.httpexceptions import HTTPUnauthorized from anyblok import Declarations -from pyramid.authorization import Allow, ALL_PERMISSIONS +try: + from pyramid.authorization import Allow, ALL_PERMISSIONS +except ImportError: + from pyramid.security import Allow, ALL_PERMISSIONS @Declarations.register(Declarations.Model) diff --git a/anyblok_pyramid/security.py b/anyblok_pyramid/security.py index 77c9065..54b22d7 100644 --- a/anyblok_pyramid/security.py +++ b/anyblok_pyramid/security.py @@ -6,7 +6,10 @@ # 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.authorization import Deny, Everyone, ALL_PERMISSIONS +try: + from pyramid.authorization import Deny, Everyone, ALL_PERMISSIONS +except ImportError: + from pyramid.security import Deny, Everyone, ALL_PERMISSIONS def group_finder(userid, request): diff --git a/anyblok_pyramid/test_bloks/test2/models.py b/anyblok_pyramid/test_bloks/test2/models.py index 3acf0e0..62e1fc4 100644 --- a/anyblok_pyramid/test_bloks/test2/models.py +++ b/anyblok_pyramid/test_bloks/test2/models.py @@ -7,8 +7,11 @@ # 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.authorization import Allow, Authenticated from anyblok_pyramid.bloks.pyramid.restrict import restrict_query_by_user +try: + from pyramid.authorization import Allow, Authenticated +except ImportError: + from pyramid.security import Allow, Authenticated @Declarations.register(Declarations.Model.Pyramid) From 8f8e18e23a41d3e0f382908a7ed2095423071b9a Mon Sep 17 00:00:00 2001 From: jssuzanne Date: Thu, 6 May 2021 14:25:25 +0200 Subject: [PATCH 4/4] Fixed utest --- anyblok_pyramid/bloks/authorization/tests/test_get_acl.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py b/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py index 7c72ed7..f2507ee 100644 --- a/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py +++ b/anyblok_pyramid/bloks/authorization/tests/test_get_acl.py @@ -6,7 +6,10 @@ # 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.authorization import Allow, Deny, ALL_PERMISSIONS +try: + from pyramid.authorization import Allow, Deny, ALL_PERMISSIONS +except ImportError: + from pyramid.security import Allow, Deny, ALL_PERMISSIONS @pytest.mark.usefixtures('rollback_registry')