Skip to content

Commit

Permalink
Merge pull request #8146 from ckan/requirements-april-2024
Browse files Browse the repository at this point in the history
Requirements April 2024
  • Loading branch information
smotornyuk committed Apr 25, 2024
2 parents 7287d62 + 239f91b commit c2b4d70
Show file tree
Hide file tree
Showing 11 changed files with 214 additions and 202 deletions.
4 changes: 1 addition & 3 deletions ckan/lib/app_globals.py
Expand Up @@ -6,7 +6,7 @@
import logging
from threading import Lock
from typing import Any, Union
from packaging.version import parse as parse_version, Version
from packaging.version import parse as parse_version

import ckan
import ckan.model as model
Expand Down Expand Up @@ -210,8 +210,6 @@ def _init(self):

self.ckan_version = ckan.__version__
version = parse_version(self.ckan_version)
if not isinstance(version, Version):
raise ValueError(self.ckan_version)

self.ckan_base_version = version.base_version
if not version.is_prerelease:
Expand Down
2 changes: 1 addition & 1 deletion ckan/lib/jobs.py
Expand Up @@ -43,7 +43,7 @@
_queues: dict[str, rq.Queue] = {}


def _connect() -> Redis: # type: ignore
def _connect() -> Redis:
u'''
Connect to Redis and tell RQ about it.
Expand Down
10 changes: 5 additions & 5 deletions ckan/lib/redis.py
@@ -1,6 +1,6 @@
# encoding: utf-8

u'''
'''
Redis utilities.
.. versionadded:: 2.7
Expand All @@ -21,8 +21,8 @@
_connection_pool = None


def connect_to_redis() -> Redis: # type: ignore
u'''
def connect_to_redis() -> Redis:
'''
(Lazily) connect to Redis.
The connection is set up but not actually established. The latter
Expand All @@ -42,7 +42,7 @@ def connect_to_redis() -> Redis: # type: ignore


def is_redis_available() -> bool:
u'''
'''
Check whether Redis is available.
:returns: The availability of Redis.
Expand All @@ -52,7 +52,7 @@ def is_redis_available() -> bool:
'''
redis_conn = connect_to_redis()
try:
return redis_conn.ping()
return redis_conn.ping() is True
except Exception:
log.exception(u'Redis is not available')
return False
13 changes: 1 addition & 12 deletions ckan/tests/helpers.py
Expand Up @@ -350,23 +350,12 @@ def teardown_class(cls):
config.update(cls._original_config)


@pytest.mark.usefixtures("with_test_worker")
@pytest.mark.usefixtures("with_test_worker", "clean_queues")
class RQTestBase(object):
"""
Base class for tests of RQ functionality.
"""

def setup(self):
u"""
Delete all RQ queues and jobs.
"""
# See https://github.com/nvie/rq/issues/731
redis_conn = connect_to_redis()
for queue in rq.Queue.all(connection=redis_conn):
queue.empty()
redis_conn.srem(rq.Queue.redis_queues_keys, queue._key)
redis_conn.delete(queue._key)

