diff options
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): |
