Revision 91eca048

b/snf-astakos-app/astakos/im/management/commands/_common.py
234 234
        return False
235 235
    else:
236 236
        return True
237

  
238

  
239
def show_quotas(qh_quotas, astakos_initial, info=None):
240
    labels = ('source', 'resource', 'initial', 'total', 'usage')
241
    if info is not None:
242
        labels = ('uuid', 'email') + labels
243

  
244
    print_data = []
245
    for holder, holder_quotas in qh_quotas.iteritems():
246
        h_initial = astakos_initial.get(holder)
247
        if info is not None:
248
            email = info.get(holder, "")
249

  
250
        for source, source_quotas in holder_quotas.iteritems():
251
            s_initial = h_initial.get(source) if h_initial else None
252
            for resource, values in source_quotas.iteritems():
253
                initial = s_initial.get(resource) if s_initial else None
254
                fields = (source, resource, initial,
255
                          values['limit'], values['usage'])
256
                if info is not None:
257
                    fields = (holder, email) + fields
258

  
259
                print_data.append(fields)
260
    return print_data, labels
b/snf-astakos-app/astakos/im/management/commands/astakos-quota.py
32 32
# or implied, of GRNET S.A.
33 33

  
34 34
from optparse import make_option
35
from django.core.management.base import BaseCommand, CommandError
35
from django.core.management.base import CommandError
36 36

  
37 37
from astakos.im.models import AstakosUser
38 38
from astakos.im.quotas import set_user_quota, list_user_quotas
39 39
from astakos.im.functions import get_user_by_uuid
40 40
from astakos.im.management.commands._common import is_uuid, is_email
41 41
from snf_django.lib.db.transaction import commit_on_success_strict
42
from synnefo.webproject.management.commands import SynnefoCommand
43
from synnefo.webproject.management import utils
44
from ._common import show_quotas
42 45

  
43 46
import logging
44 47
logger = logging.getLogger(__name__)
45 48

  
46 49

  
47
class Command(BaseCommand):
50
class Command(SynnefoCommand):
48 51
    help = "Inspect quotaholder status"
49 52

  
50
    option_list = BaseCommand.option_list + (
53
    option_list = SynnefoCommand.option_list + (
51 54
        make_option('--list',
52 55
                    action='store_true',
53 56
                    dest='list',
......
92 95
            info[user.uuid] = user.email
93 96

  
94 97
        if list_only:
95
            self.list_quotas(qh_quotas, astakos_i, info)
98
            print_data, labels = show_quotas(qh_quotas, astakos_i, info)
99
            utils.pprint_table(self.stdout, print_data, labels,
100
                               options["output_format"])
101

  
96 102
        else:
97 103
            if verify:
98 104
                self.print_verify(qh_limits, diff_q)
......
125 131

  
126 132
        return user
127 133

  
128
    def list_quotas(self, qh_quotas, astakos_initial, info):
129
        labels = ('uuid', 'email', 'source', 'resource', 'initial', 'total', 'usage')
130
        columns = (36, 30, 20, 24, 12, 12, 12)
131

  
132
        line = ' '.join(l.rjust(w) for l, w in zip(labels, columns))
133
        self.stdout.write(line + '\n')
134
        sep = '-' * len(line)
135
        self.stdout.write(sep + '\n')
136

  
137
        for holder, holder_quotas in qh_quotas.iteritems():
138
            h_initial = astakos_initial.get(holder)
139
            email = info.get(holder, "")
140
            for source, source_quotas in holder_quotas.iteritems():
141
                s_initial = h_initial.get(source) if h_initial else None
142
                for resource, values in source_quotas.iteritems():
143
                    initial = s_initial.get(resource) if s_initial else None
144
                    initial = str(initial)
145
                    capacity = str(values['limit'])
146
                    usage = str(values['usage'])
147

  
148
                    fields = (holder, email, source, resource,
149
                              initial, capacity, usage)
150
                    output = []
151
                    for field, width in zip(fields, columns):
152
                        s = field.rjust(width)
153
                        output.append(s)
154

  
155
                    line = ' '.join(output)
156
                    self.stdout.write(line + '\n')
157

  
158 134
    def print_sync(self, diff_quotas):
159 135
        size = len(diff_quotas)
160 136
        if size == 0:
b/snf-astakos-app/astakos/im/management/commands/user-show.py
32 32
# or implied, of GRNET S.A.
33 33

  
34 34
from django.core.management.base import CommandError
35
from optparse import make_option
35 36

  
36 37
from astakos.im.models import AstakosUser, get_latest_terms
37
from astakos.im.quotas import astakos_user_quotas
38
from astakos.im.quotas import list_user_quotas
38 39

  
39 40
from synnefo.lib.ordereddict import OrderedDict
40 41
from synnefo.webproject.management.commands import SynnefoCommand
41 42
from synnefo.webproject.management import utils
42 43

  
43
from ._common import format
44
from ._common import format, show_quotas
44 45

  
45 46
import uuid
46 47

  
......
49 50
    args = "<user ID or email or uuid>"
50 51
    help = "Show user info"
51 52

  
53
    option_list = SynnefoCommand.option_list + (
54
        make_option('--quotas',
55
                    action='store_true',
56
                    dest='list_quotas',
57
                    default=False,
58
                    help="Also list user quotas"),
59
    )
60

  
52 61
    def handle(self, *args, **options):
53 62
        if len(args) != 1:
54 63
            raise CommandError("Please provide a user ID or email")
......
69 78
            raise CommandError(msg)
70 79

  
71 80
        for user in users:
72
            quotas = astakos_user_quotas(user)
73

  
74 81
            settings_dict = {}
75 82
            settings = user.settings()
76 83
            for setting in settings:
......
107 114
            if settings_dict:
108 115
                kv['settings'] = settings_dict
109 116

  
110
            kv['resources'] = quotas
111

  
112 117
            if get_latest_terms():
113 118
                has_signed_terms = user.signed_terms
114 119
                kv['has_signed_terms'] = has_signed_terms
......
117 122

  
118 123
            utils.pprint_table(self.stdout, [kv.values()], kv.keys(),
119 124
                               options["output_format"], vertical=True)
125

  
126
            if options["list_quotas"]:
127
                self.stdout.write("\n")
128
                _, quotas, initial, _ = list_user_quotas([user])
129
                print_data, labels = show_quotas(quotas, initial)
130
                utils.pprint_table(self.stdout, print_data, labels,
131
                                   options["output_format"])

Also available in: Unified diff