Projet

Général

Profil

Télécharger (3,49 ko) Statistiques
| Branche: | Tag: | Révision:

root / wcsinst / wcsinst / models.py @ 50d024d9

1
import json
2
import logging
3
import urllib2
4

    
5
from django.conf import settings
6
from django.db import models
7
from django.utils.translation import ugettext_lazy as _
8

    
9
logger = logging.getLogger(__name__)
10

    
11
class WcsInstance(models.Model):
12
    title = models.CharField(max_length=50, unique=True)
13
    domain = models.CharField(max_length=100, unique=True)
14

    
15
    # site-options.cfg options
16
    postgresql = models.BooleanField(verbose_name=_('postgresql'),
17
            blank=True)
18
    backoffice_feed_url = models.URLField(verbose_name=_('backoffice feed url'),
19
            blank=True, max_length=128)
20
    drupal = models.BooleanField(verbose_name=_('drupal'),
21
            blank=True)
22
    ezldap = models.BooleanField(verbose_name=_('ezldap'),
23
            blank=True)
24
    strongbox = models.BooleanField(verbose_name=_('strongbox'),
25
            blank=True)
26
    clicrdv = models.BooleanField(verbose_name=_('clicrdv'),
27
            blank=True)
28
    domino = models.BooleanField(verbose_name=_('domino'),
29
            blank=True)
30

    
31

    
32
    def __unicode__(self):
33
        return '%s (%s)' % (self.title, self.domain)
34

    
35
    def site_options_cfg(self):
36
        d = {
37
                'postgresql': self.postgresql,
38
                'backoffice_feed_url': self.backoffice_feed_url,
39
                'drupal': self.drupal,
40
                'ezldap': self.ezldap,
41
                'strongbox': self.strongbox,
42
                'clicrdv': self.clicrdv,
43
                'domino': self.domino,
44
        }
45
        d['api_secrets'] = dict((kv.key, kv.value) for kv in self.api_secrets.all())
46
        d['variables'] = dict((kv.key, kv.value) for kv in self.variables.all())
47
        return d
48

    
49
    def to_json(self):
50
        return {
51
                'title': self.title,
52
                'domain': self.domain,
53
                'site_options_cfg': self.site_options_cfg(),
54
        }
55

    
56
    def notify(self, created=True):
57
        # notify wcsinstd
58
        if not settings.WCSINSTD_URL:
59
            return
60
        if created:
61
            url = settings.WCSINSTD_URL + 'wcsinstd/create'
62
        else:
63
            url = settings.WCSINSTD_URL + 'wcsinstd/%s/' % self.domain
64
        post_data = json.dumps(self.to_json())
65
        request = urllib2.Request(url)
66
        request.add_header('Accept', 'application/json')
67
        request.add_header('Content-Type', 'application/json;charset=UTF-8')
68
        request.add_data(post_data)
69
        try:
70
            p = urllib2.urlopen(request)
71
        except urllib2.HTTPError as e:
72
            logger.error('wcsinstd HTTP error (%s)', str(e))
73
            print e.read()
74
        except urllib2.URLError as e:
75
            print e
76
            logger.error('wcsinstd URL error (%s)', str(e))
77
        else:
78
            out_data = p.read()
79
            p.close()
80

    
81
    def save(self, *args, **kwargs):
82
        created = (self.id is None)
83
        super(WcsInstance, self).save(*args, **kwargs)
84

    
85
    class Meta:
86
        verbose_name = _('wcs instance')
87
        verbose_name_plural = _('wcs instances')
88

    
89

    
90
class KeyValue(models.Model):
91
    key = models.CharField(max_length=128)
92
    value = models.CharField(max_length=1024, blank=True)
93

    
94
    class Meta:
95
        abstract = True
96

    
97

    
98
class Variable(KeyValue):
99
    wcs_instance = models.ForeignKey(WcsInstance, related_name='variables')
100

    
101
    class Meta:
102
        verbose_name = _('variable')
103
        verbose_name_plural = _('variables')
104

    
105

    
106
class ApiSecret(KeyValue):
107
    wcs_instance = models.ForeignKey(WcsInstance, related_name='api_secrets')
108

    
109
    class Meta:
110
        verbose_name = _('api secret')
111
        verbose_name_plural = _('api secrets')
112

    
113

    
(3-3/5)