--- a/.settings/org.eclipse.core.resources.prefs Thu Nov 13 16:07:22 2014 +0100
+++ b/.settings/org.eclipse.core.resources.prefs Fri Nov 14 03:07:20 2014 +0100
@@ -23,6 +23,7 @@
encoding//src/hdabo/wp_utils.py=utf-8
encoding//src/hdalab/__init__.py=utf-8
encoding//src/hdalab/config.py=utf-8
+encoding//src/hdalab/fields.py=utf-8
encoding//src/hdalab/manage.py=utf-8
encoding//src/hdalab/management/commands/export_tags_csv.py=utf-8
encoding//src/hdalab/management/commands/export_wpcategory_csv.py=utf-8
--- a/sbin/sync/config.py.tmpl Thu Nov 13 16:07:22 2014 +0100
+++ b/sbin/sync/config.py.tmpl Fri Nov 14 03:07:20 2014 +0100
@@ -14,8 +14,8 @@
env.export_prefix = "hdalab"
env.remote_path = {
- 'web':"/iridata/www/iri-research/lab/hdalab/",
- 'src':"/Users/ymh/dev/tmp/testfab/src",
+ 'web':"/iridata/www/iri-research/lab/hdalab/web",
+ 'src':"/iridata/virtualenv/hdalab2/src",
'virtualenv':"/iridata/virtualenv/hdalab2",
'build_export':"/iridata/users/iri/tmp/build",
'venv_export':"/iridata/users/iri/tmp/venv",
@@ -63,3 +63,5 @@
},
}
+env.settings = "hdalab.settings"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/fields.py Fri Nov 14 03:07:20 2014 +0100
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Nov 14, 2014
+
+from https://gist.github.com/gsakkis/601977
+to correct https://code.djangoproject.com/ticket/10227
+
+@author: ymh
+'''
+from django.db import models
+from django.db.models import fields as django_fields
+from django.core.exceptions import ObjectDoesNotExist
+
+
+class OneToOneField(models.OneToOneField):
+ def __init__(self, to, **kwargs):
+ self.related_default = kwargs.pop('related_default', None)
+ super(OneToOneField, self).__init__(to, **kwargs)
+
+ def contribute_to_related_class(self, cls, related):
+ setattr(cls, related.get_accessor_name(),
+ SingleRelatedObjectDescriptor(related, self.related_default))
+
+
+class SingleRelatedObjectDescriptor(django_fields.related.SingleRelatedObjectDescriptor):
+ def __init__(self, related, default):
+ super(SingleRelatedObjectDescriptor, self).__init__(related)
+ self.default = default
+
+ def __get__(self, instance, instance_type=None):
+ try:
+ return super(SingleRelatedObjectDescriptor, self).__get__(instance,
+ instance_type)
+ except ObjectDoesNotExist:
+ if self.default is None:
+ raise
+ value = self.default(instance)
+ setattr(instance, self.cache_name, value)
+ if value is not None:
+ setattr(value, self.related.field.get_cache_name(), instance)
+ return value
\ No newline at end of file
--- a/src/hdalab/models/dataviz.py Thu Nov 13 16:07:22 2014 +0100
+++ b/src/hdalab/models/dataviz.py Fri Nov 14 03:07:20 2014 +0100
@@ -4,8 +4,10 @@
@author: ymh
'''
+from hdabo.models import Tag, Datasheet
+from hdalab import fields
+
from django.db import models
-from hdabo.models import Tag, Datasheet
class TagYears(models.Model):
@@ -44,7 +46,7 @@
class DbpediaFields(models.Model):
dbpedia_uri = models.URLField(max_length=2048, blank=False, null=False, db_index=True, unique=False)
- tag = models.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields")
+ tag = fields.OneToOneField(Tag, blank=True, null=True, db_index=True, related_name="dbpedia_fields", related_default=lambda instance: None)
abstract = models.TextField(blank=True, null=True)
thumbnail = models.URLField(max_length=2048, blank=True, null=True, db_index=False)
label = models.CharField(max_length=2048, unique=False, blank=True, null=True)
--- a/src/hdalab/views/ajax.py Thu Nov 13 16:07:22 2014 +0100
+++ b/src/hdalab/views/ajax.py Fri Nov 14 03:07:20 2014 +0100
@@ -407,9 +407,9 @@
translations = dict([(trans.master_id,trans.label) for trans in transqs])
tags = [{'id': tag.id,
- 'label': tag.label,
+ 'label': tag.label,
'score': tag.nb,
- 'thumbnail': dbpediafields[tag.id].thumbnail,
+ 'thumbnail': dbpediafields[tag.id].thumbnail if tag.id in dbpediafields else None,
'translated_label': translations.get(dbpediafields[tag.id].id, tag.label) if tag.id in dbpediafields else tag.label,
'url': tag.dbpedia_uri} for tag in tagqslist]
@@ -419,7 +419,8 @@
discqslist = list(discqs.annotate(nb=Count('taggedsheet')).order_by('-nb')[:10])
if lang not in no_translate_langs:
- transqs = DbpediaFieldsTranslation.objects.filter(master__in = [tag.dbpedia_fields for tag in discqslist], language_code = lang)
+ list_dbpediafields = [tag.dbpedia_fields for tag in discqslist if tag.dbpedia_fields is not None]
+ transqs = DbpediaFieldsTranslation.objects.filter(master__in = list_dbpediafields, language_code = lang)
translations = dict([(trans.master_id,trans.label) for trans in transqs])
disciplines = [{'label':tag.label,'score':tag.nb, 'translated_label': translations.get(tag.dbpedia_fields.id, tag.label) if tag.dbpedia_fields is not None else tag.label} for tag in discqslist]