Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / project-sync.py @ c7c0ec58

History | View | Annotate | Download (4 kB)

1 fc1e2f02 Sofia Papagiannaki
# Copyright 2012 GRNET S.A. All rights reserved.
2 fc1e2f02 Sofia Papagiannaki
#
3 fc1e2f02 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 fc1e2f02 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 fc1e2f02 Sofia Papagiannaki
# conditions are met:
6 fc1e2f02 Sofia Papagiannaki
#
7 fc1e2f02 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 fc1e2f02 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 fc1e2f02 Sofia Papagiannaki
#      disclaimer.
10 fc1e2f02 Sofia Papagiannaki
#
11 fc1e2f02 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 fc1e2f02 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 fc1e2f02 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 fc1e2f02 Sofia Papagiannaki
#      provided with the distribution.
15 fc1e2f02 Sofia Papagiannaki
#
16 fc1e2f02 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 fc1e2f02 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 fc1e2f02 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 fc1e2f02 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 fc1e2f02 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 fc1e2f02 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 fc1e2f02 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 fc1e2f02 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 fc1e2f02 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 fc1e2f02 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 fc1e2f02 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 fc1e2f02 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 fc1e2f02 Sofia Papagiannaki
#
29 fc1e2f02 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 fc1e2f02 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 fc1e2f02 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 fc1e2f02 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 fc1e2f02 Sofia Papagiannaki
34 84a3f701 Giorgos Korfiatis
from optparse import make_option
35 84a3f701 Giorgos Korfiatis
from django.core.management.base import BaseCommand, CommandError
36 84a3f701 Giorgos Korfiatis
from django.db import transaction
37 fc1e2f02 Sofia Papagiannaki
38 140da2d1 Giorgos Korfiatis
from astakos.im.models import sync_projects
39 fc1e2f02 Sofia Papagiannaki
40 9a06d96f Olga Brani
import logging
41 9a06d96f Olga Brani
logger = logging.getLogger(__name__)
42 9a06d96f Olga Brani
43 84a3f701 Giorgos Korfiatis
class Command(BaseCommand):
44 9d5cf81c Georgios D. Tsoukalas
    help = """
45 9d5cf81c Georgios D. Tsoukalas
    Check for and perform pending project synchronization.
46 5ce3ce4f Sofia Papagiannaki

47 9d5cf81c Georgios D. Tsoukalas
    Synchronization is automatic when Astakos is running.
48 9d5cf81c Georgios D. Tsoukalas
    This command provides manual access to the synchronization.
49 9d5cf81c Georgios D. Tsoukalas

50 9d5cf81c Georgios D. Tsoukalas
    Details:
51 9d5cf81c Georgios D. Tsoukalas

52 9d5cf81c Georgios D. Tsoukalas
    Changes in project resources and memberships (such as approving
53 9d5cf81c Georgios D. Tsoukalas
    a project or accepting a member into it) are changes in policy
54 9d5cf81c Georgios D. Tsoukalas
    that are recorded in Astakos. These changes have to be synchronized
55 9d5cf81c Georgios D. Tsoukalas
    with the quota system so that they come in effect.
56 9d5cf81c Georgios D. Tsoukalas

57 9d5cf81c Georgios D. Tsoukalas
    The quotaholder service must be running.
58 9d5cf81c Georgios D. Tsoukalas
    Astakos is not required, but there should be no harm if it is
59 9d5cf81c Georgios D. Tsoukalas
    running, even if under online traffic.
60 9d5cf81c Georgios D. Tsoukalas

61 9d5cf81c Georgios D. Tsoukalas
    """
62 84a3f701 Giorgos Korfiatis
    option_list = BaseCommand.option_list + (
63 140da2d1 Giorgos Korfiatis
        make_option('--check',
64 84a3f701 Giorgos Korfiatis
                    action='store_true',
65 140da2d1 Giorgos Korfiatis
                    dest='check',
66 140da2d1 Giorgos Korfiatis
                    default=True,
67 140da2d1 Giorgos Korfiatis
                    help="Check if projects are in sync with quotaholder (default)"),
68 140da2d1 Giorgos Korfiatis
        make_option('--trigger',
69 84a3f701 Giorgos Korfiatis
                    action='store_true',
70 140da2d1 Giorgos Korfiatis
                    dest='trigger',
71 84a3f701 Giorgos Korfiatis
                    default=False,
72 140da2d1 Giorgos Korfiatis
                    help="Sync projects to quotaholder"),
73 84a3f701 Giorgos Korfiatis
    )
74 84a3f701 Giorgos Korfiatis
75 84a3f701 Giorgos Korfiatis
    @transaction.commit_on_success
76 84a3f701 Giorgos Korfiatis
    def handle(self, *args, **options):
77 140da2d1 Giorgos Korfiatis
        trigger = options['trigger']
78 5ce3ce4f Sofia Papagiannaki
79 fc1e2f02 Sofia Papagiannaki
        try:
80 140da2d1 Giorgos Korfiatis
            log = sync_projects(sync=trigger)
81 93c4dc6b Giorgos Korfiatis
            pending, (modified, reactivating, deactivating) = log
82 93c4dc6b Giorgos Korfiatis
83 93c4dc6b Giorgos Korfiatis
            if pending:
84 93c4dc6b Giorgos Korfiatis
                self.stdout.write("Memberships pending sync:\n")
85 93c4dc6b Giorgos Korfiatis
                for m in pending:
86 93c4dc6b Giorgos Korfiatis
                    self.stdout.write("%s\n" % (m))
87 93c4dc6b Giorgos Korfiatis
                self.stdout.write("\n")
88 93c4dc6b Giorgos Korfiatis
89 93c4dc6b Giorgos Korfiatis
            if modified:
90 93c4dc6b Giorgos Korfiatis
                self.stdout.write("Modified projects:\n")
91 93c4dc6b Giorgos Korfiatis
                for p in modified:
92 93c4dc6b Giorgos Korfiatis
                    self.stdout.write("%s\n" % (p))
93 93c4dc6b Giorgos Korfiatis
                self.stdout.write("\n")
94 93c4dc6b Giorgos Korfiatis
95 93c4dc6b Giorgos Korfiatis
            if reactivating:
96 93c4dc6b Giorgos Korfiatis
                self.stdout.write("Reactivating projects:\n")
97 93c4dc6b Giorgos Korfiatis
                for p in reactivating:
98 93c4dc6b Giorgos Korfiatis
                    self.stdout.write("%s\n" % (p))
99 93c4dc6b Giorgos Korfiatis
                self.stdout.write("\n")
100 93c4dc6b Giorgos Korfiatis
101 93c4dc6b Giorgos Korfiatis
            if deactivating:
102 93c4dc6b Giorgos Korfiatis
                self.stdout.write("Deactivating projects:\n")
103 93c4dc6b Giorgos Korfiatis
                for p in deactivating:
104 93c4dc6b Giorgos Korfiatis
                    self.stdout.write("%s\n" % (p))
105 93c4dc6b Giorgos Korfiatis
                self.stdout.write("\n")
106 93c4dc6b Giorgos Korfiatis
107 fc1e2f02 Sofia Papagiannaki
        except BaseException, e:
108 9a06d96f Olga Brani
            logger.exception(e)
109 9a06d96f Olga Brani
            raise CommandError("Syncing failed.")