def all_jobs(self):
u"""
Get a list of all RQ jobs.
Expand Down
79 changes: 40 additions & 39 deletions ckan/tests/logic/auth/test_create.py
Expand Up @@ -406,6 +406,25 @@ def test_auth_user_is_allowed_to_create_tokens(self):
)


@pytest.fixture
def members_fixtures():
org_admin = factories.User()
org_editor = factories.User()
org_member = factories.User()

org = factories.Organization(
users=[
{'name': org_admin['name'], 'capacity': 'admin'},
{'name': org_editor['name'], 'capacity': 'editor'},
{'name': org_member['name'], 'capacity': 'member'},
]
)

dataset = factories.Dataset(owner_org=org['id'])

return locals()


@pytest.mark.usefixtures("non_clean_db")
@pytest.mark.ckan_config(u"ckan.auth.allow_dataset_collaborators", True)
class TestPackageMemberCreateAuth(object):
Expand All @@ -416,57 +435,39 @@ def _get_context(self, user):
"user": user if isinstance(user, str) else user.get("name"),
}

def setup(self):

self.org_admin = factories.User()
self.org_editor = factories.User()
self.org_member = factories.User()

self.normal_user = factories.User()

self.org = factories.Organization(
users=[
{'name': self.org_admin['name'], 'capacity': 'admin'},
{'name': self.org_editor['name'], 'capacity': 'editor'},
{'name': self.org_member['name'], 'capacity': 'member'},
]
)

self.dataset = factories.Dataset(owner_org=self.org['id'])

def test_create_org_admin_is_authorized(self):
def test_create_org_admin_is_authorized(self, members_fixtures):

context = self._get_context(self.org_admin)
context = self._get_context(members_fixtures["org_admin"])
assert helpers.call_auth(
'package_collaborator_create', context=context, id=self.dataset['id'])
'package_collaborator_create', context=context, id=members_fixtures["dataset"]['id'])

def test_create_org_editor_is_not_authorized(self):
def test_create_org_editor_is_not_authorized(self, members_fixtures):

context = self._get_context(self.org_editor)
context = self._get_context(members_fixtures["org_editor"])
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=self.dataset['id'])
context=context, id=members_fixtures["dataset"]['id'])

def test_create_org_member_is_not_authorized(self):
def test_create_org_member_is_not_authorized(self, members_fixtures):

context = self._get_context(self.org_member)
context = self._get_context(members_fixtures["org_member"])
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=self.dataset['id'])
context=context, id=members_fixtures["dataset"]['id'])

def test_create_non_org_user_is_not_authorized(self):
def test_create_non_org_user_is_not_authorized(self, members_fixtures):

user = factories.User()

context = self._get_context(user)
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=self.dataset['id'])
context=context, id=members_fixtures["dataset"]['id'])

def test_create_org_admin_from_other_org_is_not_authorized(self):
def test_create_org_admin_from_other_org_is_not_authorized(self, members_fixtures):

org_admin2 = factories.User()
factories.Organization(
Expand All @@ -479,44 +480,44 @@ def test_create_org_admin_from_other_org_is_not_authorized(self):
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=self.dataset['id'])
context=context, id=members_fixtures["dataset"]['id'])

def test_create_missing_org_is_not_authorized(self):
def test_create_missing_org_is_not_authorized(self, members_fixtures):

dataset = factories.Dataset(owner_org=None)

context = self._get_context(self.org_admin)
context = self._get_context(members_fixtures["org_admin"])
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=dataset['id'])

@pytest.mark.ckan_config('ckan.auth.allow_admin_collaborators', True)
def test_create_collaborator_admin_is_authorized(self):
def test_create_collaborator_admin_is_authorized(self, members_fixtures):

user = factories.User()

helpers.call_action(
'package_collaborator_create',
id=self.dataset['id'], user_id=user['id'], capacity='admin')
id=members_fixtures["dataset"]['id'], user_id=user['id'], capacity='admin')

context = self._get_context(user)
assert helpers.call_auth(
'package_collaborator_create', context=context, id=self.dataset['id'])
'package_collaborator_create', context=context, id=members_fixtures["dataset"]['id'])

@pytest.mark.parametrize('role', ['editor', 'member'])
def test_create_collaborator_editor_and_member_are_not_authorized(self, role):
def test_create_collaborator_editor_and_member_are_not_authorized(self, role, members_fixtures):
user = factories.User()

helpers.call_action(
'package_collaborator_create',
id=self.dataset['id'], user_id=user['id'], capacity=role)
id=members_fixtures["dataset"]['id'], user_id=user['id'], capacity=role)

context = self._get_context(user)
with pytest.raises(logic.NotAuthorized):
helpers.call_auth(
'package_collaborator_create',
context=context, id=self.dataset['id'])
context=context, id=members_fixtures["dataset"]['id'])

@pytest.mark.ckan_config('ckan.auth.create_dataset_if_not_in_organization', True)
@pytest.mark.ckan_config('ckan.auth.create_unowned_dataset', True)
Expand Down

0 comments on commit c2b4d70

Please sign in to comment.