Revision ff67242a snf-astakos-app/astakos/im/functions.py

b/snf-astakos-app/astakos/im/functions.py
46 46
from django.contrib.auth.models import AnonymousUser
47 47
from django.core.exceptions import PermissionDenied
48 48
from django.db import IntegrityError
49
from django.http import Http404
49 50

  
50 51
from urllib import quote
51 52
from urlparse import urljoin
......
494 495
        raise PermissionDenied(
495 496
            _(astakos_messages.NOT_ALIVE_PROJECT) % project.__dict__)
496 497

  
497
def accept_membership(project_application_id, user, request_user=None):
498
    """
499
        Raises:
500
            django.core.exceptions.PermissionDenied
501
            IOError
502
    """
503
    project_id = get_project_id_of_application_id(project_application_id)
504
    return do_accept_membership(project_id, user, request_user)
505

  
506
def do_accept_membership_checks(project, request_user):
498
def accept_membership_checks(project, request_user):
507 499
    checkAllowed(project, request_user)
508 500
    checkAlive(project)
509 501

  
......
514 506
    if project.violates_members_limit(adding=1):
515 507
        raise PermissionDenied(_(astakos_messages.MEMBER_NUMBER_LIMIT_REACHED))
516 508

  
517
def do_accept_membership(project_id, user, request_user=None):
509
def accept_membership(project_id, user, request_user=None):
518 510
    project = get_project_for_update(project_id)
519
    do_accept_membership_checks(project, request_user)
511
    accept_membership_checks(project, request_user)
520 512

  
521 513
    membership = get_membership_for_update(project, user)
522 514
    if not membership.can_accept():
......
530 522

  
531 523
    return membership
532 524

  
533
def reject_membership(project_application_id, user, request_user=None):
534
    """
535
        Raises:
536
            django.core.exceptions.PermissionDenied
537
            IOError
538
    """
539
    project_id = get_project_id_of_application_id(project_application_id)
540
    return do_reject_membership(project_id, user, request_user)
541

  
542
def do_reject_membership_checks(project, request_user):
525
def reject_membership_checks(project, request_user):
543 526
    checkAllowed(project, request_user)
544 527
    checkAlive(project)
545 528

  
546
def do_reject_membership(project_id, user, request_user=None):
529
def reject_membership(project_id, user, request_user=None):
547 530
    project = get_project_for_update(project_id)
548
    do_reject_membership_checks(project, request_user)
531
    reject_membership_checks(project, request_user)
549 532
    membership = get_membership_for_update(project, user)
550 533
    if not membership.can_reject():
551 534
        m = _(astakos_messages.NOT_MEMBERSHIP_REQUEST)
......
557 540

  
558 541
    return membership
559 542

  
560
def remove_membership(project_application_id, user, request_user=None):
561
    """
562
        Raises:
563
            django.core.exceptions.PermissionDenied
564
            IOError
565
    """
566
    project_id = get_project_id_of_application_id(project_application_id)
567
    return do_remove_membership(project_id, user, request_user)
568

  
569
def do_remove_membership_checks(project, request_user=None):
543
def remove_membership_checks(project, request_user=None):
570 544
    checkAllowed(project, request_user)
571 545
    checkAlive(project)
572 546

  
......
574 548
    if leave_policy == CLOSED_POLICY:
575 549
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
576 550

  
577
def do_remove_membership(project_id, user, request_user=None):
551
def remove_membership(project_id, user, request_user=None):
578 552
    project = get_project_for_update(project_id)
579
    do_remove_membership_checks(project, request_user)
553
    remove_membership_checks(project, request_user)
580 554
    membership = get_membership_for_update(project, user)
581 555
    if not membership.can_remove():
582 556
        m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP)
......
589 563

  
590 564
    return membership
591 565

  
592
def enroll_member(project_application_id, user, request_user=None):
593
    project_id = get_project_id_of_application_id(project_application_id)
594
    return do_enroll_member(project_id, user, request_user)
595

  
596
def do_enroll_member(project_id, user, request_user=None):
566
def enroll_member(project_id, user, request_user=None):
597 567
    project = get_project_for_update(project_id)
598
    do_accept_membership_checks(project, request_user)
568
    accept_membership_checks(project, request_user)
599 569
    membership = create_membership(project_id, user)
600 570

  
601 571
    if not membership.can_accept():
......
608 578
    # TODO send proper notification
609 579
    return membership
610 580

  
611
def leave_project(project_application_id, user_id):
612
    """
613
        Raises:
614
            django.core.exceptions.PermissionDenied
615
            IOError
616
    """
617
    project_id = get_project_id_of_application_id(project_application_id)
618
    return do_leave_project(project_id, user_id)
619

  
620
def do_leave_project_checks(project):
581
def leave_project_checks(project):
621 582
    checkAlive(project)
622 583

  
623 584
    leave_policy = project.application.member_leave_policy
624 585
    if leave_policy == CLOSED_POLICY:
625 586
        raise PermissionDenied(_(astakos_messages.MEMBER_LEAVE_POLICY_CLOSED))
626 587

  
627
def do_leave_project(project_id, user_id):
588
def leave_project(project_id, user_id):
628 589
    project = get_project_for_update(project_id)
629
    do_leave_project_checks(project)
590
    leave_project_checks(project)
630 591
    membership = get_membership_for_update(project, user_id)
631 592
    if not membership.can_leave():
632 593
        m = _(astakos_messages.NOT_ACCEPTED_MEMBERSHIP)
......
641 602
        membership.save()
642 603
    return membership
643 604

  
644
def join_project(project_application_id, user_id):
645
    """
646
        Raises:
647
            django.core.exceptions.PermissionDenied
648
            IOError
649
    """
650
    project_id = get_project_id_of_application_id(project_application_id)
651
    return do_join_project(project_id, user_id)
652

  
653
def do_join_project_checks(project):
605
def join_project_checks(project):
654 606
    checkAlive(project)
655 607

  
656 608
    join_policy = project.application.member_join_policy
657 609
    if join_policy == CLOSED_POLICY:
658 610
        raise PermissionDenied(_(astakos_messages.MEMBER_JOIN_POLICY_CLOSED))
659 611

  
660
def do_join_project(project_id, user_id):
612
def join_project(project_id, user_id):
661 613
    project = get_project_for_update(project_id)
662
    do_join_project_checks(project)
614
    join_project_checks(project)
663 615
    membership = create_membership(project, user_id)
664 616

  
665 617
    join_policy = project.application.member_join_policy
......
778 730

  
779 731
    project.resume()
780 732
    sync_projects()
733

  
734
def get_by_chain_or_404(chain_id):
735
    try:
736
        project = Project.objects.get(id=chain_id)
737
        application = project.application
738
        return project, application
739
    except:
740
        application = ProjectApplication.objects.latest_of_chain(chain_id)
741
        if application is None:
742
            raise Http404
743
        else:
744
            return None, application

Also available in: Unified diff