Revision edc51a21 snf-astakos-app/astakos/api/projects.py
b/snf-astakos-app/astakos/api/projects.py | ||
---|---|---|
281 | 281 |
user = request.user |
282 | 282 |
input_data = read_json_body(request, default={}) |
283 | 283 |
filters = input_data.get("filter", {}) |
284 |
mode = input_data.get("mode", "default") |
|
284 | 285 |
query = make_project_query(filters) |
285 |
projects = _get_projects(query, request_user=user) |
|
286 |
projects = _get_projects(query, mode=mode, request_user=user)
|
|
286 | 287 |
data = get_projects_details(projects, request_user=user) |
287 | 288 |
return json_response(data) |
288 | 289 |
|
289 | 290 |
|
290 |
def _get_projects(query, request_user=None): |
|
291 |
def _get_projects(query, mode="default", request_user=None):
|
|
291 | 292 |
projects = Project.objects.filter(query) |
292 | 293 |
|
293 |
if not request_user.is_project_admin(): |
|
294 |
membs = request_user.projectmembership_set.any_accepted() |
|
294 |
if mode == "member": |
|
295 |
membs = request_user.projectmembership_set.\ |
|
296 |
actually_accepted_and_active() |
|
295 | 297 |
memb_projects = membs.values_list("project", flat=True) |
296 | 298 |
is_memb = Q(id__in=memb_projects) |
297 |
owned = Q(owner=request_user) |
|
298 |
active = (Q(state=Project.NORMAL) & |
|
299 |
Q(private=False)) |
|
300 |
projects = projects.filter(is_memb | owned | active) |
|
299 |
projects = projects.filter(is_memb) |
|
300 |
elif mode == "default": |
|
301 |
if not request_user.is_project_admin(): |
|
302 |
membs = request_user.projectmembership_set.any_accepted() |
|
303 |
memb_projects = membs.values_list("project", flat=True) |
|
304 |
is_memb = Q(id__in=memb_projects) |
|
305 |
owned = Q(owner=request_user) |
|
306 |
active = (Q(state=Project.NORMAL) & |
|
307 |
Q(private=False)) |
|
308 |
projects = projects.filter(is_memb | owned | active) |
|
309 |
else: |
|
310 |
raise faults.BadRequest("Unrecognized mode '%s'." % mode) |
|
301 | 311 |
return projects.select_related("last_application") |
302 | 312 |
|
303 | 313 |
|
Also available in: Unified diff