ckanext-userdatasets 2.2.0__tar.gz → 2.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/PKG-INFO +1 -1
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/auth.py +10 -13
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/create.py +3 -3
- ckanext_userdatasets-2.2.2/ckanext/userdatasets/logic/utils.py +21 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/validators.py +3 -3
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/PKG-INFO +1 -1
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/SOURCES.txt +1 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/pyproject.toml +2 -2
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/tests/test_auth_actions_unit.py +42 -6
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/LICENSE +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/README.md +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/__init__.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/__init__.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/__init__.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/action/__init__.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/action/create.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/action/get.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/action/update.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/__init__.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/delete.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/get.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/update.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/plugin.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/dependency_links.txt +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/entry_points.txt +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/not-zip-safe +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/requires.txt +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/top_level.txt +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/docs/_scripts/gen_api_pages.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/setup.cfg +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/setup.py +0 -0
- {ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/tests/test_functional.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ckanext-userdatasets
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: A CKAN extension that allows organisation members to create datasets, and edit or delete the datasets they have created.
|
|
5
5
|
Author-email: Natural History Museum <data@nhm.ac.uk>
|
|
6
6
|
License: GPL-3.0-or-later
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/auth.py
RENAMED
|
@@ -4,36 +4,33 @@
|
|
|
4
4
|
# This file is part of ckanext-userdatasets
|
|
5
5
|
# Created by the Natural History Museum in London, UK
|
|
6
6
|
|
|
7
|
-
from ckan.authz import users_role_for_group_or_org
|
|
8
7
|
from ckan.plugins import toolkit
|
|
9
8
|
|
|
9
|
+
from ckanext.userdatasets.logic.utils import org_role_is_valid
|
|
10
|
+
|
|
10
11
|
|
|
11
12
|
def user_is_member_of_package_org(user, package):
|
|
12
13
|
"""
|
|
13
|
-
Return True if the package is in an
|
|
14
|
-
that
|
|
14
|
+
Return True if the package is in an organisation and the user has a valid role in
|
|
15
|
+
that organisation.
|
|
15
16
|
|
|
16
17
|
:param user: A user object
|
|
17
18
|
:param package: A package object
|
|
18
|
-
:returns: True if the user has
|
|
19
|
+
:returns: True if the user has a valid role in the organisation that owns the
|
|
19
20
|
package, False otherwise
|
|
20
21
|
"""
|
|
21
|
-
|
|
22
|
-
role_in_org = users_role_for_group_or_org(package.owner_org, user.name)
|
|
23
|
-
if role_in_org == 'member':
|
|
24
|
-
return True
|
|
25
|
-
return False
|
|
22
|
+
return bool(package.owner_org) and org_role_is_valid(package.owner_org, user.name)
|
|
26
23
|
|
|
27
24
|
|
|
28
25
|
def user_owns_package_as_member(user, package):
|
|
29
26
|
"""
|
|
30
|
-
Checks that the given user created the package, and has
|
|
31
|
-
|
|
27
|
+
Checks that the given user created the package, and has a valid role in the
|
|
28
|
+
organisation that owns the package.
|
|
32
29
|
|
|
33
30
|
:param user: A user object
|
|
34
31
|
:param package: A package object
|
|
35
|
-
:returns: True if the user created the package and has
|
|
36
|
-
|
|
32
|
+
:returns: True if the user created the package and has a valid role in the
|
|
33
|
+
organisation to which package belongs. False otherwise.
|
|
37
34
|
"""
|
|
38
35
|
if user_is_member_of_package_org(user, package):
|
|
39
36
|
return package.creator_user_id and user.id == package.creator_user_id
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/create.py
RENAMED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# This file is part of ckanext-userdatasets
|
|
5
5
|
# Created by the Natural History Museum in London, UK
|
|
6
6
|
|
|
7
|
-
from ckan.authz import has_user_permission_for_some_org
|
|
7
|
+
from ckan.authz import has_user_permission_for_some_org
|
|
8
8
|
from ckan.logic.auth import get_package_object, get_resource_object
|
|
9
9
|
from ckan.plugins import toolkit
|
|
10
10
|
from ckantools.decorators import auth
|
|
@@ -12,6 +12,7 @@ from ckantools.decorators import auth
|
|
|
12
12
|
from ckanext.userdatasets.logic.auth.auth import (
|
|
13
13
|
user_owns_package_as_member,
|
|
14
14
|
)
|
|
15
|
+
from ckanext.userdatasets.logic.utils import org_role_is_valid
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
@auth()
|
|
@@ -19,8 +20,7 @@ from ckanext.userdatasets.logic.auth.auth import (
|
|
|
19
20
|
def package_create(next_auth, context, data_dict):
|
|
20
21
|
user = context['auth_user_obj']
|
|
21
22
|
if data_dict and 'owner_org' in data_dict:
|
|
22
|
-
|
|
23
|
-
if role == 'member':
|
|
23
|
+
if org_role_is_valid(data_dict['owner_org'], user.name):
|
|
24
24
|
return {'success': True}
|
|
25
25
|
else:
|
|
26
26
|
# If there is no organisation, then this should return success if the user can
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# This file is part of ckanext-userdatasets
|
|
5
|
+
# Created by the Natural History Museum in London, UK
|
|
6
|
+
|
|
7
|
+
from ckan.authz import users_role_for_group_or_org
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def org_role_is_valid(group_or_org_id, username):
|
|
11
|
+
"""
|
|
12
|
+
Determine whether the given user has a valid role in the specified group or
|
|
13
|
+
organisation.
|
|
14
|
+
|
|
15
|
+
:param group_or_org_id: ID of a group or organisation
|
|
16
|
+
:param username: username for the user to check
|
|
17
|
+
:returns: True if the role is valid (member, editor, or admin), False otherwise
|
|
18
|
+
:rtype: bool
|
|
19
|
+
"""
|
|
20
|
+
role = users_role_for_group_or_org(group_or_org_id, username)
|
|
21
|
+
return role in ['member', 'editor', 'admin']
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/validators.py
RENAMED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
# This file is part of ckanext-userdatasets
|
|
5
5
|
# Created by the Natural History Museum in London, UK
|
|
6
6
|
|
|
7
|
-
from ckan.authz import users_role_for_group_or_org
|
|
8
7
|
from ckan.logic.validators import owner_org_validator as default_owner_org_validator
|
|
9
8
|
from ckan.plugins import toolkit
|
|
10
9
|
|
|
10
|
+
from ckanext.userdatasets.logic.utils import org_role_is_valid
|
|
11
|
+
|
|
11
12
|
|
|
12
13
|
def owner_org_validator(key, data, errors, context):
|
|
13
14
|
owner_org = data.get(key)
|
|
@@ -17,8 +18,7 @@ def owner_org_validator(key, data, errors, context):
|
|
|
17
18
|
else:
|
|
18
19
|
username = context['user']
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
if role == 'member':
|
|
21
|
+
if org_role_is_valid(owner_org, username):
|
|
22
22
|
return
|
|
23
23
|
|
|
24
24
|
default_owner_org_validator(key, data, errors, context)
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ckanext-userdatasets
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: A CKAN extension that allows organisation members to create datasets, and edit or delete the datasets they have created.
|
|
5
5
|
Author-email: Natural History Museum <data@nhm.ac.uk>
|
|
6
6
|
License: GPL-3.0-or-later
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/SOURCES.txt
RENAMED
|
@@ -6,6 +6,7 @@ ckanext/__init__.py
|
|
|
6
6
|
ckanext/userdatasets/__init__.py
|
|
7
7
|
ckanext/userdatasets/plugin.py
|
|
8
8
|
ckanext/userdatasets/logic/__init__.py
|
|
9
|
+
ckanext/userdatasets/logic/utils.py
|
|
9
10
|
ckanext/userdatasets/logic/validators.py
|
|
10
11
|
ckanext/userdatasets/logic/action/__init__.py
|
|
11
12
|
ckanext/userdatasets/logic/action/create.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ckanext-userdatasets"
|
|
3
|
-
version = "2.2.
|
|
3
|
+
version = "2.2.2"
|
|
4
4
|
description = "A CKAN extension that allows organisation members to create datasets, and edit or delete the datasets they have created."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.6"
|
|
@@ -55,7 +55,7 @@ exclude = ["tests", "docs"]
|
|
|
55
55
|
|
|
56
56
|
[tool.commitizen]
|
|
57
57
|
name = "cz_nhm"
|
|
58
|
-
version = "2.2.
|
|
58
|
+
version = "2.2.2"
|
|
59
59
|
tag_format = "v$version"
|
|
60
60
|
update_changelog_on_bump = true
|
|
61
61
|
changelog_incremental = true
|
|
@@ -35,7 +35,7 @@ class TestAuthActionsUnit(object):
|
|
|
35
35
|
Perform unit tests on the auth functions in ckanext.userdatasets.logic.auth.
|
|
36
36
|
"""
|
|
37
37
|
|
|
38
|
-
@patch('ckanext.userdatasets.logic.
|
|
38
|
+
@patch('ckanext.userdatasets.logic.utils.users_role_for_group_or_org')
|
|
39
39
|
def test_user_is_member_of_package_org(self, mock_users_role):
|
|
40
40
|
"""
|
|
41
41
|
Test ckanext.userdatasets.logic.auth.auth.user_is_member_of_package_org.
|
|
@@ -54,6 +54,18 @@ class TestAuthActionsUnit(object):
|
|
|
54
54
|
'package': MagicMock(owner_org='carrot'),
|
|
55
55
|
'user': MagicMock(name='turtle'),
|
|
56
56
|
'role': 'editor',
|
|
57
|
+
'result': True,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
'package': MagicMock(owner_org='carrot'),
|
|
61
|
+
'user': MagicMock(name='turtle'),
|
|
62
|
+
'role': 'admin',
|
|
63
|
+
'result': True,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
'package': MagicMock(owner_org='carrot'),
|
|
67
|
+
'user': MagicMock(name='turtle'),
|
|
68
|
+
'role': None,
|
|
57
69
|
'result': False,
|
|
58
70
|
},
|
|
59
71
|
{
|
|
@@ -62,12 +74,24 @@ class TestAuthActionsUnit(object):
|
|
|
62
74
|
'role': 'member',
|
|
63
75
|
'result': False,
|
|
64
76
|
},
|
|
77
|
+
{
|
|
78
|
+
'package': MagicMock(owner_org=''),
|
|
79
|
+
'user': MagicMock(name='turtle'),
|
|
80
|
+
'role': 'member',
|
|
81
|
+
'result': False,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
'package': MagicMock(owner_org=False),
|
|
85
|
+
'user': MagicMock(name='turtle'),
|
|
86
|
+
'role': 'member',
|
|
87
|
+
'result': False,
|
|
88
|
+
},
|
|
65
89
|
]
|
|
66
90
|
for t in tests:
|
|
67
91
|
mock_users_role.return_value = t['role']
|
|
68
92
|
assert user_is_member_of_package_org(t['user'], t['package']) == t['result']
|
|
69
93
|
|
|
70
|
-
@patch('ckanext.userdatasets.logic.
|
|
94
|
+
@patch('ckanext.userdatasets.logic.utils.users_role_for_group_or_org')
|
|
71
95
|
def test_user_owns_package_as_member(self, mock_users_role):
|
|
72
96
|
"""
|
|
73
97
|
Test ckanext.userdatasets.logic.auth.auth.user_owns_package_as_member.
|
|
@@ -82,6 +106,12 @@ class TestAuthActionsUnit(object):
|
|
|
82
106
|
'role': 'member',
|
|
83
107
|
'result': True,
|
|
84
108
|
},
|
|
109
|
+
{
|
|
110
|
+
'user': MagicMock(id=444, name='turtle'),
|
|
111
|
+
'package': MagicMock(creator_user_id=444, owner_org='carrot'),
|
|
112
|
+
'role': 'editor',
|
|
113
|
+
'result': True,
|
|
114
|
+
},
|
|
85
115
|
{
|
|
86
116
|
'user': MagicMock(id=445, name='turtle'),
|
|
87
117
|
'package': MagicMock(creator_user_id=444, owner_org='carrot'),
|
|
@@ -90,14 +120,14 @@ class TestAuthActionsUnit(object):
|
|
|
90
120
|
},
|
|
91
121
|
{
|
|
92
122
|
'user': MagicMock(id=444, name='turtle'),
|
|
93
|
-
'package': MagicMock(creator_user_id=444, owner_org=
|
|
123
|
+
'package': MagicMock(creator_user_id=444, owner_org=None),
|
|
94
124
|
'role': 'member',
|
|
95
125
|
'result': False,
|
|
96
126
|
},
|
|
97
127
|
{
|
|
98
128
|
'user': MagicMock(id=444, name='turtle'),
|
|
99
129
|
'package': MagicMock(creator_user_id=444, owner_org='carrot'),
|
|
100
|
-
'role':
|
|
130
|
+
'role': None,
|
|
101
131
|
'result': False,
|
|
102
132
|
},
|
|
103
133
|
]
|
|
@@ -105,7 +135,7 @@ class TestAuthActionsUnit(object):
|
|
|
105
135
|
mock_users_role.return_value = t['role']
|
|
106
136
|
assert user_owns_package_as_member(t['user'], t['package']) == t['result']
|
|
107
137
|
|
|
108
|
-
@patch('ckanext.userdatasets.logic.
|
|
138
|
+
@patch('ckanext.userdatasets.logic.utils.users_role_for_group_or_org')
|
|
109
139
|
@patch('ckanext.userdatasets.logic.auth.create.has_user_permission_for_some_org')
|
|
110
140
|
def test_package_create(self, mock_has_perm, mock_users_role):
|
|
111
141
|
"""
|
|
@@ -127,6 +157,13 @@ class TestAuthActionsUnit(object):
|
|
|
127
157
|
'data_dict': {'owner_org': 'carrot'},
|
|
128
158
|
'role': 'editor',
|
|
129
159
|
'has_perm': True,
|
|
160
|
+
'result': {'success': True},
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
'context': {'auth_user_obj': MagicMock(name='turtle')},
|
|
164
|
+
'data_dict': {'owner_org': 'carrot'},
|
|
165
|
+
'role': None,
|
|
166
|
+
'has_perm': True,
|
|
130
167
|
'result': 'fallback',
|
|
131
168
|
},
|
|
132
169
|
{
|
|
@@ -195,7 +232,6 @@ class TestAuthActionsUnit(object):
|
|
|
195
232
|
|
|
196
233
|
Ensure all routes are tested.
|
|
197
234
|
"""
|
|
198
|
-
|
|
199
235
|
tests = [
|
|
200
236
|
{'user_owns': True, 'user_is_member': True, 'result': {'success': True}},
|
|
201
237
|
{'user_owns': False, 'user_is_member': True, 'result': 'fallback'},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/action/get.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/delete.py
RENAMED
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/get.py
RENAMED
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext/userdatasets/logic/auth/update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{ckanext_userdatasets-2.2.0 → ckanext_userdatasets-2.2.2}/ckanext_userdatasets.egg-info/requires.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|