Revision 54ae949d snf-app/synnefo/tools/admin.py
b/snf-app/synnefo/tools/admin.py | ||
---|---|---|
50 | 50 |
from os.path import basename |
51 | 51 |
|
52 | 52 |
from synnefo.db import models |
53 |
from synnefo.invitations.invitations import add_invitation, send_invitation |
|
54 | 53 |
from synnefo.logic import backend, users |
55 | 54 |
from synnefo.plankton.backend import ImageBackend |
56 | 55 |
from synnefo.util.dictconfig import dictConfig |
... | ... | |
188 | 187 |
print_item(user) |
189 | 188 |
|
190 | 189 |
|
191 |
class InviteUser(Command): |
|
192 |
group = 'user' |
|
193 |
name = 'invite' |
|
194 |
syntax = '<inviter id> <invitee name> <invitee email>' |
|
195 |
description = 'invite a user' |
|
196 |
|
|
197 |
def main(self, inviter_id, name, email): |
|
198 |
name = name.decode('utf8') |
|
199 |
inviter = get_user(inviter_id) |
|
200 |
inv = add_invitation(inviter, name, email) |
|
201 |
send_invitation(inv) |
|
202 |
|
|
203 |
|
|
204 | 190 |
class ListUsers(Command): |
205 | 191 |
group = 'user' |
206 | 192 |
name = 'list' |
... | ... | |
233 | 219 |
types = ', '.join(x[0] for x in models.SynnefoUser.ACCOUNT_TYPE) |
234 | 220 |
states = ', '.join(x[0] for x in models.SynnefoUser.ACCOUNT_STATE) |
235 | 221 |
|
236 |
parser.add_option('--credit', dest='credit', metavar='VALUE', |
|
237 |
help='set user credits') |
|
238 |
parser.add_option('--invitations', dest='invitations', |
|
239 |
metavar='VALUE', help='set max invitations') |
|
240 | 222 |
parser.add_option('--realname', dest='realname', metavar='NAME', |
241 | 223 |
help='set real name of user') |
242 | 224 |
parser.add_option('--type', dest='type', metavar='TYPE', |
... | ... | |
251 | 233 |
def main(self, user_id): |
252 | 234 |
user = get_user(user_id) |
253 | 235 |
|
254 |
if self.credit: |
|
255 |
user.credit = self.credit |
|
256 |
if self.invitations: |
|
257 |
user.max_invitations = self.invitations |
|
258 | 236 |
if self.realname: |
259 | 237 |
user.realname = self.realname |
260 | 238 |
if self.type: |
... | ... | |
750 | 728 |
stats['Flavors'] = models.Flavor.objects.count() |
751 | 729 |
stats['VMs'] = models.VirtualMachine.objects.filter(deleted=False).count() |
752 | 730 |
stats['Networks'] = models.Network.objects.exclude(state='DELETED').count() |
753 |
stats['Invitations'] = models.Invitations.objects.count() |
|
754 | 731 |
|
755 | 732 |
stats['Ganeti Instances'] = len(backend.get_ganeti_instances()) |
756 | 733 |
stats['Ganeti Nodes'] = len(backend.get_ganeti_nodes()) |
... | ... | |
759 | 736 |
print_dict(stats) |
760 | 737 |
|
761 | 738 |
|
762 |
class ListInvitations(Command): |
|
763 |
group = 'invitation' |
|
764 |
name = 'list' |
|
765 |
syntax = '[invitation id]' |
|
766 |
description = 'list invitations' |
|
767 |
|
|
768 |
def main(self, invitation_id=None): |
|
769 |
if invitation_id: |
|
770 |
invitations = [models.Invitations.objects.get(id=invitation_id)] |
|
771 |
else: |
|
772 |
invitations = models.Invitations.objects.order_by('id') |
|
773 |
print_items(invitations, detail=True, keys=('id',)) |
|
774 |
|
|
775 |
|
|
776 |
class ResendInviation(Command): |
|
777 |
group = 'invitation' |
|
778 |
name = 'resend' |
|
779 |
syntax = '<invitation id>' |
|
780 |
description = 'resend an invitation' |
|
781 |
|
|
782 |
def main(self, invitation_id): |
|
783 |
invitation = models.Invitations.objects.get(id=invitation_id) |
|
784 |
send_invitation(invitation) |
|
785 |
|
|
786 |
|
|
787 | 739 |
def print_usage(exe, groups, group=None, shortcut=False): |
788 | 740 |
nop = Command(exe, []) |
789 | 741 |
nop.parser.print_help() |
Also available in: Unified diff