Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / project-admin-checks.py @ 06d7c286

History | View | Annotate | Download (3.6 kB)

1
# Copyright 2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from optparse import make_option
35
from django.core.management.base import BaseCommand, CommandError
36

    
37
from astakos.im.functions import check_expiration
38
from astakos.im.project_xctx import project_transaction_context
39

    
40
class Command(BaseCommand):
41
    help = "Perform administration checks on projects"
42

    
43
    option_list = BaseCommand.option_list + (
44
        make_option('--expire',
45
                    action='store_true',
46
                    dest='expire',
47
                    default=False,
48
                    help="Check projects for expiration"),
49
        make_option('--execute',
50
                    action='store_true',
51
                    dest='execute',
52
                    default=False,
53
                    help="Perform the actual operation"),
54
    )
55

    
56

    
57
    def print_expired(self, projects, execute):
58
        length = len(projects)
59
        if length == 0:
60
            s = 'No expired projects.\n'
61
        elif length == 1:
62
            s = '1 expired project:\n'
63
        else:
64
            s = '%d expired projects:\n' %(length,)
65
        self.stdout.write(s)
66

    
67
        if length > 0:
68
            labels = ('Project', 'Name', 'Status', 'Expiration date')
69
            columns = (10, 30, 14, 30)
70

    
71
            line = ' '.join(l.rjust(w) for l, w in zip(labels, columns))
72
            self.stdout.write(line + '\n')
73
            sep = '-' * len(line)
74
            self.stdout.write(sep + '\n')
75

    
76
            for project in projects:
77
                line = ' '.join(f.rjust(w) for f, w in zip(project, columns))
78
                self.stdout.write(line + '\n')
79

    
80
            if execute:
81
                self.stdout.write('%d projects have been terminated.\n' %(length,))
82

    
83
    def handle(self, *args, **options):
84

    
85
        execute = options['execute']
86
        if options['expire']:
87
            self.expire(execute=execute)
88

    
89
    @project_transaction_context(sync=True)
90
    def expire(self, execute=False, ctx=None):
91
        try:
92
            projects = check_expiration(execute=execute)
93
            self.print_expired(projects, execute)
94
        except BaseException as e:
95
            if ctx:
96
                ctx.mark_rollback()
97
            raise CommandError(e)