def _do_create_from_json(
cls, json, parse_def, context,
duplicate_handling=None, object_importer=None):
# Special case for JSON-LD
added = False
ls = cls()
def guess_lang(value):
from .discussion import Discussion
discussion = context.get_instance_of_class(Discussion)
if discussion:
tr_service = discussion.translation_service()
lang, _ = tr_service.identify(value)
return LocaleLabel.UNDEFINED
if isinstance(json, list):
for entry_record in json:
value = entry_record['@value']
if value:
added = True
lang = entry_record.get('@language', None) or guess_lang(value)
ls.add_value(value, lang)
elif isinstance(json, dict):
if '@id' in json or '@type' in json:
return super(LangString, cls)._do_create_from_json(
json, parse_def, context,
duplicate_handling, object_importer)
elif '@value' in json:
value = json['@value']
if value:
added = True
lang = json.get('@language', None) or guess_lang(value)
ls.add_value(value, lang)
else:
for lang, value in json.items():
if value:
added = True
ls.add_value(value, lang)
elif isinstance(json, string_types):
if json:
added = True
lang = guess_lang(json)
ls.add_value(json, lang)
else:
raise ValueError("Not a valid langstring: " + json)
i_context = ls.get_instance_context(context)
if added:
cls.default_db.add(ls)
else:
i_context._instance = None
return i_context
评论列表
文章目录