# HG changeset patch # User ymh # Date 1415930840 -3600 # Node ID 91c44b3fd11f440196b74724e18ad0add10e6956 # Parent 205804d9f14292d1ccfd61909bc1239ce6511b35 Correcterrors on missing dbpedia informations diff -r 205804d9f142 -r 91c44b3fd11f .settings/org.eclipse.core.resources.prefs --- 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 diff -r 205804d9f142 -r 91c44b3fd11f sbin/sync/config.py.tmpl --- 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" + diff -r 205804d9f142 -r 91c44b3fd11f src/hdalab/fields.py --- /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 diff -r 205804d9f142 -r 91c44b3fd11f src/hdalab/models/dataviz.py --- 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) diff -r 205804d9f142 -r 91c44b3fd11f src/hdalab/views/ajax.py --- 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]