Statistics
| Branch: | Tag: | Revision:

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

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 7cfc0cef Christos Stavrakakis
from snf_django.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'])