-
Notifications
You must be signed in to change notification settings - Fork 0
/
browsedata.py
executable file
·106 lines (81 loc) · 3.44 KB
/
browsedata.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/python
import logging, sys, inspect
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger()
sys.path.insert(0, "ext")
#sys.path.append("rdflib/rdf/build/lib")
#from rdf.plugins import register
#register('rdf.IOMemory',
#sys.path.insert(0, "rdflib-2.4.x/build/lib.linux-i686-2.5")
from rdflib.Graph import Graph
from rdflib import URIRef, Literal, StringInputSource
from rdflib import RDF, RDFS
print inspect.getabsfile(Literal)
from namespaces import STATION, TRAIN, TT, XS, INITNS
from localrdf import getGraph, subgraphs, readSubgraphXML, allGraphs
from timejunk import literalToday
from twisted.internet import reactor
from twisted.python import log as tlog
from twisted.web import http
from nevow.appserver import NevowSite
from nevow import rend, loaders, tags as T, inevow
from okj import addTrainsAtStation
from serverdf import RdfXMLPage
class Main(rend.Page):
docFactory = loaders.xmlfile("templates/main.html")
def child_graph(self, ctx):
return GraphPage()
def child_okj(self, ctx):
graph = allGraphs(literalToday())
child = viewFunc('trainsToday', graph, literalToday(), STATION['OKJ'])
def update(self, ctx):
request = inevow.IRequest(ctx)
graph = Graph()
graph.parse("passwd.n3", format="n3")
g = lambda pred: graph.value(TT['okjUpdate'], pred)
if ((request.getUser(), request.getPassword()) ==
(g(TT['user']), g(TT['password']))):
graph = getGraph()
addTrainsAtStation(graph, STATION['OKJ'], literalToday())
return "update ok"
else:
request.setHeader('WWW-Authenticate',
'Basic realm="traintimes"')
request.setResponseCode(http.UNAUTHORIZED)
return "Authentication required."
child.child_update = lambda ctx: update(child, ctx)
return child
def child_bos(self, ctx):
graph = allGraphs(literalToday())
return viewFunc('next4Trains', graph, STATION['BOS'])
def child_pvd(self, ctx):
graph = allGraphs(literalToday())
return viewFunc('next4Trains', graph, STATION['PVD'])
def viewFunc(name, *args):
import view
reload(view)
class P(rend.Page):
def renderHTTP(self, ctx):
return getattr(view, name)(*args)
return P()
class GraphPage(rend.Page):
addSlash = True
docFactory = loaders.xmlfile("templates/graph.html")
def render_graphs(self, ctx, data):
for uri, label, filename in sorted(subgraphs(literalToday()),
key=lambda (u,l,f): l):
filename = filename[len("graph/"):]
yield T.li[T.a(href=filename)[label], " ",
T.a(href=[filename, "?type=n3"])[T.code["[N3/text]"]]]
def locateChild(self, ctx, segments):
if segments == ('all',):
g = allGraphs(literalToday())
return RdfXMLPage(g.serialize(format='xml')), []
print segments
# limiting to today's data only because it was easier to code quickly
if len(segments) == 2 and segments[0] == str(literalToday()) and segments[1].isalnum():
return RdfXMLPage(readSubgraphXML("graph/%s/%s" % segments[:2])), []
return rend.Page.locateChild(self, ctx, segments)
tlog.startLogging(sys.stdout)
reactor.listenTCP(8008, NevowSite(Main()))
reactor.run()