Skip to content

Commit c993609

Browse files
committed
schemas: (format) refactor collection permissions
Signed-off-by: pamfilos <pamfilosf@gmail.com>
1 parent 830c1ef commit c993609

File tree

2 files changed

+80
-64
lines changed

2 files changed

+80
-64
lines changed

cap/modules/schemas/permissions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ def __init__(self, schema):
111111

112112
super(ReadSchemaPermission, self).__init__(*_needs)
113113

114+
114115
class ReadCollectionSchemaPermission(ReadSchemaPermission):
115116
"""Schema collection read permission."""
116117

cap/views.py

Lines changed: 79 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@
1919

2020
from elasticsearch import ConnectionError
2121
from elasticsearch.exceptions import NotFoundError
22-
from flask import Blueprint, jsonify, abort
23-
from invenio_access.permissions import Permission
22+
from flask import Blueprint, abort, jsonify
2423
from invenio_files_rest.models import Location
2524
from invenio_jsonschemas.errors import JSONSchemaNotFound
2625
from invenio_search import current_search
27-
from sqlalchemy.exc import OperationalError
2826
from jsonref import JsonRefError
27+
from sqlalchemy.exc import OperationalError
2928

3029
from cap.modules.access.utils import login_required
3130
from cap.modules.deposit.fetchers import cap_deposit_fetcher
@@ -34,10 +33,10 @@
3433
from cap.modules.records.fetchers import cap_record_fetcher
3534
from cap.modules.records.search import CAPRecordSearch
3635
from cap.modules.records.serializers import record_json_v1
37-
from cap.modules.workflows.utils import get_user_workflows
3836
from cap.modules.schemas.models import Schema
39-
from cap.modules.schemas.serializers import collection_serializer
4037
from cap.modules.schemas.permissions import ReadCollectionSchemaPermission
38+
from cap.modules.schemas.serializers import collection_serializer
39+
from cap.modules.workflows.utils import get_user_workflows
4140

4241
blueprint = Blueprint(
4342
'cap',
@@ -72,17 +71,24 @@ def ping(service=None):
7271
@login_required
7372
def dashboard():
7473
"""Dashboard view."""
74+
7575
def _serialize_records(records):
7676
return json.loads(
7777
record_json_v1.serialize_search(
78-
cap_record_fetcher,
79-
records.to_dict()))['hits']['hits'] # noqa
78+
cap_record_fetcher, records.to_dict()
79+
)
80+
)['hits'][
81+
'hits'
82+
] # noqa
8083

8184
def _serialize_deposits(deposits):
8285
return json.loads(
8386
deposit_json_v1.serialize_search(
84-
cap_deposit_fetcher,
85-
deposits.to_dict()))['hits']['hits'] # noqa
87+
cap_deposit_fetcher, deposits.to_dict()
88+
)
89+
)['hits'][
90+
'hits'
91+
] # noqa
8692

8793
rs = CAPRecordSearch().extra(version=True).sort_by_latest()
8894
ds = CAPDepositSearch().extra(version=True).sort_by_latest()
@@ -95,44 +101,49 @@ def _serialize_deposits(deposits):
95101
user_drafts_count = ds.get_user_deposits().count()
96102
user_workflows = get_user_workflows()
97103

98-
return jsonify({
99-
'published': {
100-
'data': published, 'more': '/search?q='
101-
},
102-
'drafts': {
103-
'data': drafts, 'more': '/drafts?q='
104-
},
105-
'user_published': {
106-
'data': user_published, 'more': '/search?q=&by_me=True'
107-
},
108-
'user_drafts': {
109-
'data': user_drafts, 'more': '/drafts?q=&by_me=True'
110-
},
111-
'user_workflows': {
112-
'data': user_workflows, 'more': '#'
113-
},
114-
'user_drafts_count': user_drafts_count,
115-
'user_published_count': user_published_count,
116-
'user_count': user_drafts_count + user_published_count
117-
})
104+
return jsonify(
105+
{
106+
'published': {'data': published, 'more': '/search?q='},
107+
'drafts': {'data': drafts, 'more': '/drafts?q='},
108+
'user_published': {
109+
'data': user_published,
110+
'more': '/search?q=&by_me=True',
111+
},
112+
'user_drafts': {
113+
'data': user_drafts,
114+
'more': '/drafts?q=&by_me=True',
115+
},
116+
'user_workflows': {'data': user_workflows, 'more': '#'},
117+
'user_drafts_count': user_drafts_count,
118+
'user_published_count': user_published_count,
119+
'user_count': user_drafts_count + user_published_count,
120+
}
121+
)
118122

