Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / user-show.py @ c7c0ec58

History | View | Annotate | Download (4.8 kB)

1 a3c6203c 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 django.core.management.base import BaseCommand, CommandError
35 df48dd1b Giorgos Verigakis
36 3362d142 Sofia Papagiannaki
from astakos.im.models import AstakosUser, get_latest_terms
37 437c0052 Sofia Papagiannaki
from astakos.im.util import model_to_dict
38 a3c6203c Giorgos Korfiatis
from synnefo.lib.ordereddict import OrderedDict
39 df48dd1b Giorgos Verigakis
40 437c0052 Sofia Papagiannaki
from ._common import format
41 df48dd1b Giorgos Verigakis
42 094c0768 Sofia Papagiannaki
import uuid
43 df48dd1b Giorgos Verigakis
44 865849d7 Giorgos Korfiatis
45 df48dd1b Giorgos Verigakis
class Command(BaseCommand):
46 ebd369d0 Sofia Papagiannaki
    args = "<user ID or email>"
47 df48dd1b Giorgos Verigakis
    help = "Show user info"
48 5ce3ce4f Sofia Papagiannaki
49 df48dd1b Giorgos Verigakis
    def handle(self, *args, **options):
50 df48dd1b Giorgos Verigakis
        if len(args) != 1:
51 ebd369d0 Sofia Papagiannaki
            raise CommandError("Please provide a user ID or email")
52 5ce3ce4f Sofia Papagiannaki
53 094c0768 Sofia Papagiannaki
        identifier = args[0]
54 094c0768 Sofia Papagiannaki
        if identifier.isdigit():
55 094c0768 Sofia Papagiannaki
            users = AstakosUser.objects.filter(id=int(identifier))
56 0a569195 Sofia Papagiannaki
        else:
57 094c0768 Sofia Papagiannaki
            try:
58 094c0768 Sofia Papagiannaki
                uuid.UUID(identifier)
59 094c0768 Sofia Papagiannaki
            except:
60 094c0768 Sofia Papagiannaki
                users = AstakosUser.objects.filter(email__iexact=identifier)
61 094c0768 Sofia Papagiannaki
            else:
62 094c0768 Sofia Papagiannaki
                users = AstakosUser.objects.filter(uuid=identifier)
63 0a569195 Sofia Papagiannaki
        if users.count() == 0:
64 094c0768 Sofia Papagiannaki
            field = 'id' if identifier.isdigit() else 'email'
65 094c0768 Sofia Papagiannaki
            msg = "Unknown user with %s '%s'" % (field, identifier)
66 df48dd1b Giorgos Verigakis
            raise CommandError(msg)
67 5ce3ce4f Sofia Papagiannaki
68 0a569195 Sofia Papagiannaki
        for user in users:
69 a3c6203c Giorgos Korfiatis
            quotas = user.all_quotas()
70 a3c6203c Giorgos Korfiatis
            showable_quotas = {}
71 a3c6203c Giorgos Korfiatis
            for resource, limits in quotas.iteritems():
72 a3c6203c Giorgos Korfiatis
                showable_quotas[resource] = limits.capacity
73 a3c6203c Giorgos Korfiatis
74 c7c0ec58 Giorgos Korfiatis
            settings_dict = {}
75 c7c0ec58 Giorgos Korfiatis
            settings = user.settings()
76 c7c0ec58 Giorgos Korfiatis
            for setting in settings:
77 c7c0ec58 Giorgos Korfiatis
                settings_dict[setting.setting] = setting.value
78 c7c0ec58 Giorgos Korfiatis
79 a3c6203c Giorgos Korfiatis
            kv = OrderedDict(
80 a3c6203c Giorgos Korfiatis
                [
81 a3c6203c Giorgos Korfiatis
                    ('id', user.id),
82 a3c6203c Giorgos Korfiatis
                    ('uuid', user.uuid),
83 a3c6203c Giorgos Korfiatis
                    ('email', user.email),
84 a3c6203c Giorgos Korfiatis
                    ('first name', user.first_name),
85 a3c6203c Giorgos Korfiatis
                    ('last name', user.last_name),
86 a3c6203c Giorgos Korfiatis
                    ('active', user.is_active),
87 a3c6203c Giorgos Korfiatis
                    ('admin', user.is_superuser),
88 a3c6203c Giorgos Korfiatis
                    ('last login', user.last_login),
89 a3c6203c Giorgos Korfiatis
                    ('date joined', user.date_joined),
90 a3c6203c Giorgos Korfiatis
                    ('last update', user.updated),
91 a3c6203c Giorgos Korfiatis
                    #('token', user.auth_token),
92 a3c6203c Giorgos Korfiatis
                    ('token expiration', user.auth_token_expires),
93 a3c6203c Giorgos Korfiatis
                    ('invitations', user.invitations),
94 a3c6203c Giorgos Korfiatis
                    ('invitation level', user.level),
95 a3c6203c Giorgos Korfiatis
                    ('providers', user.auth_providers_display),
96 a3c6203c Giorgos Korfiatis
                    ('verified', user.is_verified),
97 a3c6203c Giorgos Korfiatis
                    ('has_credits', format(user.has_credits)),
98 a3c6203c Giorgos Korfiatis
                    ('groups', [elem.name for elem in user.groups.all()]),
99 a3c6203c Giorgos Korfiatis
                    ('permissions', [elem.codename
100 a3c6203c Giorgos Korfiatis
                                     for elem in user.user_permissions.all()]),
101 a3c6203c Giorgos Korfiatis
                    ('group_permissions', user.get_group_permissions()),
102 a3c6203c Giorgos Korfiatis
                    ('email_verified', user.email_verified),
103 a3c6203c Giorgos Korfiatis
                    ('username', user.username),
104 a3c6203c Giorgos Korfiatis
                    ('activation_sent_date', user.activation_sent),
105 a3c6203c Giorgos Korfiatis
                ])
106 a3c6203c Giorgos Korfiatis
107 c7c0ec58 Giorgos Korfiatis
            if settings_dict:
108 c7c0ec58 Giorgos Korfiatis
                kv['settings'] = settings_dict
109 c7c0ec58 Giorgos Korfiatis
110 c7c0ec58 Giorgos Korfiatis
            kv['resources'] = showable_quotas
111 c7c0ec58 Giorgos Korfiatis
112 3362d142 Sofia Papagiannaki
            if get_latest_terms():
113 fcf90160 Sofia Papagiannaki
                has_signed_terms = user.signed_terms
114 437c0052 Sofia Papagiannaki
                kv['has_signed_terms'] = has_signed_terms
115 3362d142 Sofia Papagiannaki
                if has_signed_terms:
116 437c0052 Sofia Papagiannaki
                    kv['date_signed_terms'] = user.date_signed_terms
117 5ce3ce4f Sofia Papagiannaki
118 437c0052 Sofia Papagiannaki
            self.stdout.write(format(kv))
119 5ce3ce4f Sofia Papagiannaki
            self.stdout.write('\n')