annotate lib/stategraph.py @ 1433:be9b456717bd

round numbers. py3 updates. ws Ignore-this: d1191987ce8070c9700a26b89436478a darcs-hash:284883b8403f0563572a154cca19d5e96a5e5654
author drewp <drewp@bigasterisk.com>
date Sun, 11 Aug 2019 03:25:20 -0700
parents b9c6b8724d43
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1135
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 import datetime, os, inspect
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 from dateutil.tz import tzlocal
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 from rdflib import Graph, Namespace, Literal
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4 DCTERMS = Namespace("http://purl.org/dc/terms/")
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 class StateGraph(object):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 """
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 helper to create a graph with some of the current state of the world
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 """
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 def __init__(self, ctx):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 """
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 note that we put the time of the __init__ call into the graph
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 as its dcterms:modified time.
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 """
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 self.g = Graph()
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 self.ctx = ctx
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 try:
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 requestingFile = inspect.stack()[1][1]
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 self.g.add((ctx, DCTERMS['creator'],
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 Literal(os.path.abspath(requestingFile))))
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 except IndexError:
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23 pass
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 self.g.add((ctx, DCTERMS['modified'],
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 Literal(datetime.datetime.now(tzlocal()))))
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 def add(self, *args, **kw):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 self.g.add(*args, **kw)
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 def ntLines(self):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 nt = self.g.serialize(format='nt')
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 # this canonical order is just for debugging, so the lines are
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 # stable when you refresh the file repeatedly
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 return sorted(filter(None, nt.splitlines()))
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 def asTrig(self):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 return "%s {\n%s\n}\n" % (self.ctx.n3(), '\n'.join(self.ntLines()))
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 def asJsonLd(self):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 return self.g.serialize(format='json-ld')
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 def asAccepted(self, acceptHeader):
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 if acceptHeader == 'application/nquads':
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 return 'application/nquads', '\n'.join(
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 line.strip().rstrip('.') + '%s .' % self.ctx.n3()
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 for line in self.ntLines())
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47 else:
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 return 'application/x-trig', self.asTrig()
b9c6b8724d43 move stategraph from magma
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49