Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions ckanext/dcat/profiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,18 @@ def _object_value(self, subject, predicate):

If found, the unicode representation is returned, else an empty string
'''
default_lang = config.get('ckan.locale_default', 'en')
fallback = ''
for o in self.g.objects(subject, predicate):
return unicode(o)
return ''
if isinstance(o, Literal):
if o.language and o.language == default_lang:
return unicode(o)
# Use first object as fallback if no object with the default language is available
elif fallback == '':
fallback = unicode(o)
else:
return unicode(o)
return fallback

def _object_value_int(self, subject, predicate):
'''
Expand Down
56 changes: 56 additions & 0 deletions ckanext/dcat/tests/test_base_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from rdflib import Graph, URIRef, Literal
from rdflib.namespace import Namespace

from ckantoolkit.tests import helpers

from ckanext.dcat.profiles import RDFProfile, CleanedURIRef

from ckanext.dcat.tests.test_base_parser import _default_graph
Expand Down Expand Up @@ -113,6 +115,60 @@ def test_object_value_not_found(self):

eq_(value, '')

@helpers.change_config('ckan.locale_default', 'de')
def test_object_value_default_lang(self):
p = RDFProfile(_default_graph())

p.g.add((URIRef('http://example.org/datasets/1'),
DCT.title, Literal('Test Datensatz 1', lang='de')))
p.g.add((URIRef('http://example.org/datasets/1'),
DCT.title, Literal('Test Dataset 1 (EN)', lang='en')))

value = p._object_value(URIRef('http://example.org/datasets/1'),
DCT.title)

assert isinstance(value, unicode)
eq_(value, 'Test Datensatz 1')

@helpers.change_config('ckan.locale_default', 'fr')
def test_object_value_default_lang_not_in_graph(self):
p = RDFProfile(_default_graph())

p.g.add((URIRef('http://example.org/datasets/1'),
DCT.title, Literal('Test Datensatz 1', lang='de')))

value = p._object_value(URIRef('http://example.org/datasets/1'),
DCT.title)

assert isinstance(value, unicode)
# FR is not in graph, so either node may be used
assert value.startswith('Test D')
assert value.endswith(' 1')

def test_object_value_default_lang_fallback(self):
p = RDFProfile(_default_graph())

p.g.add((URIRef('http://example.org/datasets/1'),
DCT.title, Literal('Test Datensatz 1', lang='de')))
p.g.add((URIRef('http://example.org/datasets/1'),
DCT.title, Literal('Test Dataset 1 (EN)', lang='en')))

value = p._object_value(URIRef('http://example.org/datasets/1'),
DCT.title)

assert isinstance(value, unicode)
# without config parameter, EN is used as default
eq_(value, 'Test Dataset 1 (EN)')

def test_object_value_default_lang_missing_lang_param(self):
p = RDFProfile(_default_graph())

value = p._object_value(URIRef('http://example.org/datasets/1'),
DCT.title)

assert isinstance(value, unicode)
eq_(value, 'Test Dataset 1')

def test_object_int(self):

p = RDFProfile(_default_graph())
Expand Down