Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (4.1 kB)

1 eb765213 Giorgos Korfiatis
# Copyright 2012, 2013 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 eb765213 Giorgos Korfiatis
        make_option('--ui-url',
47 eb765213 Giorgos Korfiatis
                    dest='ui_url',
48 362ff471 Kostas Papadimitriou
                    default=None,
49 eb765213 Giorgos Korfiatis
                    help="Set UI URL"),
50 eb765213 Giorgos Korfiatis
        make_option('--base-url',
51 eb765213 Giorgos Korfiatis
                    dest='base_url',
52 eb765213 Giorgos Korfiatis
                    help="Set base URL"),
53 e72aa2da Kostas Papadimitriou
        make_option('--auth-token',
54 e72aa2da Kostas Papadimitriou
                    dest='auth_token',
55 e72aa2da Kostas Papadimitriou
                    default=None,
56 252eef38 Giorgos Korfiatis
                    help="Set a custom component auth token"),
57 d35dcdb8 Sofia Papagiannaki
        make_option('--renew-token',
58 e72aa2da Kostas Papadimitriou
                    action='store_true',
59 e72aa2da Kostas Papadimitriou
                    dest='renew_token',
60 e72aa2da Kostas Papadimitriou
                    default=False,
61 252eef38 Giorgos Korfiatis
                    help="Renew component auth token"),
62 eb90fc82 Giorgos Korfiatis
        make_option('--purge-services',
63 eb90fc82 Giorgos Korfiatis
                    action='store_true',
64 eb90fc82 Giorgos Korfiatis
                    dest='purge_services',
65 eb90fc82 Giorgos Korfiatis
                    default=False,
66 eb90fc82 Giorgos Korfiatis
                    help="Purge all services registered for this component"),
67 e72aa2da Kostas Papadimitriou
    )
68 e72aa2da Kostas Papadimitriou
69 e72aa2da Kostas Papadimitriou
    def handle(self, *args, **options):
70 e72aa2da Kostas Papadimitriou
        if len(args) != 1:
71 252eef38 Giorgos Korfiatis
            raise CommandError("Please provide a component ID or name")
72 e72aa2da Kostas Papadimitriou
73 252eef38 Giorgos Korfiatis
        ident = args[0]
74 e72aa2da Kostas Papadimitriou
        try:
75 252eef38 Giorgos Korfiatis
            try:
76 252eef38 Giorgos Korfiatis
                ident = int(ident)
77 252eef38 Giorgos Korfiatis
                component = Component.objects.get(id=ident)
78 252eef38 Giorgos Korfiatis
            except ValueError:
79 252eef38 Giorgos Korfiatis
                component = Component.objects.get(name=ident)
80 252eef38 Giorgos Korfiatis
        except Component.DoesNotExist:
81 22a46ee9 Giorgos Korfiatis
            raise CommandError(
82 252eef38 Giorgos Korfiatis
                "Component does not exist. You may run snf-manage "
83 252eef38 Giorgos Korfiatis
                "component-list for available component IDs.")
84 e72aa2da Kostas Papadimitriou
85 eb765213 Giorgos Korfiatis
        ui_url = options.get('ui_url')
86 eb765213 Giorgos Korfiatis
        base_url = options.get('base_url')
87 e72aa2da Kostas Papadimitriou
        auth_token = options.get('auth_token')
88 e72aa2da Kostas Papadimitriou
        renew_token = options.get('renew_token')
89 eb90fc82 Giorgos Korfiatis
        purge_services = options.get('purge_services')
90 e72aa2da Kostas Papadimitriou
91 eb765213 Giorgos Korfiatis
        if not any([ui_url, base_url, auth_token, renew_token,
92 eb765213 Giorgos Korfiatis
                    purge_services]):
93 7bffb44b Giorgos Korfiatis
            raise CommandError("No option specified.")
94 7bffb44b Giorgos Korfiatis
95 eb765213 Giorgos Korfiatis
        if ui_url:
96 eb765213 Giorgos Korfiatis
            component.url = ui_url
97 eb765213 Giorgos Korfiatis
98 eb765213 Giorgos Korfiatis
        if base_url:
99 eb765213 Giorgos Korfiatis
            component.base_url = base_url
100 362ff471 Kostas Papadimitriou
101 e72aa2da Kostas Papadimitriou
        if auth_token:
102 252eef38 Giorgos Korfiatis
            component.auth_token = auth_token
103 e72aa2da Kostas Papadimitriou
104 e72aa2da Kostas Papadimitriou
        if renew_token and not auth_token:
105 252eef38 Giorgos Korfiatis
            component.renew_token()
106 7ac2131c Sofia Papagiannaki
107 252eef38 Giorgos Korfiatis
        component.save()
108 e72aa2da Kostas Papadimitriou
109 eb90fc82 Giorgos Korfiatis
        if purge_services:
110 eb90fc82 Giorgos Korfiatis
            component.service_set.all().delete()
111 eb90fc82 Giorgos Korfiatis
112 d35dcdb8 Sofia Papagiannaki
        if renew_token:
113 d35dcdb8 Sofia Papagiannaki
            self.stdout.write(
114 252eef38 Giorgos Korfiatis
                'Component\'s new token: %s\n' % component.auth_token
115 d35dcdb8 Sofia Papagiannaki
            )