entity.py (1405B)
1 import uuid 2 import datetime 3 from urllib.parse import urlparse, urlunparse 4 5 from rdflib import Literal 6 from rdflib.namespace import FOAF, DCTERMS, XSD 7 8 from .uri import to_uuid_uri 9 10 11 class Entity: 12 13 def __init__(self, common_name, uu=None, protect_uu=False): 14 if not uu: 15 uu = uuid.uuid4() 16 elif not isinstance(uu, uuid.UUID): 17 raise ValueError("not uuid") 18 self.dt = datetime.datetime.now() 19 self.dt = self.dt.astimezone(datetime.timezone.utc) 20 self.common_name = common_name 21 self.url = None 22 self.protect_uu = protect_uu 23 self.uu = None 24 self.set_uu(uu) 25 26 27 def set_uu(self, uu): 28 if self.uu != None and self.protect_uu: 29 raise PermissionError() 30 if isinstance(uu, str): 31 uu = uuid.UUID(uu) 32 elif isinstance(uu, bytes): 33 uu = uuid.UUID(bytes=uu) 34 self.uu = uu 35 36 37 def set_url(self, v): 38 r = urlparse(v) 39 if not r.scheme or r.scheme == 'file': 40 raise ValueError('invalid url ' + v) 41 self.url = urlunparse(r) 42 43 44 def to_ref(self): 45 return to_uuid_uri(self.uu) 46 47 48 def apply(self, g): 49 uu = to_uuid_uri(self.uu) 50 g.add((uu, DCTERMS.created, Literal(self.dt.isoformat(timespec='seconds'), datatype=XSD.dateTime))) 51 if self.url: 52 g.add((uu, FOAF.homepage, Literal(self.url)))