119123

120124
@blueprint.route('/collection/<string:collection_name>')
121125
@blueprint.route('/collection/<string:collection_name>/<string:version>')
122126
@login_required
123127
def collection(collection_name, version=None):
124128
"""Collection view."""
129+
125130
def _serialize_records(records):
126131
return json.loads(
127132
record_json_v1.serialize_search(
128-
cap_record_fetcher,
129-
records.to_dict()))['hits']['hits'] # noqa
133+
cap_record_fetcher, records.to_dict()
134+
)
135+
)['hits'][
136+
'hits'
137+
] # noqa
130138

131139
def _serialize_deposits(deposits):
132140
return json.loads(
133141
deposit_json_v1.serialize_search(
134-
cap_deposit_fetcher,
135-
deposits.to_dict()))['hits']['hits'] # noqa
142+
cap_deposit_fetcher, deposits.to_dict()
143+
)
144+
)['hits'][
145+
'hits'
146+
] # noqa
136147

137148
if not collection_name:
138149
return abort(404)
@@ -151,8 +162,7 @@ def _serialize_deposits(deposits):
151162
abort(403)
152163

153164
try:
154-
schema_data = collection_serializer.dump(
155-
collection_schema).data
165+
schema_data = collection_serializer.dump(collection_schema).data
156166
except JsonRefError:
157167
abort(404)
158168

@@ -161,22 +171,26 @@ def _serialize_deposits(deposits):
161171

162172
try:
163173
published = _serialize_records(
164-
rs.get_collection_records(collection_schema.name,
165-
collection_version=version
166-
)[:5].execute()
174+
rs.get_collection_records(
175+
collection_schema.name, collection_version=version
176+
)[:5].execute()
167177
)
168178
drafts = _serialize_deposits(
169-
ds.get_collection_deposits(collection_schema.name,
170-
collection_version=version
171-
)[:5].execute()
179+
ds.get_collection_deposits(
180+
collection_schema.name, collection_version=version
181+
)[:5].execute()
182+
)
183+
user_drafts = _serialize_deposits(
184+
ds.get_collection_deposits(
185+
collection_schema.name, by_me=True, collection_version=version
186+
)[:5].execute()
172187
)
173-
user_drafts = _serialize_deposits(ds.get_collection_deposits(
174-
collection_schema.name, by_me=True, collection_version=version
175-
)[:5].execute())
176188

177-
user_published = _serialize_records(rs.get_collection_records(
178-
collection_schema.name, by_me=True, collection_version=version
179-
)[:5].execute())
189+
user_published = _serialize_records(
190+
rs.get_collection_records(
191+
collection_schema.name, by_me=True, collection_version=version
192+
)[:5].execute()
193+
)
180194

181195
except NotFoundError:
182196
published = []
@@ -188,20 +202,21 @@ def _serialize_deposits(deposits):
188202
if version:
189203
collection_args += f'&collection_version={version}'
190204

191-
return jsonify({
192-
'published': {
193-
'data': published, 'more': f'/search?{collection_args}&q='
194-
},
195-
'drafts': {
196-
'data': drafts, 'more': f'/drafts?{collection_args}&q='
197-
},
198-
'user_published': {
199-
'data': user_published,
200-
'more': f'/search?{collection_args}&q=&by_me=True'
201-
},
202-
'user_drafts': {
203-
'data': user_drafts,
204-
'more': f'/drafts?{collection_args}&q=&by_me=True'
205-
},
206-
'schema_data': schema_data
207-
})
205+
return jsonify(
206+
{
207+
'published': {
208+
'data': published,
209+
'more': f'/search?{collection_args}&q=',
210+
},
211+
'drafts': {'data': drafts, 'more': f'/drafts?{collection_args}&q='},
212+
'user_published': {
213+
'data': user_published,
214+
'more': f'/search?{collection_args}&q=&by_me=True',
215+
},
216+
'user_drafts': {
217+
'data': user_drafts,
218+
'more': f'/drafts?{collection_args}&q=&by_me=True',
219+
},
220+
'schema_data': schema_data,
221+
}
222+
)

0 commit comments

Comments
 (0)