Correcterrors on missing dbpedia informations
authorymh <ymh.work@gmail.com>
Fri, 14 Nov 2014 03:07:20 +0100
changeset 353 91c44b3fd11f
parent 352 205804d9f142
child 354 39c68c53cc91
Correcterrors on missing dbpedia informations
.settings/org.eclipse.core.resources.prefs
sbin/sync/config.py.tmpl
src/hdalab/fields.py
src/hdalab/models/dataviz.py
src/hdalab/views/ajax.py
--- 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]