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