Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / group_update.py @ fc1e2f02

History | View | Annotate | Download (4 kB)

1 30dc8c1a Sofia Papagiannaki
# Copyright 2012 GRNET S.A. All rights reserved.
2 30dc8c1a Sofia Papagiannaki
#
3 30dc8c1a Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 30dc8c1a Sofia Papagiannaki
# without modification, are permitted provided that the following
5 30dc8c1a Sofia Papagiannaki
# conditions are met:
6 30dc8c1a Sofia Papagiannaki
#
7 30dc8c1a Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 30dc8c1a Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 30dc8c1a Sofia Papagiannaki
#      disclaimer.
10 30dc8c1a Sofia Papagiannaki
#
11 30dc8c1a Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 30dc8c1a Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 30dc8c1a Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 30dc8c1a Sofia Papagiannaki
#      provided with the distribution.
15 30dc8c1a Sofia Papagiannaki
#
16 30dc8c1a Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 30dc8c1a Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 30dc8c1a Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 30dc8c1a Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 30dc8c1a Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 30dc8c1a Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 30dc8c1a Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 30dc8c1a Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 30dc8c1a Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 30dc8c1a Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 30dc8c1a Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 30dc8c1a Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 30dc8c1a Sofia Papagiannaki
#
29 30dc8c1a Sofia Papagiannaki
# The views and conclusions contained in the software and
30 30dc8c1a Sofia Papagiannaki
# documentation are those of the authors and should not be
31 30dc8c1a Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 30dc8c1a Sofia Papagiannaki
# or implied, of GRNET S.A.
33 30dc8c1a Sofia Papagiannaki
34 30dc8c1a Sofia Papagiannaki
from optparse import make_option
35 30dc8c1a Sofia Papagiannaki
36 30dc8c1a Sofia Papagiannaki
from django.core.management.base import BaseCommand, CommandError
37 30dc8c1a Sofia Papagiannaki
38 aab4d540 Sofia Papagiannaki
from astakos.im.models import AstakosGroup
39 aab4d540 Sofia Papagiannaki
from ._common import add_group_permission, remove_group_permission
40 30dc8c1a Sofia Papagiannaki
41 30dc8c1a Sofia Papagiannaki
class Command(BaseCommand):
42 ffb1e7a8 Sofia Papagiannaki
    args = "<groupname>"
43 ffb1e7a8 Sofia Papagiannaki
    help = "Update group"
44 ffb1e7a8 Sofia Papagiannaki
    
45 ffb1e7a8 Sofia Papagiannaki
    option_list = BaseCommand.option_list + (
46 ffb1e7a8 Sofia Papagiannaki
        make_option('--add-permission',
47 ffb1e7a8 Sofia Papagiannaki
            dest='add-permission',
48 ffb1e7a8 Sofia Papagiannaki
            help="Add user permission"),
49 ffb1e7a8 Sofia Papagiannaki
        make_option('--delete-permission',
50 ffb1e7a8 Sofia Papagiannaki
            dest='delete-permission',
51 ffb1e7a8 Sofia Papagiannaki
            help="Delete user permission"),
52 ffb1e7a8 Sofia Papagiannaki
        make_option('--enable',
53 ffb1e7a8 Sofia Papagiannaki
            action='store_true',
54 ffb1e7a8 Sofia Papagiannaki
            dest='enable',
55 ffb1e7a8 Sofia Papagiannaki
            default=False,
56 ffb1e7a8 Sofia Papagiannaki
            help="Enable group"),
57 fc1e2f02 Sofia Papagiannaki
        make_option('--disable',
58 fc1e2f02 Sofia Papagiannaki
            action='store_true',
59 fc1e2f02 Sofia Papagiannaki
            dest='disable',
60 fc1e2f02 Sofia Papagiannaki
            default=False,
61 fc1e2f02 Sofia Papagiannaki
            help="Disable group"),
62 ffb1e7a8 Sofia Papagiannaki
    )
63 30dc8c1a Sofia Papagiannaki
    
64 30dc8c1a Sofia Papagiannaki
    def handle(self, *args, **options):
65 ffb1e7a8 Sofia Papagiannaki
        if len(args) < 1:
66 ffb1e7a8 Sofia Papagiannaki
            raise CommandError("Please provide a group identifier")
67 30dc8c1a Sofia Papagiannaki
        
68 30dc8c1a Sofia Papagiannaki
        group = None
69 30dc8c1a Sofia Papagiannaki
        try:
70 30dc8c1a Sofia Papagiannaki
            if args[0].isdigit():
71 ffb1e7a8 Sofia Papagiannaki
                group = AstakosGroup.objects.get(id=args[0])
72 30dc8c1a Sofia Papagiannaki
            else:
73 ffb1e7a8 Sofia Papagiannaki
                group = AstakosGroup.objects.get(name=args[0])
74 ffb1e7a8 Sofia Papagiannaki
        except AstakosGroup.DoesNotExist, e:
75 30dc8c1a Sofia Papagiannaki
            raise CommandError("Invalid group")
76 30dc8c1a Sofia Papagiannaki
        
77 30dc8c1a Sofia Papagiannaki
        try:
78 ffb1e7a8 Sofia Papagiannaki
            pname = options.get('add-permission')
79 ffb1e7a8 Sofia Papagiannaki
            if pname:
80 30dc8c1a Sofia Papagiannaki
                r, created = add_group_permission(group, pname)
81 30dc8c1a Sofia Papagiannaki
                if created:
82 30dc8c1a Sofia Papagiannaki
                    self.stdout.write('Permission: %s created successfully\n' % pname)
83 30dc8c1a Sofia Papagiannaki
                if r == 0:
84 30dc8c1a Sofia Papagiannaki
                    self.stdout.write('Group has already permission: %s\n' % pname)
85 30dc8c1a Sofia Papagiannaki
                else:
86 30dc8c1a Sofia Papagiannaki
                    self.stdout.write('Permission: %s added successfully\n' % pname)
87 ffb1e7a8 Sofia Papagiannaki
            
88 ffb1e7a8 Sofia Papagiannaki
            pname = options.get('delete-permission')
89 ffb1e7a8 Sofia Papagiannaki
            if pname:
90 ffb1e7a8 Sofia Papagiannaki
                r = remove_group_permission(group, pname)
91 ffb1e7a8 Sofia Papagiannaki
                if r < 0:
92 ffb1e7a8 Sofia Papagiannaki
                    self.stdout.write('Invalid permission codename: %s\n' % pname)
93 ffb1e7a8 Sofia Papagiannaki
                elif r == 0:
94 ffb1e7a8 Sofia Papagiannaki
                    self.stdout.write('Group has not permission: %s\n' % pname)
95 ffb1e7a8 Sofia Papagiannaki
                elif r > 0:
96 ffb1e7a8 Sofia Papagiannaki
                    self.stdout.write('Permission: %s removed successfully\n' % pname)
97 ffb1e7a8 Sofia Papagiannaki
            
98 ffb1e7a8 Sofia Papagiannaki
            if options.get('enable'):
99 ffb1e7a8 Sofia Papagiannaki
                group.enable()
100 fc1e2f02 Sofia Papagiannaki
            elif options.get('disable'):
101 fc1e2f02 Sofia Papagiannaki
                group.disable()
102 fc1e2f02 Sofia Papagiannaki
        
103 30dc8c1a Sofia Papagiannaki
        except Exception, e:
104 30dc8c1a Sofia Papagiannaki
            raise CommandError(e)