-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcli_interface.py
More file actions
151 lines (125 loc) · 4.94 KB
/
cli_interface.py
File metadata and controls
151 lines (125 loc) · 4.94 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
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import os
import sys
CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
ERS_PATH = os.path.join(os.path.dirname(CURRENT_PATH), '../ers-node')
sys.path.insert(0, ERS_PATH)
from ers import ERS
from prettytable import PrettyTable
from rdflib import Graph
TEST_ENTITY = "urn:ers:test"
class Interface(object):
def __init__(self):
self.ers = ERS()
def clean_db(self):
'''
Reset all the content of the DB
'''
self.ers.reset()
# List all the peers
# List the local statements about an entity (groupe them by status)
# Delete all statements about an entity
# List the peers that have statements about an entity
def search_for_entity(self, prop, val=None):
list_of_entities = self.ers.search(prop,val)
return list_of_entities
def show_peers(self):
list_of_peers = self.ers.get_peers()
return list_of_peers
# Cache remote documents
# Add a public|private p/o to an entity
def add_statement(self, uri, predicate, value, private=False):
'''
Add a new predicate,value pair to the description.
Eventually make this private
'''
entity = self.ers.get(uri)
entity.add(predicate, value, private)
self.ers.persist_entity(entity)
print "Added <%s, %s, %s> (private=%s)" % (uri, predicate, value, private)
# Set a public|private p/o from an entity
def set_statement(self, uri, predicate, value, private=False):
entity = self.ers.get(uri)
entity.set(predicate, value, private)
self.ers.persist_entity(entity)
print "Set <%s, %s, %s> (private=%s)" % (uri, predicate, value, private)
# Delete a public|private p/o from an entity
def delete_statement(self, uri, predicate, value=None):
entity = self.ers.get(uri)
entity.delete(predicate, value)
self.ers.persist_entity(entity)
print "Deleted <%s, %s, %s>" % (uri, predicate, value)
# Show internal synchronisation rules
def show_status(self):
'''
Show various information concerning the current status of the node
'''
table = self._table(["Description", "Value"])
table.add_row(['Instance UUID', self.ers.get_machine_uri()])
table.add_row(['Number of peers', len(self.ers.get_peers())])
print table
def _table(self, columns):
'''
Helper function to initialise pretty table
'''
table = PrettyTable(columns)
for column in columns:
table.align[column] = 'l'
return table
def show_entity(self, uri):
entity = self.ers.get(uri)
table = self._table(["Predicate", "Value", "Scope"])
for statement in entity.to_tuples():
(p, o, scope) = statement
table.add_row([p, o, scope])
print table
def import_entity(self, entity_uri):
entities = {}
# Load
g = Graph()
g.parse(entity_uri)
for statement in g:
(s, p, o) = statement
if s not in entities:
entity = self.ers.get(s)
entities[s] = entity
else:
entity = entities[s]
entity.add(p, o)
for entity in entities.itervalues():
self.ers.persist_entity(entity)
# Display
for entity_uri in entities.iterkeys():
print "\n=> %s " % entity_uri
self.show_entity(entity_uri)
if __name__ == '__main__':
interface = Interface()
#interface.clean_db()
#print "# Status"
#interface.show_status()
#interface.add_statement(TEST_ENTITY, "rdf:type", "foaf:LocalAgent")
import pdb; pdb.set_trace()
interface.add_statement(TEST_ENTITY, "rdf:type", "foaf:RemoteAgent")
mye = interface.ers.get(TEST_ENTITY)
interface.ers.cache_entity(mye)
interface.show_peers()
print "# Adding statements to %s" % TEST_ENTITY
interface.show_entity(TEST_ENTITY)
interface.search_for_entity("rdf:type", "foaf:Agent")
#interface.add_statement(TEST_ENTITY, "rdf:type", "foaf:Person", True)
#interface.show_entity(TEST_ENTITY)
#print "# Setting statements for %s" % TEST_ENTITY
##print "# Search for %s" % TEST_ENTITY
#q_pred = "rdf:type"
#q_value = "foaf:Agent"
#print "# Search for entities which have %s as a predicate and %s as value" % (q_pred, q_value)
#interface.search_for_entity("rdf:type", "foaf:Agent")
#interface.set_statement(TEST_ENTITY, "rdf:type", "foaf:Agent")
#interface.show_entity(TEST_ENTITY)
#interface.set_statement(TEST_ENTITY, "rdf:type", "foaf:SecretAgent", True)
#interface.show_entity(TEST_ENTITY)
#print "# Delete statements for %s" % TEST_ENTITY
#interface.delete_statement(TEST_ENTITY, "rdf:type", "foaf:Agent")
#interface.show_entity(TEST_ENTITY)
#interface.delete_statement(TEST_ENTITY, "rdf:type")
#interface.show_entity(TEST_ENTITY)
#interface.import_entity("http://people.csail.mit.edu/lkagal/foaf.rdf")