Revision 570015d2 snf-astakos-app/astakos/im/functions.py

b/snf-astakos-app/astakos/im/functions.py
78 78
    application_deny_notify,
79 79
    project_termination_notify, project_suspension_notify)
80 80
from astakos.im.endpoints.qh import (
81
    register_quotas, qh_get_quota)
81
    register_quotas, qh_get_quota, qh_add_quota)
82 82

  
83 83
import astakos.im.messages as astakos_messages
84 84

  
......
526 526
        raise PermissionDenied(m)
527 527

  
528 528
    membership.accept()
529
    qh_sync([membership])
529 530
    logger.info("User %s has been accepted in %s." %
530 531
                (membership.person.log_display, project))
531 532

  
......
585 586
        raise PermissionDenied(m)
586 587

  
587 588
    membership.remove()
589
    qh_sync([membership])
588 590
    logger.info("User %s has been removed from %s." %
589 591
                (membership.person.log_display, project))
590 592

  
......
602 604
        raise PermissionDenied(m)
603 605

  
604 606
    membership.accept()
607
    qh_sync([membership])
605 608
    logger.info("User %s has been enrolled in %s." %
606 609
                (membership.person.log_display, project))
610

  
607 611
    membership_enroll_notify(project, membership.person)
608 612

  
609 613
    return membership
......
638 642
    leave_policy = project.application.member_leave_policy
639 643
    if leave_policy == AUTO_ACCEPT_POLICY:
640 644
        membership.remove()
645
        qh_sync([membership])
641 646
        logger.info("User %s has left %s." %
642 647
                    (membership.person.log_display, project))
643 648
        auto_accepted = True
......
674 679
    if (join_policy == AUTO_ACCEPT_POLICY and
675 680
        not project.violates_members_limit(adding=1)):
676 681
        membership.accept()
682
        qh_sync([membership])
677 683
        logger.info("User %s joined %s." %
678 684
                    (membership.person.log_display, project))
679 685
        auto_accepted = True
......
783 789
                application.id, application.state_display()))
784 790
        raise PermissionDenied(m)
785 791

  
786
    application.approve()
792
    project = application.approve()
793
    qh_sync_projects([project])
787 794
    logger.info("%s has been approved." % (application.log_display))
788 795
    application_approve_notify(application)
789 796

  
......
801 808
    checkAlive(project)
802 809

  
803 810
    project.terminate()
811
    qh_sync_projects([project])
804 812
    logger.info("%s has been terminated." % (project))
813

  
805 814
    project_termination_notify(project)
806 815

  
807 816
def suspend(project_id):
......
809 818
    checkAlive(project)
810 819

  
811 820
    project.suspend()
821
    qh_sync_projects([project])
812 822
    logger.info("%s has been suspended." % (project))
823

  
813 824
    project_suspension_notify(project)
814 825

  
815 826
def resume(project_id):
......
820 831
        raise PermissionDenied(m)
821 832

  
822 833
    project.resume()
834
    qh_sync_projects([project])
823 835
    logger.info("%s has been unsuspended." % (project))
824 836

  
825 837
def get_by_chain_or_404(chain_id):
......
900 912
        return reached, limit
901 913

  
902 914
    return False, limit
915

  
916

  
917
def qh_sync_projects(projects):
918
    memberships = []
919
    append = memberships.append
920
    for project in projects:
921
        ms = project.projectmembership_set.all().select_for_update()
922
        memberships += list(ms)
923

  
924
    qh_sync(memberships)
925

  
926

  
927
def qh_sync(memberships):
928
    sub_quota, add_quota = [], []
929
    for membership in memberships:
930
        pending_application = membership.get_pending_application()
931
        membership.get_diff_quotas(sub_quota, add_quota, pending_application)
932
        if membership.state == membership.REMOVED:
933
            membership.delete()
934
        else:
935
            membership.application = pending_application
936
            membership.save()
937
    qh_add_quota(sub_quota, add_quota)

Also available in: Unified diff