Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / user-list.py @ 3c22bad0

History | View | Annotate | Download (4.7 kB)

1 2a6fc999 Giorgos Korfiatis
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2 df48dd1b Giorgos Verigakis
#
3 df48dd1b Giorgos Verigakis
# Redistribution and use in source and binary forms, with or
4 df48dd1b Giorgos Verigakis
# without modification, are permitted provided that the following
5 df48dd1b Giorgos Verigakis
# conditions are met:
6 df48dd1b Giorgos Verigakis
#
7 df48dd1b Giorgos Verigakis
#   1. Redistributions of source code must retain the above
8 df48dd1b Giorgos Verigakis
#      copyright notice, this list of conditions and the following
9 df48dd1b Giorgos Verigakis
#      disclaimer.
10 df48dd1b Giorgos Verigakis
#
11 df48dd1b Giorgos Verigakis
#   2. Redistributions in binary form must reproduce the above
12 df48dd1b Giorgos Verigakis
#      copyright notice, this list of conditions and the following
13 df48dd1b Giorgos Verigakis
#      disclaimer in the documentation and/or other materials
14 df48dd1b Giorgos Verigakis
#      provided with the distribution.
15 df48dd1b Giorgos Verigakis
#
16 df48dd1b Giorgos Verigakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 df48dd1b Giorgos Verigakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 df48dd1b Giorgos Verigakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 df48dd1b Giorgos Verigakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 df48dd1b Giorgos Verigakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 df48dd1b Giorgos Verigakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 df48dd1b Giorgos Verigakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 df48dd1b Giorgos Verigakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 df48dd1b Giorgos Verigakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 df48dd1b Giorgos Verigakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 df48dd1b Giorgos Verigakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 df48dd1b Giorgos Verigakis
# POSSIBILITY OF SUCH DAMAGE.
28 df48dd1b Giorgos Verigakis
#
29 df48dd1b Giorgos Verigakis
# The views and conclusions contained in the software and
30 df48dd1b Giorgos Verigakis
# documentation are those of the authors and should not be
31 df48dd1b Giorgos Verigakis
# interpreted as representing official policies, either expressed
32 df48dd1b Giorgos Verigakis
# or implied, of GRNET S.A.
33 df48dd1b Giorgos Verigakis
34 df48dd1b Giorgos Verigakis
from optparse import make_option
35 df48dd1b Giorgos Verigakis
36 fc5138f0 Sofia Papagiannaki
from astakos.im.models import AstakosUser
37 fc5138f0 Sofia Papagiannaki
from synnefo.webproject.management.commands import ListCommand
38 df48dd1b Giorgos Verigakis
39 df48dd1b Giorgos Verigakis
40 ffb5cca1 Sofia Papagiannaki
def get_providers(user):
41 ffb5cca1 Sofia Papagiannaki
    return ','.join(
42 ffb5cca1 Sofia Papagiannaki
        [unicode(auth) for auth in user.auth_providers.filter(active=True)]
43 ffb5cca1 Sofia Papagiannaki
    )
44 ffb5cca1 Sofia Papagiannaki
45 ffb5cca1 Sofia Papagiannaki
46 ffb5cca1 Sofia Papagiannaki
def get_groups(user):
47 ffb5cca1 Sofia Papagiannaki
    return ','.join(user.groups.all().values_list('name', flat=True))
48 ffb5cca1 Sofia Papagiannaki
49 ffb5cca1 Sofia Papagiannaki
50 fc5138f0 Sofia Papagiannaki
class Command(ListCommand):
51 df48dd1b Giorgos Verigakis
    help = "List users"
52 5ce3ce4f Sofia Papagiannaki
53 fc5138f0 Sofia Papagiannaki
    object_class = AstakosUser
54 fc5138f0 Sofia Papagiannaki
55 fc5138f0 Sofia Papagiannaki
    FIELDS = {
56 fc5138f0 Sofia Papagiannaki
        'id': ('id', ('The id of the user')),
57 fc5138f0 Sofia Papagiannaki
        'real name': ('realname', 'The name of the user'),
58 fc5138f0 Sofia Papagiannaki
        'active': ('is_active', 'Whether the user is active or not'),
59 e7cb4085 Kostas Papadimitriou
        'verified':
60 e7cb4085 Kostas Papadimitriou
        ('email_verified', 'Whether the user has a verified email address'),
61 e7cb4085 Kostas Papadimitriou
        'moderated':
62 e7cb4085 Kostas Papadimitriou
        ('moderated', 'Account moderated'),
63 fc5138f0 Sofia Papagiannaki
        'admin': ('is_superuser', 'Whether the user is admin or not'),
64 fc5138f0 Sofia Papagiannaki
        'uuid': ('uuid', 'The uuid of the user'),
65 fc5138f0 Sofia Papagiannaki
        'providers': (get_providers,
66 fc5138f0 Sofia Papagiannaki
                      'The authentication providers of the user'),
67 fc5138f0 Sofia Papagiannaki
        'activation_sent': ('activation_sent',
68 fc5138f0 Sofia Papagiannaki
                            'The date activation sent to the user'),
69 fc5138f0 Sofia Papagiannaki
        'displayname': ('username', 'The display name of the user'),
70 fc5138f0 Sofia Papagiannaki
        'groups': (get_groups, 'The groups of the user')
71 fc5138f0 Sofia Papagiannaki
    }
