forked from endpnt/andoc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtriple.py
More file actions
52 lines (42 loc) · 1.35 KB
/
triple.py
File metadata and controls
52 lines (42 loc) · 1.35 KB
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
PRE_SET='triple:pre:set:%s'
class Triple(object):
def __init__(self, subject = None, pre = None, object = None):
self.subject = subject
self.pre = pre
self.object = object
def _valid(self):
#TODO
return True
def save(self, redis):
if self._valid():
# keep a list of all subjects for this predicate
redis.sadd(PRE_SET % self.pre, self.subject)
return redis.hsetnx(self.subject, self.pre, self.object)
else:
return False
def load(self, redis, subject):
self.subject = subject
self.pre, self.object = redis.hgetall(subject)
class Triples(object):
def __init__(self, redis):
self._redis = redis
def from_subject(self, subject):
result = []
r = self._redis.hgetall(subject)
if r == 0:
return result
for pre, object in r.iteritems():
t = Triple(subject, pre, object)
result.append(t)
return result
def from_predicate(self, pre):
result = []
subjects = self._redis.smembers(PRE_SET % pre)
if subjects == 0:
return result
for subject in subjects:
t = self.from_subject(subject)
result.extend(t)
return result
def from_document_id(self, id):
return []