Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / component-modify.py @ d758784b

History | View | Annotate | Download (3.8 kB)

1 e72aa2da Kostas Papadimitriou
# Copyright 2012 GRNET S.A. All rights reserved.
2 e72aa2da Kostas Papadimitriou
#
3 e72aa2da Kostas Papadimitriou
# Redistribution and use in source and binary forms, with or
4 e72aa2da Kostas Papadimitriou
# without modification, are permitted provided that the following
5 e72aa2da Kostas Papadimitriou
# conditions are met:
6 e72aa2da Kostas Papadimitriou
#
7 e72aa2da Kostas Papadimitriou
#   1. Redistributions of source code must retain the above
8 e72aa2da Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
9 e72aa2da Kostas Papadimitriou
#      disclaimer.
10 e72aa2da Kostas Papadimitriou
#
11 e72aa2da Kostas Papadimitriou
#   2. Redistributions in binary form must reproduce the above
12 e72aa2da Kostas Papadimitriou
#      copyright notice, this list of conditions and the following
13 e72aa2da Kostas Papadimitriou
#      disclaimer in the documentation and/or other materials
14 e72aa2da Kostas Papadimitriou
#      provided with the distribution.
15 e72aa2da Kostas Papadimitriou
#
16 e72aa2da Kostas Papadimitriou
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 e72aa2da Kostas Papadimitriou
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 e72aa2da Kostas Papadimitriou
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 e72aa2da Kostas Papadimitriou
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 e72aa2da Kostas Papadimitriou
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 e72aa2da Kostas Papadimitriou
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 e72aa2da Kostas Papadimitriou
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 e72aa2da Kostas Papadimitriou
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 e72aa2da Kostas Papadimitriou
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 e72aa2da Kostas Papadimitriou
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 e72aa2da Kostas Papadimitriou
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 e72aa2da Kostas Papadimitriou
# POSSIBILITY OF SUCH DAMAGE.
28 e72aa2da Kostas Papadimitriou
#
29 e72aa2da Kostas Papadimitriou
# The views and conclusions contained in the software and
30 e72aa2da Kostas Papadimitriou
# documentation are those of the authors and should not be
31 e72aa2da Kostas Papadimitriou
# interpreted as representing official policies, either expressed
32 e72aa2da Kostas Papadimitriou
# or implied, of GRNET S.A.
33 e72aa2da Kostas Papadimitriou
34 e72aa2da Kostas Papadimitriou
from optparse import make_option
35 e72aa2da Kostas Papadimitriou
36 e72aa2da Kostas Papadimitriou
from django.core.management.base import BaseCommand, CommandError
37 e72aa2da Kostas Papadimitriou
38 252eef38 Giorgos Korfiatis
from astakos.im.models import Component
39 e72aa2da Kostas Papadimitriou
40 e72aa2da Kostas Papadimitriou
41 e72aa2da Kostas Papadimitriou
class Command(BaseCommand):
42 252eef38 Giorgos Korfiatis
    args = "<component ID or name>"
43 252eef38 Giorgos Korfiatis
    help = "Modify component attributes"
44 e72aa2da Kostas Papadimitriou
45 e72aa2da Kostas Papadimitriou
    option_list = BaseCommand.option_list + (
46 362ff471 Kostas Papadimitriou
        make_option('--url',
47 362ff471 Kostas Papadimitriou
                    dest='url',
48 362ff471 Kostas Papadimitriou
                    default=None,
49 252eef38 Giorgos Korfiatis
                    help="Set component url"),
50 e72aa2da Kostas Papadimitriou
        make_option('--auth-token',
51 e72aa2da Kostas Papadimitriou
                    dest='auth_token',
52 e72aa2da Kostas Papadimitriou
                    default=None,
53 252eef38 Giorgos Korfiatis
                    help="Set a custom component auth token"),
54 d35dcdb8 Sofia Papagiannaki
        make_option('--renew-token',
55 e72aa2da Kostas Papadimitriou
                    action='store_true',
56 e72aa2da Kostas Papadimitriou
                    dest='renew_token',
57 e72aa2da Kostas Papadimitriou
                    default=False,
58 252eef38 Giorgos Korfiatis
                    help="Renew component auth token"),
59 eb90fc82 Giorgos Korfiatis
        make_option('--purge-services',
60 eb90fc82 Giorgos Korfiatis
                    action='store_true',
61 eb90fc82 Giorgos Korfiatis
                    dest='purge_services',
62 eb90fc82 Giorgos Korfiatis
                    default=False,
63 eb90fc82 Giorgos Korfiatis
                    help="Purge all services registered for this component"),
64 e72aa2da Kostas Papadimitriou
    )
