Revision 7a08e179

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