Revision 866e5768 snf-astakos-app/astakos/im/functions.py
b/snf-astakos-app/astakos/im/functions.py | ||
---|---|---|
318 | 318 |
raise IOError(m) |
319 | 319 |
|
320 | 320 |
|
321 |
def get_membership_by_id(project_id, memb_id):
|
|
321 |
def get_membership_by_id(memb_id): |
|
322 | 322 |
try: |
323 | 323 |
objs = ProjectMembership.objects.select_related('project', 'person') |
324 |
return objs.get(project__id=project_id, id=memb_id)
|
|
324 |
return objs.get(id=memb_id) |
|
325 | 325 |
except ProjectMembership.DoesNotExist: |
326 | 326 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
327 | 327 |
raise IOError(m) |
... | ... | |
352 | 352 |
raise PermissionDenied(m) |
353 | 353 |
|
354 | 354 |
|
355 |
def accept_membership_checks(project, request_user): |
|
355 |
def accept_membership_project_checks(project, request_user):
|
|
356 | 356 |
checkAllowed(project, request_user) |
357 | 357 |
checkAlive(project) |
358 | 358 |
|
... | ... | |
366 | 366 |
raise PermissionDenied(m) |
367 | 367 |
|
368 | 368 |
|
369 |
def accept_membership(memb_id, request_user=None): |
|
370 |
project = get_project_of_membership_for_update(memb_id) |
|
371 |
membership = get_membership_by_id(memb_id) |
|
369 |
def accept_membership_checks(membership, request_user): |
|
372 | 370 |
if not membership.can_accept(): |
373 | 371 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
374 | 372 |
raise PermissionDenied(m) |
375 | 373 |
|
376 |
accept_membership_checks(project, request_user) |
|
374 |
project = membership.project |
|
375 |
accept_membership_project_checks(project, request_user) |
|
376 |
|
|
377 |
|
|
378 |
def accept_membership(memb_id, request_user=None): |
|
379 |
project = get_project_of_membership_for_update(memb_id) |
|
380 |
membership = get_membership_by_id(memb_id) |
|
381 |
accept_membership_checks(membership, request_user) |
|
377 | 382 |
user = membership.person |
378 | 383 |
membership.accept() |
379 | 384 |
qh_sync_user(user) |
... | ... | |
384 | 389 |
return membership |
385 | 390 |
|
386 | 391 |
|
387 |
def reject_membership_checks(project, request_user): |
|
392 |
def reject_membership_checks(membership, request_user): |
|
393 |
if not membership.can_reject(): |
|
394 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
|
395 |
raise PermissionDenied(m) |
|
396 |
|
|
397 |
project = membership.project |
|
388 | 398 |
checkAllowed(project, request_user) |
389 | 399 |
checkAlive(project) |
390 | 400 |
|
... | ... | |
392 | 402 |
def reject_membership(memb_id, request_user=None): |
393 | 403 |
project = get_project_of_membership_for_update(memb_id) |
394 | 404 |
membership = get_membership_by_id(memb_id) |
395 |
if not membership.can_reject(): |
|
396 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
|
397 |
raise PermissionDenied(m) |
|
398 |
|
|
399 |
reject_membership_checks(project, request_user) |
|
405 |
reject_membership_checks(membership, request_user) |
|
400 | 406 |
user = membership.person |
401 | 407 |
membership.reject() |
402 | 408 |
logger.info("Request of user %s for %s has been rejected." % |
... | ... | |
406 | 412 |
return membership |
407 | 413 |
|
408 | 414 |
|
409 |
def cancel_membership_checks(project): |
|
410 |
checkAlive(project) |
|
411 |
|
|
412 |
|
|
413 |
def cancel_membership(memb_id, request_user): |
|
414 |
project = get_project_of_membership_for_update(memb_id) |
|
415 |
|
|
416 |
membership = get_membership_by_id(memb_id) |
|
415 |
def cancel_membership_checks(membership, request_user): |
|
417 | 416 |
if not membership.can_cancel(): |
418 | 417 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
419 | 418 |
raise PermissionDenied(m) |
... | ... | |
422 | 421 |
raise PermissionDenied() |
423 | 422 |
|
424 | 423 |
project = membership.project |
425 |
cancel_membership_checks(project) |
|
424 |
checkAlive(project) |
|
425 |
|
|
426 |
|
|
427 |
def cancel_membership(memb_id, request_user): |
|
428 |
project = get_project_of_membership_for_update(memb_id) |
|
429 |
membership = get_membership_by_id(memb_id) |
|
430 |
cancel_membership_checks(membership, request_user) |
|
426 | 431 |
membership.cancel() |
427 | 432 |
logger.info("Request of user %s for %s has been cancelled." % |
428 | 433 |
(membership.person.log_display, project)) |
429 | 434 |
|
430 | 435 |
|
431 |
def remove_membership_checks(project, request_user=None): |
|
436 |
def remove_membership_checks(membership, request_user=None): |
|
437 |
if not membership.can_remove(): |
|
438 |
m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP) |
|
439 |
raise PermissionDenied(m) |
|
440 |
|
|
441 |
project = membership.project |
|
432 | 442 |
checkAllowed(project, request_user) |
433 | 443 |
checkAlive(project) |
434 | 444 |
|
... | ... | |
441 | 451 |
def remove_membership(memb_id, request_user=None): |
442 | 452 |
project = get_project_of_membership_for_update(memb_id) |
443 | 453 |
membership = get_membership_by_id(memb_id) |
444 |
if not membership.can_remove(): |
|
445 |
m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP) |
|
446 |
raise PermissionDenied(m) |
|
447 |
|
|
448 |
remove_membership_checks(project, request_user) |
|
454 |
remove_membership_checks(membership, request_user) |
|
449 | 455 |
user = membership.person |
450 | 456 |
membership.remove() |
451 | 457 |
qh_sync_user(user) |
... | ... | |
458 | 464 |
|
459 | 465 |
def enroll_member(project_id, user, request_user=None): |
460 | 466 |
project = get_project_for_update(project_id) |
461 |
accept_membership_checks(project, request_user) |
|
467 |
accept_membership_project_checks(project, request_user)
|
|
462 | 468 |
|
463 | 469 |
try: |
464 | 470 |
membership = get_membership(project_id, user.id) |
... | ... | |
478 | 484 |
return membership |
479 | 485 |
|
480 | 486 |
|
481 |
def leave_project_checks(project): |
|
487 |
def leave_project_checks(membership, request_user): |
|
488 |
if not membership.can_leave(): |
|
489 |
m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP) |
|
490 |
raise PermissionDenied(m) |
|
491 |
|
|
492 |
if membership.person != request_user: |
|
493 |
raise PermissionDenied() |
|
494 |
|
|
495 |
project = membership.project |
|
482 | 496 |
checkAlive(project) |
483 | 497 |
|
484 | 498 |
leave_policy = project.application.member_leave_policy |
... | ... | |
488 | 502 |
|
489 | 503 |
|
490 | 504 |
def can_leave_request(project, user): |
491 |
try: |
|
492 |
leave_project_checks(project) |
|
493 |
except PermissionDenied: |
|
494 |
return False |
|
495 | 505 |
m = user.get_membership(project) |
496 | 506 |
if m is None: |
497 | 507 |
return False |
498 |
return m.can_leave() |
|
508 |
try: |
|
509 |
leave_project_checks(m, user) |
|
510 |
except PermissionDenied: |
|
511 |
return False |
|
512 |
return True |
|
499 | 513 |
|
500 | 514 |
|
501 | 515 |
def leave_project(memb_id, request_user): |
502 | 516 |
project = get_project_of_membership_for_update(memb_id) |
503 |
|
|
504 | 517 |
membership = get_membership_by_id(memb_id) |
505 |
if not membership.can_leave(): |
|
506 |
m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP) |
|
507 |
raise PermissionDenied(m) |
|
508 |
|
|
509 |
if membership.person != request_user: |
|
510 |
raise PermissionDenied() |
|
511 |
|
|
512 |
project = membership.project |
|
513 |
leave_project_checks(project) |
|
518 |
leave_project_checks(membership, request_user) |
|
514 | 519 |
|
515 | 520 |
auto_accepted = False |
516 | 521 |
leave_policy = project.application.member_leave_policy |
... | ... | |
562 | 567 |
try: |
563 | 568 |
membership = get_membership(project.id, request_user.id) |
564 | 569 |
if not membership.can_join(): |
565 |
msg = _(astakos_messages.MEMBERSHIP_REQUEST_EXISTS)
|
|
570 |
msg = _(astakos_messages.MEMBERSHIP_ASSOCIATED)
|
|
566 | 571 |
raise PermissionDenied(msg) |
567 | 572 |
membership.join() |
568 | 573 |
except IOError: |
... | ... | |
584 | 589 |
return auto_accepted |
585 | 590 |
|
586 | 591 |
|
592 |
MEMBERSHIP_ACTION_CHECKS = { |
|
593 |
"leave": leave_project_checks, |
|
594 |
"cancel": cancel_membership_checks, |
|
595 |
"accept": accept_membership_checks, |
|
596 |
"reject": reject_membership_checks, |
|
597 |
"remove": remove_membership_checks, |
|
598 |
} |
|
599 |
|
|
600 |
|
|
601 |
def membership_allowed_actions(membership, request_user): |
|
602 |
allowed = [] |
|
603 |
for action, check in MEMBERSHIP_ACTION_CHECKS.iteritems(): |
|
604 |
try: |
|
605 |
check(membership, request_user) |
|
606 |
allowed.append(action) |
|
607 |
except PermissionDenied: |
|
608 |
pass |
|
609 |
return allowed |
|
610 |
|
|
611 |
|
|
587 | 612 |
def submit_application(owner=None, |
588 | 613 |
name=None, |
589 | 614 |
project_id=None, |
Also available in: Unified diff