Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / management / commands / service-add.py @ df456124

History | View | Annotate | Download (3.8 kB)

1
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from optparse import make_option
35
import string
36

    
37
from django.core.management.base import BaseCommand, CommandError
38
from django.db.utils import IntegrityError
39

    
40
from astakos.im.models import Service
41

    
42

    
43
class Command(BaseCommand):
44
    args = "<name> <service URL> <API URL> "
45
    help = "Register a service"
46

    
47
    option_list = BaseCommand.option_list + (
48
        make_option('--type',
49
                    dest='type',
50
                    help="Service type"),
51
        make_option('-f', '--no-confirm',
52
                    action='store_true',
53
                    default=False,
54
                    dest='force',
55
                    help="Do not ask for confirmation"),
56
    )
57

    
58
    def handle(self, *args, **options):
59
        if len(args) < 2:
60
            raise CommandError("Invalid number of arguments")
61

    
62
        name = args[0]
63
        url = args[1]
64
        api_url = args[2]
65
        kwargs = dict(name=name, url=url, api_url=api_url)
66
        s_type = options['type']
67
        if s_type:
68
            kwargs['type'] = s_type
69

    
70
        try:
71
            s = Service.objects.get(name=name)
72
            m = "There already exists service named '%s'." % name
73
            raise CommandError(m)
74
        except Service.DoesNotExist:
75
            pass
76

    
77
        services = list(Service.objects.filter(url=url))
78
        if services:
79
            m = "Service URL '%s' is registered for another service." % url
80
            raise CommandError(m)
81

    
82
        services = list(Service.objects.filter(api_url=api_url))
83
        if services:
84
            m = "API URL '%s' is registered for another service." % api_url
85
            raise CommandError(m)
86

    
87
        force = options['force']
88
        if not force:
89
            tp = (' of type %s' % s_type) if s_type else ''
90
            self.stdout.write("Add service %s%s with:\n" % (name, tp))
91
            self.stdout.write("service URL: %s\n" % url)
92
            self.stdout.write("API URL: %s\n" % api_url)
93
            self.stdout.write("Confirm? (y/n) ")
94
            response = raw_input()
95
            if string.lower(response) not in ['y', 'yes']:
96
                self.stdout.write("Aborted.\n")
97
                return
98

    
99
        try:
100
            s = Service.objects.create(**kwargs)
101
        except BaseException:
102
            raise CommandError("Failed to create service.")
103
        else:
104
            self.stdout.write('Token: %s\n' % s.auth_token)