diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-26 19:50:43 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-26 19:50:43 +0100 | 
| commit | 43b0c50accfa1017ee323ba121ac53920d1cdbf5 (patch) | |
| tree | 9f554b2e55dfa8a36209363c82ddaa4915c3448f /chimere/models.py | |
| parent | f769930eca0a0bbccf991e52c6c6abbba6414390 (diff) | |
| parent | a95b7d7e58b6d8e0847b9a49e3afe0ac7a939a39 (diff) | |
| download | Chimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.tar.bz2 Chimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.zip  | |
Merge branch 'master' into saclay
Conflicts:
	chimere/admin.py
	chimere/fixtures/initial_data.json
	chimere/forms.py
	chimere/locale/fr/LC_MESSAGES/django.po
	chimere/static/chimere/css/styles.css
	chimere/templates/chimere/blocks/alternate_multimedia.html
	chimere/templates/chimere/blocks/categories.html
	chimere/widgets.py
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 77 | 
1 files changed, 47 insertions, 30 deletions
diff --git a/chimere/models.py b/chimere/models.py index 183e22d..9113cfe 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -319,13 +319,12 @@ class Importer(models.Model):      '''      importer_type = models.CharField(_(u"Importer type"), max_length=4,                                       choices=IMPORTER_CHOICES) -    # URL of a KML file or a XAPI service for OSM -    source = models.CharField(_(u"Source"), max_length=200, +    filtr = models.CharField(_(u"Filter"), max_length=200, +                             blank=True, null=True) +    source = models.CharField(_(u"Web address"), max_length=200,                                blank=True, null=True)      source_file = models.FileField(_(u"Source file"),                          upload_to='import_files', blank=True, null=True) -    filtr = models.CharField(_(u"Filter"), max_length=200, -                             blank=True, null=True)      default_name = models.CharField(_(u"Name by default"), max_length=200,                                      blank=True, null=True)      srid = models.IntegerField(_(u"SRID"), blank=True, null=True) @@ -385,20 +384,19 @@ class GeographicItem(models.Model):      import_source = models.CharField(_(u"Source"), max_length=200,                                       blank=True, null=True)      modified_since_import = models.BooleanField(_(u"Modified since last import"), -                                                default=False) +                                                default=True)      not_for_osm = models.BooleanField(_(u"Not to be imported inside OSM"),                                        default=False)      origin = models.CharField(_(u"Origin"), max_length=100,                                blank=True, null=True)      license = models.CharField(_(u"License"), max_length=100,                                 blank=True, null=True) -    if settings.CHIMERE_DAYS_BEFORE_EVENT: -        start_date = models.DateField(_(u"Start date"), blank=True, null=True, -            help_text=_(u"Not mandatory. Set it for dated item such as event. "\ -                        u"Format YYYY-MM-DD")) -        end_date = models.DateField(_(u"End date"), blank=True, null=True, -            help_text=_(u"Not mandatory. Set it only if you have a multi-day "\ -                        u"event. Format YYYY-MM-DD")) +    start_date = models.DateField(_(u"Start date"), blank=True, null=True, +        help_text=_(u"Not mandatory. Set it for dated item such as event. "\ +                    u"Format YYYY-MM-DD")) +    end_date = models.DateField(_(u"End date"), blank=True, null=True, +        help_text=_(u"Not mandatory. Set it only if you have a multi-day "\ +                    u"event. Format YYYY-MM-DD"))      class Meta:          abstract = True @@ -713,7 +711,7 @@ class MultimediaType(models.Model):      def get_tuples(cls):          vals = cls.objects.filter(available=True).order_by('media_type',                                                             'name') -        tuples, c_tpe = [('', '--')], None +        tuples, c_tpe = [('', _("Automatic recognition"))], None          media_type_dct = dict(cls.MEDIA_TYPES)          for tpe, pk, name in [(media_type_dct[v.media_type], v.pk, v.name)                                for v in vals]: @@ -755,7 +753,7 @@ class MultimediaFile(models.Model):      name = models.CharField(_(u"Name"), max_length=150)      url = models.URLField(_(u"Url"), max_length=200)      order = models.IntegerField(_(u"Order"), default=1) -    multimedia_type = models.ForeignKey(MultimediaType) +    multimedia_type = models.ForeignKey(MultimediaType, blank=True, null=True)      miniature = models.BooleanField(_(u"Display inside the description?"),                                    default=settings.CHIMERE_MINIATURE_BY_DEFAULT)      marker = models.ForeignKey(Marker, related_name='multimedia_files') @@ -767,24 +765,40 @@ class MultimediaFile(models.Model):      def __unicode__(self):          return self.name or u"" -    def save(self, *args, **kwargs): -        # manage iframe of video providers -        if self.multimedia_type.name.lower() in IFRAME_LINKS: -            regexps, lnk = IFRAME_LINKS[self.multimedia_type.name.lower()] -            key = None -            for regexp in regexps: -                key = regexp.findall(self.url) -                if key: -                    key = key[0] -                    break -            if key: -                self.url = lnk % key -        super(MultimediaFile, self).save(*args, **kwargs) -  def multimediafile_post_save(sender, **kwargs):      if not kwargs['instance'] or not kwargs['created']:          return      multimediafile = kwargs['instance'] +    # auto recognition of file types +    if not multimediafile.multimedia_type: +        url = multimediafile.url +        for mm_type in IFRAME_LINKS: +            res, embeded_url = IFRAME_LINKS[mm_type] +            if [r for r in res if r.search(url)]: +                multimedia_type = MultimediaType.objects.get( +                                    name__iexact=mm_type) +                multimediafile.multimedia_type = multimedia_type +        if not multimediafile.multimedia_type: +            ext = url.split(".")[-1] +            q = MultimediaExtension.objects.filter(name__iendswith=ext) +            if q.count(): +                multimediafile.multimedia_type = q.all()[0].multimedia_type +            else: +                # default to an iframe +                multimediafile.multimedia_type = \ +                   MultimediaType.objects.filter(name__iexact='iframe').all()[0] +    # manage iframe of video providers +    if multimediafile.multimedia_type.name.lower() in IFRAME_LINKS: +        regexps, lnk = IFRAME_LINKS[multimediafile.multimedia_type.name.lower()] +        key = None +        for regexp in regexps: +            key = regexp.findall(multimediafile.url) +            if key: +                key = key[0] +                break +        if key: +            multimediafile.url = lnk % key +      mfs = MultimediaFile.objects.filter(marker=multimediafile.marker).exclude(                                          pk=multimediafile.pk).order_by('order')      for idx, mf in enumerate(mfs.all()): @@ -1093,7 +1107,7 @@ def route_post_save(sender, **kwargs):          marker_fields = [f.attname for f in Marker._meta.fields]          route_fields = [f.attname for f in Route._meta.fields]          marker_dct = dict([(k, getattr(instance, k)) for k in marker_fields -                           if k in route_fields and k not in ('id', 'ref_item_id')]) +                       if k in route_fields and k not in ('id', 'ref_item_id')])          marker_dct['point'] = "SRID=%d;POINT(%f %f)" % (instance.route.srid,                                    instance.route[0][0], instance.route[0][1])          marker, created = Marker.objects.get_or_create(route=instance, @@ -1233,7 +1247,10 @@ class SimpleArea:          inner join chimere_route_categories rc on rc.subcategory_id=subcat.id and          rc.route_id=rt.id'''          sql += where -        subcats.union(SubCategory.objects.raw(sql)) +        # subcats.union(set(SubCategory.objects.raw(sql))) +        # set union behave strangely. Doing it manualy... +        for c in set(SubCategory.objects.raw(sql)): +            subcats.add(c)          return subcats  class Layer(models.Model):  | 
