Source code for wikibaseintegrator.datatypes.geoshape

import re
from typing import Any, Optional

from wikibaseintegrator.datatypes.basedatatype import BaseDataType


[docs] class GeoShape(BaseDataType): """ Implements the Wikibase data type 'geo-shape' """ DTYPE = 'geo-shape' sparql_query = ''' SELECT * WHERE {{ ?item_id <{wb_url}/prop/{pid}> ?s . ?s <{wb_url}/prop/statement/{pid}> <{value}> . }} '''
[docs] def __init__(self, value: Optional[str] = None, **kwargs: Any): """ Constructor, calls the superclass BaseDataType :param value: The GeoShape map file name in Wikimedia Commons to be linked :param kwargs: :Keyword Arguments: * *prop_nr* (``str``) -- The item ID for this claim * *snaktype* (``str``) -- The snak type, either 'value', 'somevalue' or 'novalue' * *references* (``References`` or list of ``Claim``) -- List with reference objects * *qualifiers* (``Qualifiers``) -- List with qualifier objects * *rank* (``WikibaseRank``) -- The snak type, either 'value', 'somevalue' or 'novalue' """ super().__init__(**kwargs) self.set_value(value=value)
[docs] def set_value(self, value: Optional[str] = None): assert isinstance(value, str) or value is None, f"Expected str, found {type(value)} ({value})" if value: # TODO: Need to check if the value is a full URl like http://commons.wikimedia.org/data/main/Data:Paris.map pattern = re.compile(r'^Data:((?![:|#]).)+\.map$') matches = pattern.match(value) if not matches: raise ValueError("Value must start with Data: and end with .map. In addition title should not contain characters like colon, hash or pipe.") self.mainsnak.datavalue = { 'value': value, 'type': 'string' }