Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / user-set-initial-quota.py @ ff67242a

History | View | Annotate | Download (3.2 kB)

1 6c997921 Sofia Papagiannaki
# Copyright 2012 GRNET S.A. All rights reserved.
2 6c997921 Sofia Papagiannaki
#
3 6c997921 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 6c997921 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 6c997921 Sofia Papagiannaki
# conditions are met:
6 6c997921 Sofia Papagiannaki
#
7 6c997921 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 6c997921 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 6c997921 Sofia Papagiannaki
#      disclaimer.
10 6c997921 Sofia Papagiannaki
#
11 6c997921 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 6c997921 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 6c997921 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 6c997921 Sofia Papagiannaki
#      provided with the distribution.
15 6c997921 Sofia Papagiannaki
#
16 6c997921 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 6c997921 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 6c997921 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 6c997921 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 6c997921 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 6c997921 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 6c997921 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 6c997921 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 6c997921 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 6c997921 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 6c997921 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 6c997921 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 6c997921 Sofia Papagiannaki
#
29 6c997921 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 6c997921 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 6c997921 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 6c997921 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 6c997921 Sofia Papagiannaki
34 6c997921 Sofia Papagiannaki
import os
35 6c997921 Sofia Papagiannaki
36 6c997921 Sofia Papagiannaki
from optparse import make_option
37 6c997921 Sofia Papagiannaki
from collections import namedtuple
38 6c997921 Sofia Papagiannaki
39 6c997921 Sofia Papagiannaki
from django.core.management.base import BaseCommand, CommandError
40 6c997921 Sofia Papagiannaki
41 6c997921 Sofia Papagiannaki
from astakos.im.models import AstakosUser
42 6c997921 Sofia Papagiannaki
43 6c997921 Sofia Papagiannaki
AddResourceArgs = namedtuple('AddQuotaArgs', ('resource',
44 6c997921 Sofia Papagiannaki
                                              'quantity',
45 6c997921 Sofia Papagiannaki
                                              'capacity',
46 6c997921 Sofia Papagiannaki
                                              'import_limit',
47 6c997921 Sofia Papagiannaki
                                              'export_limit'))
48 6c997921 Sofia Papagiannaki
49 6c997921 Sofia Papagiannaki
class Command(BaseCommand):
50 6c997921 Sofia Papagiannaki
    help = "Import account quota policies"
51 6c997921 Sofia Papagiannaki
52 6c997921 Sofia Papagiannaki
    def handle(self, *args, **options):
53 6c997921 Sofia Papagiannaki
        if len(args) != 1:
54 6c997921 Sofia Papagiannaki
            raise CommandError('Invalid number of arguments')
55 6c997921 Sofia Papagiannaki
 
56 6c997921 Sofia Papagiannaki
        location = os.path.abspath(args[0])
57 6c997921 Sofia Papagiannaki
        try:
58 6c997921 Sofia Papagiannaki
            f = open(location, 'r')
59 6c997921 Sofia Papagiannaki
        except IOError, e:
60 6c997921 Sofia Papagiannaki
            raise CommandError(e)
61 6c997921 Sofia Papagiannaki
62 6c997921 Sofia Papagiannaki
        for line in f.readlines():
63 6c997921 Sofia Papagiannaki
            try:
64 6c997921 Sofia Papagiannaki
                t = line.rstrip('\n').split(' ')
65 6c997921 Sofia Papagiannaki
                user = t[0]
66 6c997921 Sofia Papagiannaki
                args = AddResourceArgs(*t[1:])
67 6c997921 Sofia Papagiannaki
            except(IndexError, TypeError):
68 6c997921 Sofia Papagiannaki
                self.stdout.write('Invalid line format: %s:\n' % t)
69 6c997921 Sofia Papagiannaki
                continue
70 6c997921 Sofia Papagiannaki
            else:
71 6c997921 Sofia Papagiannaki
                try:
72 6c997921 Sofia Papagiannaki
                    user = AstakosUser.objects.get(uuid=user)
73 6c997921 Sofia Papagiannaki
                except AstakosUser.DoesNotExist:
74 db0d5f6b Sofia Papagiannaki
                    self.stdout.write('Not found user having uuid: %s\n' % user)
75 6c997921 Sofia Papagiannaki
                    continue
76 6c997921 Sofia Papagiannaki
                else:
77 6c997921 Sofia Papagiannaki
                    try:
78 6c997921 Sofia Papagiannaki
                        user.add_resource_policy(*args)
79 6c997921 Sofia Papagiannaki
                    except Exception, e:
80 6c997921 Sofia Papagiannaki
                        self.stdout.write('Failed to policy: %s\n' % e)
81 6c997921 Sofia Papagiannaki
                        continue
82 6c997921 Sofia Papagiannaki
            finally:
83 6c997921 Sofia Papagiannaki
                f.close()