summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
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
commit43b0c50accfa1017ee323ba121ac53920d1cdbf5 (patch)
tree9f554b2e55dfa8a36209363c82ddaa4915c3448f /chimere/models.py
parentf769930eca0a0bbccf991e52c6c6abbba6414390 (diff)
parenta95b7d7e58b6d8e0847b9a49e3afe0ac7a939a39 (diff)
downloadChimè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.py77
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):