Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / group_list.py @ 304acb60

History | View | Annotate | Download (3.2 kB)

1 18ffbee1 Sofia Papagiannaki
# Copyright 2012 GRNET S.A. All rights reserved.
2 18ffbee1 Sofia Papagiannaki
#
3 18ffbee1 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 18ffbee1 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 18ffbee1 Sofia Papagiannaki
# conditions are met:
6 18ffbee1 Sofia Papagiannaki
#
7 18ffbee1 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 18ffbee1 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 18ffbee1 Sofia Papagiannaki
#      disclaimer.
10 18ffbee1 Sofia Papagiannaki
#
11 18ffbee1 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 18ffbee1 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 18ffbee1 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 18ffbee1 Sofia Papagiannaki
#      provided with the distribution.
15 18ffbee1 Sofia Papagiannaki
#
16 18ffbee1 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 18ffbee1 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 18ffbee1 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 18ffbee1 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 18ffbee1 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 18ffbee1 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 18ffbee1 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 18ffbee1 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 18ffbee1 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 18ffbee1 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 18ffbee1 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 18ffbee1 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 18ffbee1 Sofia Papagiannaki
#
29 18ffbee1 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 18ffbee1 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 18ffbee1 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 18ffbee1 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 18ffbee1 Sofia Papagiannaki
34 18ffbee1 Sofia Papagiannaki
from optparse import make_option
35 18ffbee1 Sofia Papagiannaki
36 18ffbee1 Sofia Papagiannaki
from django.core.management.base import BaseCommand, CommandError
37 18ffbee1 Sofia Papagiannaki
38 ffb1e7a8 Sofia Papagiannaki
from astakos.im.models import AstakosUser, AstakosGroup
39 18ffbee1 Sofia Papagiannaki
40 18ffbee1 Sofia Papagiannaki
from ._common import format_bool
41 18ffbee1 Sofia Papagiannaki
42 18ffbee1 Sofia Papagiannaki
43 18ffbee1 Sofia Papagiannaki
class Command(BaseCommand):
44 ffb1e7a8 Sofia Papagiannaki
    help = "List groups"
45 18ffbee1 Sofia Papagiannaki
    
46 18ffbee1 Sofia Papagiannaki
    option_list = BaseCommand.option_list + (
47 18ffbee1 Sofia Papagiannaki
        make_option('-c',
48 18ffbee1 Sofia Papagiannaki
            action='store_true',
49 18ffbee1 Sofia Papagiannaki
            dest='csv',
50 18ffbee1 Sofia Papagiannaki
            default=False,
51 18ffbee1 Sofia Papagiannaki
            help="Use pipes to separate values"),
52 ffb1e7a8 Sofia Papagiannaki
        make_option('-p',
53 ffb1e7a8 Sofia Papagiannaki
            action='store_true',
54 ffb1e7a8 Sofia Papagiannaki
            dest='pending',
55 ffb1e7a8 Sofia Papagiannaki
            default=False,
56 ffb1e7a8 Sofia Papagiannaki
            help="List only groups pending enable"),
57 18ffbee1 Sofia Papagiannaki
    )
58 18ffbee1 Sofia Papagiannaki
    
59 18ffbee1 Sofia Papagiannaki
    def handle(self, *args, **options):
60 18ffbee1 Sofia Papagiannaki
        if args:
61 18ffbee1 Sofia Papagiannaki
            raise CommandError("Command doesn't accept any arguments")
62 18ffbee1 Sofia Papagiannaki
        
63 ffb1e7a8 Sofia Papagiannaki
        groups = AstakosGroup.objects.all()
64 ffb1e7a8 Sofia Papagiannaki
        
65 ffb1e7a8 Sofia Papagiannaki
        if options.get('pending'):
66 ffb1e7a8 Sofia Papagiannaki
            groups = filter(lambda g: g.is_disabled, groups)
67 18ffbee1 Sofia Papagiannaki
        
68 ffb1e7a8 Sofia Papagiannaki
        labels = ('id', 'name', 'enabled', 'permissions')
69 ffb1e7a8 Sofia Papagiannaki
        columns = (3, 12, 12, 50)
70 18ffbee1 Sofia Papagiannaki
        
71 ffb1e7a8 Sofia Papagiannaki
        if not options.get('csv'):
72 18ffbee1 Sofia Papagiannaki
            line = ' '.join(l.rjust(w) for l, w in zip(labels, columns))
73 18ffbee1 Sofia Papagiannaki
            self.stdout.write(line + '\n')
74 18ffbee1 Sofia Papagiannaki
            sep = '-' * len(line)
75 18ffbee1 Sofia Papagiannaki
            self.stdout.write(sep + '\n')
76 18ffbee1 Sofia Papagiannaki
        
77 18ffbee1 Sofia Papagiannaki
        for group in groups:
78 ffb1e7a8 Sofia Papagiannaki
            fields = (  str(group.id),
79 ffb1e7a8 Sofia Papagiannaki
                        group.name,
80 ffb1e7a8 Sofia Papagiannaki
                        format_bool(group.is_enabled),
81 ffb1e7a8 Sofia Papagiannaki
                        ','.join(p.codename for p in group.permissions.all()))
82 18ffbee1 Sofia Papagiannaki
            
83 ffb1e7a8 Sofia Papagiannaki
            if options.get('csv'):
84 18ffbee1 Sofia Papagiannaki
                line = '|'.join(fields)
85 18ffbee1 Sofia Papagiannaki
            else:
86 18ffbee1 Sofia Papagiannaki
                line = ' '.join(f.rjust(w) for f, w in zip(fields, columns))
87 18ffbee1 Sofia Papagiannaki
            
88 18ffbee1 Sofia Papagiannaki
            self.stdout.write(line.encode('utf8') + '\n')