72 fc5138f0 Sofia Papagiannaki
73 e7cb4085 Kostas Papadimitriou
    fields = ['id', 'real name', 'active', 'verified', 'moderated', 'admin',
74 e7cb4085 Kostas Papadimitriou
              'uuid']
75 fc5138f0 Sofia Papagiannaki
76 fc5138f0 Sofia Papagiannaki
    option_list = ListCommand.option_list + (
77 9d20fe23 Kostas Papadimitriou
        make_option('--auth-providers',
78 9d20fe23 Kostas Papadimitriou
                    action='store_true',
79 9d20fe23 Kostas Papadimitriou
                    dest='auth_providers',
80 9d20fe23 Kostas Papadimitriou
                    default=False,
81 9d20fe23 Kostas Papadimitriou
                    help="Display user authentication providers"),
82 9d20fe23 Kostas Papadimitriou
        make_option('--group',
83 9d20fe23 Kostas Papadimitriou
                    action='append',
84 9d20fe23 Kostas Papadimitriou
                    dest='groups',
85 9d20fe23 Kostas Papadimitriou
                    default=None,
86 9d20fe23 Kostas Papadimitriou
                    help="Only show users that belong to the specified goups"),
87 56b9989a Giorgos Korfiatis
        make_option('--active',
88 56b9989a Giorgos Korfiatis
                    action='store_true',
89 56b9989a Giorgos Korfiatis
                    dest='active',
90 56b9989a Giorgos Korfiatis
                    default=False,
91 56b9989a Giorgos Korfiatis
                    help="Display only active users"),
92 e7cb4085 Kostas Papadimitriou
        make_option('--pending-moderation',
93 e7cb4085 Kostas Papadimitriou
                    action='store_true',
94 e7cb4085 Kostas Papadimitriou
                    dest='pending_moderation',
95 e7cb4085 Kostas Papadimitriou
                    default=False,
96 e7cb4085 Kostas Papadimitriou
                    help="Display unmoderated users"),
97 e7cb4085 Kostas Papadimitriou
        make_option('--pending-verification',
98 e7cb4085 Kostas Papadimitriou
                    action='store_true',
99 e7cb4085 Kostas Papadimitriou
                    dest='pending_verification',
100 e7cb4085 Kostas Papadimitriou
                    default=False,
101 e7cb4085 Kostas Papadimitriou
                    help="Display unverified users"),
102 fc5138f0 Sofia Papagiannaki
        make_option("--displayname",
103 fc5138f0 Sofia Papagiannaki
                    dest="displayname",
104 fc5138f0 Sofia Papagiannaki
                    action="store_true",
105 fc5138f0 Sofia Papagiannaki
                    default=False,
106 fc5138f0 Sofia Papagiannaki
                    help="Display user displayname")
107 5ce3ce4f Sofia Papagiannaki
    )
108 5ce3ce4f Sofia Papagiannaki
109 fc5138f0 Sofia Papagiannaki
    def handle_args(self, *args, **options):
110 fc5138f0 Sofia Papagiannaki
        if options['active']:
111 fc5138f0 Sofia Papagiannaki
            self.filters['is_active'] = True
112 56b9989a Giorgos Korfiatis
113 e7cb4085 Kostas Papadimitriou
        if options['pending_moderation']:
114 e7cb4085 Kostas Papadimitriou
            self.filters['email_verified'] = True
115 e7cb4085 Kostas Papadimitriou
            self.filters['moderated'] = False
116 e7cb4085 Kostas Papadimitriou
117 e7cb4085 Kostas Papadimitriou
        if options['pending_verification']:
118 e7cb4085 Kostas Papadimitriou
            self.filters['email_verified'] = False
119 e7cb4085 Kostas Papadimitriou
120 fc5138f0 Sofia Papagiannaki
        if options['auth_providers']:
121 fc5138f0 Sofia Papagiannaki
            self.fields.extend(['providers'])
122 56b9989a Giorgos Korfiatis
123 fc5138f0 Sofia Papagiannaki
        if options['displayname']:
124 fc5138f0 Sofia Papagiannaki
            self.fields.extend(['displayname'])