def test_nodes_literal(self): lit = Literal('name', 'en', LiteralType.string) lit2 = Literal('nombre', 'es') lit3 = Literal('name', 'en', 'xsd:string') self.assertNotEqual(lit, lit2) self.assertEqual(lit, lit3) self.assertEqual(len({lit, lit2, lit3}), 2) self.assertEqual(lit.type, LiteralType('xsd:string')) self.assertEqual(lit.raw_type, LiteralType.string.value) self.assertTrue(lit.is_valid())
class TimeValue(DataValue): type = URI('wikibase:Time') def __init__(self, value, calendar, precision, time_zone): super().__init__() self.value = Literal(value, type_=LiteralType.dateTime) if not self.value.is_valid(): raise ValueError('Invalid datetime format') self._calendar = calendar if isinstance(precision, Precision): self._precision = precision.value elif isinstance(precision, Literal): self._precision = precision else: self._precision = Literal(str(precision), type_=LiteralType.integer) if isinstance(time_zone, Literal): self._time_zone = time_zone else: self._time_zone = Literal(str(time_zone), type_=LiteralType.integer) self.__build_full_value() def __build_full_value(self): self._create_full_value() self.full_value.add_property(URI('rdf:type'), URI('wikibase:Time')) self.full_value.add_property(URI('wikibase:timePrecision'), self._precision) self.full_value.add_property(URI('wikibase:timeTimezone'), self._time_zone) self.full_value.add_property(URI('wikibase:timeCalendarModel'), self._calendar.value) self.full_value.add_property(URI('wikibase:timeValue'), self.value) # TODO fix import bug # if not self.value.startswith("+"): # self.full_value.add_property(URI('wikibase:timeValue'), self.value) # else: # self.full_value.add_property(URI('wikibase:timeValue'), self.value[1:]) def _v_name(self): time = self.value.value.replace(':', '').replace(' ', '-') calendar = self._calendar.value.value[3] precision = self._precision.value time_zone = self._time_zone.value return 'c'.join(('Time', time, calendar, precision, time_zone))