Projet

Général

Profil

0001-implement-JSON-import-export-13887.patch

Benjamin Dauvergne, 17 janvier 2017 16:41

Télécharger (3,76 ko)

Voir les différences:

Subject: [PATCH] implement JSON import/export (#13887)

 passerelle_montpellier_encombrants/models.py | 65 ++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
passerelle_montpellier_encombrants/models.py
20 20

  
21 21
from passerelle.base.models import BaseResource
22 22

  
23

  
23 24
class EncombrantsManagement(BaseResource):
24 25
    category = _('Business Process Connectors')
25 26

  
......
41 42
    def get_add_url(cls):
42 43
        return reverse('montpellier-encombrants-add')
43 44

  
45
    def export_json(self):
46
        d = super(EncombrantsManagement, self).export_json()
47
        d['sectors'] = [sector.export_json() for sector in Sector.objects.all()]
48
        return d
49

  
50
    @classmethod
51
    def import_json_real(cls, d, **kwargs):
52
        sectors = d.pop('sectors', [])
53
        instance = super(EncombrantsManagement, cls).import_json_real(d, **kwargs)
54
        Sector.objects.delete()
55
        for sector in sectors:
56
            Sector.import_json(sector)
57
        return instance
58

  
44 59

  
45 60
class Sector(models.Model):
46 61
    contact_email = models.CharField(max_length=1024, blank=True,
......
56 71
            return '(%s)' % self.id
57 72
        return ', '.join([x.name for x in communes])
58 73

  
74
    def export_json(self):
75
        return {
76
            'contact_email': self.contact_email,
77
            'communes': [commune.export_json() for commune in Commune.objects.filter(sector=self)],
78
        }
79

  
80
    @classmethod
81
    def import_json(cls, d):
82
        d = d.copy()
83
        communes = d.pop('communes', [])
84
        sector = Sector.objects.get_or_create(**d)
85
        Commune.objects.filter(sector=sector).delete()
86
        for commune in communes:
87
            Commune.import_json(commune, sector=sector)
88

  
59 89

  
60 90
class Commune(models.Model):
61 91
    name = models.CharField(max_length=50, blank=False,
......
67 97
    def __unicode__(self):
68 98
        return u'%s (%s)' % (self.name, self.insee)
69 99

  
100
    def export_json(self):
101
        return {
102
            'name': self.name,
103
            'insee': self.insee,
104
            'streets': [street.export_json() for street in Street.objects.filter(commune=self)],
105
        }
106

  
107
    @classmethod
108
    def import_json(self, d, **kwargs):
109
        streets = d.pop('streets', [])
110
        kwargs.update(d)
111
        commune = Commune.objects.create(**kwargs)
112
        for street in streets:
113
            Street.import_json(street, commune=commune)
114

  
70 115

  
71 116
class Street(models.Model):
72 117
    commune = models.ForeignKey(Commune)
......
76 121
    def __unicode__(self):
77 122
        return '%s, %s' % (self.name, self.commune)
78 123

  
124
    def export_json(self):
125
        return {
126
            'name': self.name,
127
        }
128

  
129
    @classmethod
130
    def import_json(self, d, **kwargs):
131
        kwargs.update(d)
132
        return Street.objects.create(**kwargs)
133

  
79 134

  
80 135
class CollectDay(models.Model):
81 136
    sector = models.ForeignKey(Sector,
......
88 143

  
89 144
    def __unicode__(self):
90 145
        return '%s: %s' % (self.date, self.sector)
146

  
147
    def export_json(self):
148
        date = self.date.isoformat()
149
        if self.date.microsecond:
150
            date = date[:23] + date[26:]
151
        if date.endswith('+00:00'):
152
            date = date[:-6] + 'Z'
153
        return {
154
            'date': date,
155
        }
91
-