Source code for wikibaseintegrator.datatypes.monolingualtext

import re
from typing import Any, Optional

from wikibaseintegrator.datatypes.basedatatype import BaseDataType
from wikibaseintegrator.wbi_config import config


[docs] class MonolingualText(BaseDataType): """ Implements the Wikibase data type for Monolingual Text strings """ DTYPE = 'monolingualtext' sparql_query = ''' SELECT * WHERE {{ ?item_id <{wb_url}/prop/{pid}> ?s . ?s <{wb_url}/prop/statement/{pid}> {value} . }} '''
[docs] def __init__(self, text: Optional[str] = None, language: Optional[str] = None, **kwargs: Any): """ Constructor, calls the superclass BaseDataType :param text: The language specific string to be used as the value. :param language: Specifies the language the value belongs to. """ super().__init__(**kwargs) self.set_value(text=text, language=language)
[docs] def set_value(self, text: Optional[str] = None, language: Optional[str] = None): language = language or str(config['DEFAULT_LANGUAGE']) assert isinstance(text, str) or text is None, f"Expected str, found {type(text)} ({text})" assert isinstance(language, str), f"Expected str, found {type(language)} ({language})" if text and ('\n' in text or '\r' in text): raise ValueError("MonolingualText text must not contain newline character") if text and language: self.mainsnak.datavalue = { 'value': { 'text': text, 'language': language }, 'type': 'monolingualtext' }
[docs] def get_sparql_value(self) -> str: return '"' + self.mainsnak.datavalue['value']['text'].replace('"', r'\"') + '"@' + self.mainsnak.datavalue['value']['language']
[docs] def parse_sparql_value(self, value, type='literal', unit='1') -> bool: pattern = re.compile(r'^"(.*?)"@([a-z\-]*)$') matches = pattern.match(value) if not matches: return False self.set_value(text=matches.group(1), language=matches.group(2)) return True