adesse

Signed testimonials for certifications.
Log | Files | Refs

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)))