Revision 7a08e179 snf-astakos-app/astakos/im/functions.py
b/snf-astakos-app/astakos/im/functions.py | ||
---|---|---|
377 | 377 |
pass |
378 | 378 |
|
379 | 379 |
|
380 |
### PROJECT VIEWS ###
|
|
380 |
### PROJECT FUNCTIONS ###
|
|
381 | 381 |
|
382 | 382 |
AUTO_ACCEPT_POLICY = 1 |
383 |
MODERATED_POLICY = 2 |
|
384 |
CLOSED_POLICY = 3 |
|
383 |
MODERATED_POLICY = 2 |
|
384 |
CLOSED_POLICY = 3 |
|
385 |
|
|
386 |
POLICIES = [AUTO_ACCEPT_POLICY, MODERATED_POLICY, CLOSED_POLICY] |
|
385 | 387 |
|
386 |
POLICIES = [ AUTO_ACCEPT_POLICY, MODERATED_POLICY, CLOSED_POLICY ] |
|
387 | 388 |
|
388 | 389 |
def get_project_by_application_id(project_application_id): |
389 | 390 |
try: |
390 | 391 |
return Project.objects.get(application__id=project_application_id) |
391 | 392 |
except Project.DoesNotExist: |
392 |
raise IOError( |
|
393 |
_(astakos_messages.UNKNOWN_PROJECT_APPLICATION_ID) % project_application_id) |
|
393 |
m = (_(astakos_messages.UNKNOWN_PROJECT_APPLICATION_ID) % |
|
394 |
project_application_id) |
|
395 |
raise IOError(m) |
|
396 |
|
|
394 | 397 |
|
395 | 398 |
def get_related_project_id(application_id): |
396 | 399 |
try: |
397 | 400 |
app = ProjectApplication.objects.get(id=application_id) |
398 | 401 |
chain = app.chain |
399 |
project = Project.objects.get(id=chain)
|
|
402 |
Project.objects.get(id=chain) |
|
400 | 403 |
return chain |
401 |
except: |
|
404 |
except ProjectApplication.DoesNotExist, Project.DoesNotExist:
|
|
402 | 405 |
return None |
403 | 406 |
|
407 |
|
|
404 | 408 |
def get_chain_of_application_id(application_id): |
405 | 409 |
try: |
406 | 410 |
app = ProjectApplication.objects.get(id=application_id) |
407 | 411 |
chain = app.chain |
408 | 412 |
return chain.chain |
409 |
except: |
|
413 |
except ProjectApplication.DoesNotExist:
|
|
410 | 414 |
return None |
411 | 415 |
|
416 |
|
|
412 | 417 |
def get_project_by_id(project_id): |
413 | 418 |
try: |
414 | 419 |
return Project.objects.get(id=project_id) |
415 | 420 |
except Project.DoesNotExist: |
416 |
raise IOError( |
|
417 |
_(astakos_messages.UNKNOWN_PROJECT_ID) % project_id) |
|
421 |
m = _(astakos_messages.UNKNOWN_PROJECT_ID) % project_id |
|
422 |
raise IOError(m) |
|
423 |
|
|
418 | 424 |
|
419 | 425 |
def get_project_by_name(name): |
420 | 426 |
try: |
421 | 427 |
return Project.objects.get(name=name) |
422 | 428 |
except Project.DoesNotExist: |
423 |
raise IOError(
|
|
424 |
_(astakos_messages.UNKNOWN_PROJECT_ID) % name)
|
|
429 |
m = _(astakos_messages.UNKNOWN_PROJECT_ID) % name
|
|
430 |
raise IOError(m)
|
|
425 | 431 |
|
426 | 432 |
|
427 | 433 |
def get_project_for_update(project_id): |
428 | 434 |
try: |
429 | 435 |
return Project.objects.get_for_update(id=project_id) |
430 | 436 |
except Project.DoesNotExist: |
431 |
raise IOError( |
|
432 |
_(astakos_messages.UNKNOWN_PROJECT_ID) % project_id) |
|
437 |
m = _(astakos_messages.UNKNOWN_PROJECT_ID) % project_id |
|
438 |
raise IOError(m) |
|
439 |
|
|
433 | 440 |
|
434 | 441 |
def get_application_for_update(application_id): |
435 | 442 |
try: |
... | ... | |
438 | 445 |
m = _(astakos_messages.UNKNOWN_PROJECT_APPLICATION_ID) % application_id |
439 | 446 |
raise IOError(m) |
440 | 447 |
|
448 |
|
|
441 | 449 |
def get_user_by_id(user_id): |
442 | 450 |
try: |
443 | 451 |
return AstakosUser.objects.get(id=user_id) |
444 | 452 |
except AstakosUser.DoesNotExist: |
445 |
raise IOError(_(astakos_messages.UNKNOWN_USER_ID) % user_id) |
|
453 |
m = _(astakos_messages.UNKNOWN_USER_ID) % user_id |
|
454 |
raise IOError(m) |
|
455 |
|
|
446 | 456 |
|
447 | 457 |
def get_user_by_uuid(uuid): |
448 | 458 |
try: |
449 | 459 |
return AstakosUser.objects.get(uuid=uuid) |
450 | 460 |
except AstakosUser.DoesNotExist: |
451 |
raise IOError(_(astakos_messages.UNKNOWN_USER_ID) % uuid) |
|
461 |
m = _(astakos_messages.UNKNOWN_USER_ID) % uuid |
|
462 |
raise IOError(m) |
|
452 | 463 |
|
453 | 464 |
|
454 | 465 |
def get_membership_for_update(project_id, user_id): |
... | ... | |
457 | 468 |
return objs.get_for_update(project__id=project_id, |
458 | 469 |
person__id=user_id) |
459 | 470 |
except ProjectMembership.DoesNotExist: |
460 |
raise IOError(_(astakos_messages.NOT_MEMBERSHIP_REQUEST)) |
|
471 |
m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST) |
|
472 |
raise IOError(m) |
|
473 |
|
|
461 | 474 |
|
462 | 475 |
def checkAllowed(entity, request_user, admin_only=False): |
463 | 476 |
if isinstance(entity, Project): |
... | ... | |
480 | 493 |
|
481 | 494 |
def checkAlive(project): |
482 | 495 |
if not project.is_alive: |
483 |
raise PermissionDenied( |
|
484 |
_(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__) |
|
496 |
m = _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__ |
|
497 |
raise PermissionDenied(m) |
|
498 |
|
|
485 | 499 |
|
486 | 500 |
def accept_membership_checks(project, request_user): |
487 | 501 |
checkAllowed(project, request_user) |
... | ... | |
489 | 503 |
|
490 | 504 |
join_policy = project.application.member_join_policy |
491 | 505 |
if join_policy == CLOSED_POLICY: |
492 |
raise PermissionDenied(_(astakos_messages.MEMBER_JOIN_POLICY_CLOSED)) |
|
506 |
m = _(astakos_messages.MEMBER_JOIN_POLICY_CLOSED) |
|
507 |
raise PermissionDenied(m) |
|
493 | 508 |
|
494 | 509 |
if project.violates_members_limit(adding=1): |
495 |
raise PermissionDenied(_(astakos_messages.MEMBER_NUMBER_LIMIT_REACHED)) |
|
510 |
m = _(astakos_messages.MEMBER_NUMBER_LIMIT_REACHED) |
|
511 |
raise PermissionDenied(m) |
|
496 | 512 |
|
497 | 513 |
|
498 | 514 |
def accept_membership(project_id, user_id, request_user=None): |
... | ... | |
510 | 526 |
(membership.person.log_display, project)) |
511 | 527 |
|
512 | 528 |
membership_change_notify(project, membership.person, 'accepted') |
513 |
|
|
514 | 529 |
return membership |
515 | 530 |
|
531 |
|
|
516 | 532 |
def reject_membership_checks(project, request_user): |
517 | 533 |
checkAllowed(project, request_user) |
518 | 534 |
checkAlive(project) |
... | ... | |
531 | 547 |
(membership.person.log_display, project)) |
532 | 548 |
|
533 | 549 |
membership_change_notify(project, membership.person, 'rejected') |
534 |
|
|
535 | 550 |
return membership |
536 | 551 |
|
552 |
|
|
537 | 553 |
def cancel_membership_checks(project): |
538 | 554 |
checkAlive(project) |
539 | 555 |
|
... | ... | |
550 | 566 |
logger.info("Request of user %s for %s has been cancelled." % |
551 | 567 |
(membership.person.log_display, project)) |
552 | 568 |
|
569 |
|
|
553 | 570 |
def remove_membership_checks(project, request_user=None): |
554 | 571 |
checkAllowed(project, request_user) |
555 | 572 |
checkAlive(project) |
556 | 573 |
|
557 | 574 |
leave_policy = project.application.member_leave_policy |
558 | 575 |
if leave_policy == CLOSED_POLICY: |
559 |
raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED)) |
|
576 |
m = _(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED) |
|
577 |
raise PermissionDenied(m) |
|
578 |
|
|
560 | 579 |
|
561 | 580 |
def remove_membership(project_id, user_id, request_user=None): |
562 | 581 |
project = get_project_for_update(project_id) |
... | ... | |
572 | 591 |
(membership.person.log_display, project)) |
573 | 592 |
|
574 | 593 |
membership_change_notify(project, membership.person, 'removed') |
575 |
|
|
576 | 594 |
return membership |
577 | 595 |
|
596 |
|
|
578 | 597 |
def enroll_member(project_id, user, request_user=None): |
579 | 598 |
project = get_project_for_update(project_id) |
580 | 599 |
accept_membership_checks(project, request_user) |
... | ... | |
593 | 612 |
(membership.person.log_display, project)) |
594 | 613 |
|
595 | 614 |
membership_enroll_notify(project, membership.person) |
596 |
|
|
597 | 615 |
return membership |
598 | 616 |
|
617 |
|
|
599 | 618 |
def leave_project_checks(project): |
600 | 619 |
checkAlive(project) |
601 | 620 |
|
602 | 621 |
leave_policy = project.application.member_leave_policy |
603 | 622 |
if leave_policy == CLOSED_POLICY: |
604 |
raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED)) |
|
623 |
m = _(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED) |
|
624 |
raise PermissionDenied(m) |
|
625 |
|
|
605 | 626 |
|
606 | 627 |
def can_leave_request(project, user): |
607 | 628 |
leave_policy = project.application.member_leave_policy |
... | ... | |
638 | 659 |
membership_leave_request_notify(project, membership.person) |
639 | 660 |
return auto_accepted |
640 | 661 |
|
662 |
|
|
641 | 663 |
def join_project_checks(project): |
642 | 664 |
checkAlive(project) |
643 | 665 |
|
644 | 666 |
join_policy = project.application.member_join_policy |
645 | 667 |
if join_policy == CLOSED_POLICY: |
646 |
raise PermissionDenied(_(astakos_messages.MEMBER_JOIN_POLICY_CLOSED)) |
|
668 |
m = _(astakos_messages.MEMBER_JOIN_POLICY_CLOSED) |
|
669 |
raise PermissionDenied(m) |
|
670 |
|
|
647 | 671 |
|
648 | 672 |
def can_join_request(project, user): |
649 | 673 |
join_policy = project.application.member_join_policy |
... | ... | |
669 | 693 |
|
670 | 694 |
auto_accepted = False |
671 | 695 |
join_policy = project.application.member_join_policy |
672 |
if (join_policy == AUTO_ACCEPT_POLICY and |
|
673 |
not project.violates_members_limit(adding=1)):
|
|
696 |
if (join_policy == AUTO_ACCEPT_POLICY and (
|
|
697 |
not project.violates_members_limit(adding=1))):
|
|
674 | 698 |
membership.accept() |
675 | 699 |
qh_sync_user(request_user.id) |
676 | 700 |
logger.info("User %s joined %s." % |
... | ... | |
680 | 704 |
membership_request_notify(project, membership.person) |
681 | 705 |
logger.info("User %s requested to join %s." % |
682 | 706 |
(membership.person.log_display, project)) |
683 |
|
|
684 | 707 |
return auto_accepted |
685 | 708 |
|
709 |
|
|
686 | 710 |
def submit_application(kw, request_user=None): |
687 | 711 |
|
688 | 712 |
kw['applicant'] = request_user |
... | ... | |
729 | 753 |
application_submit_notify(application) |
730 | 754 |
return application |
731 | 755 |
|
756 |
|
|
732 | 757 |
def cancel_application(application_id, request_user=None): |
733 | 758 |
application = get_application_for_update(application_id) |
734 | 759 |
checkAllowed(application, request_user) |
735 | 760 |
|
736 | 761 |
if not application.can_cancel(): |
737 |
m = _(astakos_messages.APPLICATION_CANNOT_CANCEL % (
|
|
738 |
application.id, application.state_display()))
|
|
762 |
m = _(astakos_messages.APPLICATION_CANNOT_CANCEL % |
|
763 |
(application.id, application.state_display()))
|
|
739 | 764 |
raise PermissionDenied(m) |
740 | 765 |
|
741 | 766 |
application.cancel() |
742 | 767 |
logger.info("%s has been cancelled." % (application.log_display)) |
743 | 768 |
|
769 |
|
|
744 | 770 |
def dismiss_application(application_id, request_user=None): |
745 | 771 |
application = get_application_for_update(application_id) |
746 | 772 |
checkAllowed(application, request_user) |
747 | 773 |
|
748 | 774 |
if not application.can_dismiss(): |
749 |
m = _(astakos_messages.APPLICATION_CANNOT_DISMISS % (
|
|
750 |
application.id, application.state_display()))
|
|
775 |
m = _(astakos_messages.APPLICATION_CANNOT_DISMISS % |
|
776 |
(application.id, application.state_display()))
|
|
751 | 777 |
raise PermissionDenied(m) |
752 | 778 |
|
753 | 779 |
application.dismiss() |
754 | 780 |
logger.info("%s has been dismissed." % (application.log_display)) |
755 | 781 |
|
782 |
|
|
756 | 783 |
def deny_application(application_id, request_user=None, reason=None): |
757 | 784 |
application = get_application_for_update(application_id) |
758 | 785 |
|
759 | 786 |
checkAllowed(application, request_user, admin_only=True) |
760 | 787 |
|
761 | 788 |
if not application.can_deny(): |
762 |
m = _(astakos_messages.APPLICATION_CANNOT_DENY % (
|
|
763 |
application.id, application.state_display()))
|
|
789 |
m = _(astakos_messages.APPLICATION_CANNOT_DENY % |
|
790 |
(application.id, application.state_display()))
|
|
764 | 791 |
raise PermissionDenied(m) |
765 | 792 |
|
766 | 793 |
if reason is None: |
... | ... | |
770 | 797 |
(application.log_display, reason)) |
771 | 798 |
application_deny_notify(application) |
772 | 799 |
|
800 |
|
|
773 | 801 |
def approve_application(app_id, request_user=None): |
774 | 802 |
|
775 | 803 |
try: |
... | ... | |
782 | 810 |
checkAllowed(application, request_user, admin_only=True) |
783 | 811 |
|
784 | 812 |
if not application.can_approve(): |
785 |
m = _(astakos_messages.APPLICATION_CANNOT_APPROVE % (
|
|
786 |
application.id, application.state_display()))
|
|
813 |
m = _(astakos_messages.APPLICATION_CANNOT_APPROVE % |
|
814 |
(application.id, application.state_display()))
|
|
787 | 815 |
raise PermissionDenied(m) |
788 | 816 |
|
789 | 817 |
project = application.approve() |
... | ... | |
791 | 819 |
logger.info("%s has been approved." % (application.log_display)) |
792 | 820 |
application_approve_notify(application) |
793 | 821 |
|
822 |
|
|
794 | 823 |
def check_expiration(execute=False): |
795 | 824 |
objects = Project.objects |
796 | 825 |
expired = objects.expired_projects() |
... | ... | |
800 | 829 |
|
801 | 830 |
return [project.expiration_info() for project in expired] |
802 | 831 |
|
832 |
|
|
803 | 833 |
def terminate(project_id, request_user=None): |
804 | 834 |
project = get_project_for_update(project_id) |
805 | 835 |
checkAllowed(project, request_user, admin_only=True) |
... | ... | |
811 | 841 |
|
812 | 842 |
project_termination_notify(project) |
813 | 843 |
|
844 |
|
|
814 | 845 |
def suspend(project_id, request_user=None): |
815 | 846 |
project = get_project_by_id(project_id) |
816 | 847 |
checkAllowed(project, request_user, admin_only=True) |
... | ... | |
822 | 853 |
|
823 | 854 |
project_suspension_notify(project) |
824 | 855 |
|
856 |
|
|
825 | 857 |
def resume(project_id, request_user=None): |
826 | 858 |
project = get_project_for_update(project_id) |
827 | 859 |
checkAllowed(project, request_user, admin_only=True) |
... | ... | |
834 | 866 |
qh_sync_projects([project]) |
835 | 867 |
logger.info("%s has been unsuspended." % (project)) |
836 | 868 |
|
869 |
|
|
837 | 870 |
def get_by_chain_or_404(chain_id): |
838 | 871 |
try: |
839 | 872 |
project = Project.objects.get(id=chain_id) |
... | ... | |
872 | 905 |
|
873 | 906 |
PENDING_APPLICATION_LIMIT_SETTING = 'PENDING_APPLICATION_LIMIT' |
874 | 907 |
|
908 |
|
|
875 | 909 |
def get_pending_application_limit(user_id): |
876 | 910 |
key = PENDING_APPLICATION_LIMIT_SETTING |
877 | 911 |
return get_user_setting(user_id, key) |
Also available in: Unified diff