From 2928dfcee1139d97cf3e31b73a624b12f659f5a7 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 17 Jan 2017 16:39:12 +0100 Subject: [PATCH] implement JSON import/export (#13887) --- passerelle_montpellier_encombrants/models.py | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/passerelle_montpellier_encombrants/models.py b/passerelle_montpellier_encombrants/models.py index ee0f767..a06214c 100644 --- a/passerelle_montpellier_encombrants/models.py +++ b/passerelle_montpellier_encombrants/models.py @@ -20,6 +20,7 @@ from django.utils.translation import ugettext_lazy as _ from passerelle.base.models import BaseResource + class EncombrantsManagement(BaseResource): category = _('Business Process Connectors') @@ -41,6 +42,20 @@ class EncombrantsManagement(BaseResource): def get_add_url(cls): return reverse('montpellier-encombrants-add') + def export_json(self): + d = super(EncombrantsManagement, self).export_json() + d['sectors'] = [sector.export_json() for sector in Sector.objects.all()] + return d + + @classmethod + def import_json_real(cls, d, **kwargs): + sectors = d.pop('sectors', []) + instance = super(EncombrantsManagement, cls).import_json_real(d, **kwargs) + Sector.objects.delete() + for sector in sectors: + Sector.import_json(sector) + return instance + class Sector(models.Model): contact_email = models.CharField(max_length=1024, blank=True, @@ -56,6 +71,21 @@ class Sector(models.Model): return '(%s)' % self.id return ', '.join([x.name for x in communes]) + def export_json(self): + return { + 'contact_email': self.contact_email, + 'communes': [commune.export_json() for commune in Commune.objects.filter(sector=self)], + } + + @classmethod + def import_json(cls, d): + d = d.copy() + communes = d.pop('communes', []) + sector = Sector.objects.get_or_create(**d) + Commune.objects.filter(sector=sector).delete() + for commune in communes: + Commune.import_json(commune, sector=sector) + class Commune(models.Model): name = models.CharField(max_length=50, blank=False, @@ -67,6 +97,21 @@ class Commune(models.Model): def __unicode__(self): return u'%s (%s)' % (self.name, self.insee) + def export_json(self): + return { + 'name': self.name, + 'insee': self.insee, + 'streets': [street.export_json() for street in Street.objects.filter(commune=self)], + } + + @classmethod + def import_json(self, d, **kwargs): + streets = d.pop('streets', []) + kwargs.update(d) + commune = Commune.objects.create(**kwargs) + for street in streets: + Street.import_json(street, commune=commune) + class Street(models.Model): commune = models.ForeignKey(Commune) @@ -76,6 +121,16 @@ class Street(models.Model): def __unicode__(self): return '%s, %s' % (self.name, self.commune) + def export_json(self): + return { + 'name': self.name, + } + + @classmethod + def import_json(self, d, **kwargs): + kwargs.update(d) + return Street.objects.create(**kwargs) + class CollectDay(models.Model): sector = models.ForeignKey(Sector, @@ -88,3 +143,13 @@ class CollectDay(models.Model): def __unicode__(self): return '%s: %s' % (self.date, self.sector) + + def export_json(self): + date = self.date.isoformat() + if self.date.microsecond: + date = date[:23] + date[26:] + if date.endswith('+00:00'): + date = date[:-6] + 'Z' + return { + 'date': date, + } -- 2.1.4