65 e72aa2da Kostas Papadimitriou
66 e72aa2da Kostas Papadimitriou
    def handle(self, *args, **options):
67 e72aa2da Kostas Papadimitriou
        if len(args) != 1:
68 252eef38 Giorgos Korfiatis
            raise CommandError("Please provide a component ID or name")
69 e72aa2da Kostas Papadimitriou
70 252eef38 Giorgos Korfiatis
        ident = args[0]
71 e72aa2da Kostas Papadimitriou
        try:
72 252eef38 Giorgos Korfiatis
            try:
73 252eef38 Giorgos Korfiatis
                ident = int(ident)
74 252eef38 Giorgos Korfiatis
                component = Component.objects.get(id=ident)
75 252eef38 Giorgos Korfiatis
            except ValueError:
76 252eef38 Giorgos Korfiatis
                component = Component.objects.get(name=ident)
77 252eef38 Giorgos Korfiatis
        except Component.DoesNotExist:
78 22a46ee9 Giorgos Korfiatis
            raise CommandError(
79 252eef38 Giorgos Korfiatis
                "Component does not exist. You may run snf-manage "
80 252eef38 Giorgos Korfiatis
                "component-list for available component IDs.")
81 e72aa2da Kostas Papadimitriou
82 362ff471 Kostas Papadimitriou
        url = options.get('url')
83 e72aa2da Kostas Papadimitriou
        auth_token = options.get('auth_token')
84 e72aa2da Kostas Papadimitriou
        renew_token = options.get('renew_token')
85 eb90fc82 Giorgos Korfiatis
        purge_services = options.get('purge_services')
86 e72aa2da Kostas Papadimitriou
87 7bffb44b Giorgos Korfiatis
        if not any([url, auth_token, renew_token, purge_services]):
88 7bffb44b Giorgos Korfiatis
            raise CommandError("No option specified.")
89 7bffb44b Giorgos Korfiatis
90 362ff471 Kostas Papadimitriou
        if url:
91 252eef38 Giorgos Korfiatis
            component.url = url
92 362ff471 Kostas Papadimitriou
93 e72aa2da Kostas Papadimitriou
        if auth_token:
94 252eef38 Giorgos Korfiatis
            component.auth_token = auth_token
95 e72aa2da Kostas Papadimitriou
96 e72aa2da Kostas Papadimitriou
        if renew_token and not auth_token:
97 252eef38 Giorgos Korfiatis
            component.renew_token()
98 7ac2131c Sofia Papagiannaki
99 252eef38 Giorgos Korfiatis
        component.save()
100 e72aa2da Kostas Papadimitriou
101 eb90fc82 Giorgos Korfiatis
        if purge_services:
102 eb90fc82 Giorgos Korfiatis
            component.service_set.all().delete()
103 eb90fc82 Giorgos Korfiatis
104 d35dcdb8 Sofia Papagiannaki
        if renew_token:
105 d35dcdb8 Sofia Papagiannaki
            self.stdout.write(
106 252eef38 Giorgos Korfiatis
                'Component\'s new token: %s\n' % component.auth_token
107 d35dcdb8 Sofia Papagiannaki
            )