Skip to content

Commit 16a2535

Browse files
committed
more rdflib plugin tests: loading triples and querying
1 parent 0af8194 commit 16a2535

File tree

6 files changed

+217
-63
lines changed

6 files changed

+217
-63
lines changed

examples/rdflib_example.py

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
print "Load RDF data"
1515
store.load_triples(source="http://www.w3.org/People/Berners-Lee/card.rdf")
16+
print len(store)
1617

1718
Person = session.get_class(surf.ns.FOAF["Person"])
1819

surf/resource/result_proxy.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ def __init__(self, params = None, store = None, instance_factory = None):
2222
self._params = params if params else dict()
2323
self._get_by_response = None
2424

25-
if store:
25+
if store is not None:
2626
self._params["store"] = store
2727

28-
if instance_factory:
28+
if instance_factory is not None:
2929
self._params["instance_factory"] = instance_factory
3030

3131
def instance_factory(self, instance_factory_func):

surf/session.py

+41-60
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@
5656

5757
__all__ = ['Session']
5858

59-
DEFAULT_RESOURCE_EXPIRE_TIME = 60 * 60
60-
DEFAULT_STORE_KEY = 'default'
59+
DEFAULT_RESOURCE_EXPIRE_TIME = 60 * 60
60+
DEFAULT_STORE_KEY = 'default'
6161

6262
class Session(object):
6363
""" The `Session` will manage the rest of the components in **SuRF**,
@@ -87,8 +87,8 @@ def __init__(self, default_store=None, mapping=None, auto_persist=False, auto_lo
8787
self._auto_load = auto_load
8888
self._stores = {}
8989

90-
if default_store:
91-
if type(default_store) is not Store:
90+
if default_store is not None:
91+
if not isinstance(default_store, Store):
9292
raise Exception('the arguments is not a valid Store instance')
9393
self.default_store = default_store
9494

@@ -106,7 +106,7 @@ def __setitem__(self, key, value):
106106
""" Set the `store` for the specified key, if value not a `Store`
107107
instance ignored. """
108108

109-
if type(value) is Store :
109+
if type(value) is Store:
110110
self._stores[key] = value
111111

112112
def __delitem__(self, key):
@@ -160,7 +160,7 @@ def auto_load(self, val):
160160

161161
@property
162162
def log_level(self):
163-
return {sid: store.log_level for sid, store in self._stores.iteritems()}
163+
return dict((sid, store.log_level) for sid, store in self._stores.iteritems())
164164

165165
@log_level.setter
166166
def log_level(self, level):
@@ -181,55 +181,37 @@ def set_cache_expire(self,val):
181181
fset = set_cache_expire)
182182
'''
183183

184-
def get_default_store_key(self):
185-
""" Getter function for the `default_store_key` property.
186-
187-
Do not use this, use the `default_store_key` property instead.
188-
184+
@property
185+
def default_store_key(self):
189186
"""
187+
The `default store key` of the session.
190188
189+
If it is set explicitly on `session` creation it is returned, else the first `store key` is returned.
190+
If no `stores` are in the session None is returned.
191+
"""
191192
if DEFAULT_STORE_KEY in self._stores:
192193
return DEFAULT_STORE_KEY
193194
elif len(self._stores) > 0:
194195
return self._stores.keys()[0]
195196
return None
196197

197-
default_store_key = property(fget = get_default_store_key)
198-
""" The `default store key` of the session.
199-
200-
If it is set explicitly on `session` creation it is returned,
201-
else the first `store key` is returned. If no `stores` are in the session
202-
None is returned. """
203-
204-
205-
def set_default_store(self, store):
206-
""" Setter function for the `default_store` property.
207-
208-
Do not use this, use the `default_store` property instead.
209-
198+
@property
199+
def default_store(self):
210200
"""
201+
The `default store` of the session.
211202
212-
self.__setitem__(DEFAULT_STORE_KEY, store)
213-
214-
def get_default_store(self):
215-
""" Getter function for the `default_store` property.
216-
217-
Do not use this, use the `default_store` property instead.
218-
203+
See `default_store_key` to see how the `default store` is selected.
219204
"""
220-
221205
ds_key = self.default_store_key
222206
if ds_key:
223207
return self._stores[ds_key]
224208
return None
225209

226-
default_store = property(fget = get_default_store,
227-
fset = set_default_store)
228-
""" The `default store` of the session.
229-
230-
See `default_store_key` to see how the `default store` is selected. """
210+
@default_store.setter
211+
def default_store(self, store):
212+
self.__setitem__(DEFAULT_STORE_KEY, store)
231213

232-
def __uri(self, uri):
214+
def _uri(self, uri):
233215
""" For **internal** use only, convert the `uri` to a `URIRef`. """
234216

235217
if not uri:
@@ -260,7 +242,7 @@ def close(self):
260242

261243
self.mapping = None
262244

263-
def map_type(self, uri, store = None, classes = None):
245+
def map_type(self, uri, store=None, classes=None):
264246
""" Create and return a `class` based on the `uri` given.
265247
266248
Also will add the `classes` to the inheritance list.
@@ -270,7 +252,7 @@ def map_type(self, uri, store = None, classes = None):
270252
classes = classes if isinstance(classes, (tuple, set, list)) else []
271253
store = store if store else self.default_store_key
272254

273-
uri = self.__uri(uri)
255+
uri = self._uri(uri)
274256
if not uri:
275257
return None
276258
name = uri_to_classname(uri)
@@ -283,11 +265,11 @@ def map_type(self, uri, store = None, classes = None):
283265
if type(session_classes) not in [list, tuple, set]:
284266
session_classes = [session_classes]
285267
base_classes.extend(session_classes)
286-
return type(str(name), tuple(base_classes), {'uri' : uri,
287-
'store_key' : store,
288-
'session' : self})
268+
return type(str(name), tuple(base_classes), {'uri': uri,
269+
'store_key': store,
270+
'session': self})
289271

290-
def get_class(self, uri, store = None, classes = None):
272+
def get_class(self, uri, store=None, classes=None):
291273
"""
292274
See :func:`surf.session.Session.map_type`.
293275
The `uri` parameter can be any of the following:
@@ -301,10 +283,10 @@ def get_class(self, uri, store = None, classes = None):
301283
302284
"""
303285

304-
return self.map_type(uri, store = store, classes = classes)
286+
return self.map_type(uri, store=store, classes=classes)
305287

306-
def map_instance(self, concept, subject, store = None, classes = None,
307-
block_auto_load = False, context = None):
288+
def map_instance(self, concept, subject, store=None, classes=None,
289+
block_auto_load=False, context=None):
308290
"""Create an `instance` of the `class` specified by `uri` and `classes`
309291
to be inherited, see `map_type` for more information. """
310292

@@ -317,13 +299,12 @@ def map_instance(self, concept, subject, store = None, classes = None,
317299
store = self.default_store_key
318300

319301
if not (isinstance(concept, type) and issubclass(concept, Resource)):
320-
concept = self.map_type(concept, store = store, classes = classes)
321-
322-
return concept(subject, block_auto_load = block_auto_load, context = context)
302+
concept = self.map_type(concept, store=store, classes=classes)
323303

304+
return concept(subject, block_auto_load=block_auto_load, context=context)
324305

325-
def get_resource(self, subject, concept = None, store = None, graph = None,
326-
block_auto_load = False, context = None, classes = None):
306+
def get_resource(self, subject, concept=None, store=None, graph=None,
307+
block_auto_load=False, context=None, classes=None):
327308
""" Same as `map_type` but `set` the resource from the `graph`. """
328309

329310
classes = classes if isinstance(classes, (tuple, set, list)) else []
@@ -334,17 +315,17 @@ def get_resource(self, subject, concept = None, store = None, graph = None,
334315
if concept is None:
335316
concept = Resource.concept(subject)
336317

337-
resource = self.map_instance(concept, subject, store = store, classes = classes,
338-
block_auto_load = block_auto_load,
339-
context = context )
318+
resource = self.map_instance(concept, subject, store=store, classes=classes,
319+
block_auto_load=block_auto_load,
320+
context=context)
340321

341322
if graph:
342323
resource.set(graph)
343324

344325
return resource
345326

346-
def load_resource(self, uri, subject, store = None, data = None,
347-
file = None, location = None, format = None, classes = None):
327+
def load_resource(self, uri, subject, store=None, data=None,
328+
file=None, location=None, format=None, classes=None):
348329
""" Create an `instance` of the `class` specified by `uri`, while
349330
`subject` is the subject of the new resource instance.
350331
@@ -359,11 +340,11 @@ def load_resource(self, uri, subject, store = None, data = None,
359340
"""
360341
classes = classes if isinstance(classes, (tuple, set, list)) else []
361342

362-
ResourceClass = self.map_type(uri, store = store, classes = classes)
343+
ResourceClass = self.map_type(uri, store=store, classes=classes)
363344
if ResourceClass:
364345
resource = ResourceClass(subject)
365-
resource.load_from_source(data = data, file = file,
366-
location = location, format = format)
346+
resource.load_from_source(data=data, file=file,
347+
location=location, format=format)
367348
return resource
368349
return None
369350

surf/store.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,6 @@ def remove(self, *resources, **kwargs):
197197
for resource in resources:
198198
resource.dirty = False
199199

200-
201200
def size(self):
202201
""" See :func:`surf.plugin.writer.RDFWriter.size` method. """
203202

@@ -232,3 +231,6 @@ def load_triples(self, context=None, **kwargs):
232231

233232
context = self.__add_default_context(context)
234233
return self.writer.load_triples(context=context, **kwargs)
234+
235+
def __len__(self):
236+
return self.size()

surf/test/plugin/card.rdf

+142
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
2+
3+
4+
<rdf:RDF xmlns="http://xmlns.com/foaf/0.1/"
5+
xmlns:cc="http://creativecommons.org/ns#"
6+
xmlns:cert="http://www.w3.org/ns/auth/cert#"
7+
xmlns:con="http://www.w3.org/2000/10/swap/pim/contact#"
8+
xmlns:dc="http://purl.org/dc/elements/1.1/"
9+
xmlns:dct="http://purl.org/dc/terms/"
10+
xmlns:doap="http://usefulinc.com/ns/doap#"
11+
xmlns:foaf="http://xmlns.com/foaf/0.1/"
12+
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
13+
xmlns:owl="http://www.w3.org/2002/07/owl#"
14+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
15+
xmlns:s="http://www.w3.org/2000/01/rdf-schema#"
16+
xmlns:sioc="http://rdfs.org/sioc/ns#"
17+
xmlns:solid="https://www.w3.org/ns/solid/terms#"
18+
xmlns:space="http://www.w3.org/ns/pim/space#">
19+
20+
<rdf:Description rdf:about="../../DesignIssues/Overview.html">
21+
<dc:title>Design Issues for the World Wide Web</dc:title>
22+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
23+
</rdf:Description>
24+
25+
<PersonalProfileDocument rdf:about="">
26+
<cc:license rdf:resource="http://creativecommons.org/licenses/by-nc/3.0/"/>
27+
<dc:title>Tim Berners-Lee's FOAF file</dc:title>
28+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
29+
<primaryTopic rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
30+
</PersonalProfileDocument>
31+
32+
<rdf:Description rdf:about="#i">
33+
<cert:key rdf:parseType="Resource">
34+
<rdf:type rdf:resource="http://www.w3.org/ns/auth/cert#RSAPublicKey"/>
35+
<cert:exponent rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">65537</cert:exponent>
36+
<cert:modulus rdf:datatype="http://www.w3.org/2001/XMLSchema#hexBinary">ebe99c737bd3670239600547e5e2eb1d1497da39947b6576c3c44ffeca32cf0f2f7cbee3c47001278a90fc7fc5bcf292f741eb1fcd6bbe7f90650afb519cf13e81b2bffc6e02063ee5a55781d420b1dfaf61c15758480e66d47fb0dcb5fa7b9f7f1052e5ccbd01beee9553c3b6b51f4daf1fce991294cd09a3d1d636bc6c7656e4455d0aff06daec740ed0084aa6866fcae1359de61cc12dbe37c8fa42e977c6e727a8258bb9a3f265b27e3766fe0697f6aa0bcc81c3f026e387bd7bbc81580dc1853af2daa099186a9f59da526474ef6ec0a3d84cf400be3261b6b649dea1f78184862d34d685d2d587f09acc14cd8e578fdd2283387821296f0af39b8d8845</cert:modulus>
37+
</cert:key>
38+
</rdf:Description>
39+
40+
<rdf:Description rdf:about="http://dig.csail.mit.edu/2005/ajar/ajaw/data#Tabulator">
41+
<doap:developer rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
42+
</rdf:Description>
43+
44+
<rdf:Description rdf:about="http://dig.csail.mit.edu/2007/01/camp/data#course">
45+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
46+
</rdf:Description>
47+
48+
<rdf:Description rdf:about="http://dig.csail.mit.edu/breadcrumbs/blog/4">
49+
<dc:title>timbl's blog on DIG</dc:title>
50+
<s:seeAlso rdf:resource="http://dig.csail.mit.edu/breadcrumbs/blog/feed/4"/>
51+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
52+
</rdf:Description>
53+
54+
<rdf:Description rdf:about="http://dig.csail.mit.edu/data#DIG">
55+
<member rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
56+
</rdf:Description>
57+
58+
<rdf:Description rdf:about="http://wiki.ontoworld.org/index.php/_IRW2006">
59+
<dc:title>Identity, Reference and the Web workshop 2006</dc:title>
60+
<con:participant rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
61+
</rdf:Description>
62+
63+
<rdf:Description rdf:about="http://www.ecs.soton.ac.uk/~dt2/dlstuff/www2006_data#panel-panelk01">
64+
<s:label>The Next Wave of the Web (Plenary Panel)</s:label>
65+
<con:participant rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
66+
</rdf:Description>
67+
68+
<rdf:Description rdf:about="http://www.w3.org/2000/10/swap/data#Cwm">
69+
<doap:developer rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
70+
</rdf:Description>
71+
72+
<rdf:Description rdf:about="http://www.w3.org/2011/Talks/0331-hyderabad-tbl/data#talk">
73+
<dct:title>Designing the Web for an Open Society</dct:title>
74+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
75+
</rdf:Description>
76+
77+
<rdf:Description rdf:about="http://www.w3.org/People/Berners-Lee/card#i">
78+
<owl:sameAs rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
79+
</rdf:Description>
80+
81+
<rdf:Description rdf:about="http://www.w3.org/data#W3C">
82+
<member rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
83+
</rdf:Description>
84+
85+
<PersonalProfileDocument rdf:about="https://timbl.com/timbl/Public/friends.ttl">
86+
<cc:license rdf:resource="http://creativecommons.org/licenses/by-nc/3.0/"/>
87+
<dc:title>Tim Berners-Lee's editable FOAF file</dc:title>
88+
<maker rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
89+
<primaryTopic rdf:resource="https://www.w3.org/People/Berners-Lee/card#i"/>
90+
</PersonalProfileDocument>
91+
92+
<con:Male rdf:about="https://www.w3.org/People/Berners-Lee/card#i">
93+
<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
94+
<sioc:avatar rdf:resource="images/timbl-image-by-Coz-cropped.jpg"/>
95+
<s:label>Tim Berners-Lee</s:label>
96+
<s:seeAlso rdf:resource="https://timbl.com/timbl/Public/friends.ttl"/>
97+
<s:seeAlso rdf:resource="https://www.w3.org/2007/11/Talks/search/query?date=All+past+and+future+talks&#38;event=None&#38;activity=None&#38;name=Tim+Berners-Lee&#38;country=None&#38;language=None&#38;office=None&#38;rdfOnly=yes&#38;submit=Submit"/>
98+
<con:assistant rdf:resource="https://www.w3.org/People/Berners-Lee/card#amy"/>
99+
<con:homePage rdf:resource="./"/>
100+
<con:office rdf:parseType="Resource">
101+
<con:address rdf:parseType="Resource">
102+
<con:city>Cambridge</con:city>
103+
<con:country>USA</con:country>
104+
<con:postalCode>02139</con:postalCode>
105+
<con:street>32 Vassar Street</con:street>
106+
<con:street2>MIT CSAIL Room 32-G524</con:street2>
107+
</con:address>
108+
<con:phone rdf:resource="tel:+1-617-253-5702"/>
109+
<geo:location rdf:parseType="Resource">
110+
<geo:lat>42.361860</geo:lat>
111+
<geo:long>-71.091840</geo:long>
112+
</geo:location>
113+
</con:office>
114+
<con:preferredURI>https://www.w3.org/People/Berners-Lee/card#i</con:preferredURI>
115+
<con:publicHomePage rdf:resource="./"/>
116+
<owl:sameAs rdf:resource="http://www.advogato.org/person/timbl/foaf.rdf#me"/>
117+
<space:preferencesFile rdf:resource="https://timbl.com/timbl/Data/preferences.n3"/>
118+
<space:storage rdf:resource="https://timbl.databox.me/"/>
119+
<account rdf:resource="http://en.wikipedia.org/wiki/User:Timbl"/>
120+
<account rdf:resource="http://twitter.com/timberners_lee"/>
121+
<account rdf:resource="http://www.reddit.com/user/timbl/"/>
122+
<based_near rdf:parseType="Resource">
123+
<geo:lat>42.361860</geo:lat>
124+
<geo:long>-71.091840</geo:long>
125+
</based_near>
126+
<family_name>Berners-Lee</family_name>
127+
<givenname>Timothy</givenname>
128+
<homepage rdf:resource="https://www.w3.org/People/Berners-Lee/"/>
129+
<img rdf:resource="https://www.w3.org/Press/Stock/Berners-Lee/2001-europaeum-eighth.jpg"/>
130+
<mbox rdf:resource="mailto:[email protected]"/>
131+
<mbox_sha1sum>965c47c5a70db7407210cef6e4e6f5374a525c5c</mbox_sha1sum>
132+
<name>Timothy Berners-Lee</name>
133+
<nick>TimBL</nick>
134+
<nick>timbl</nick>
135+
<openid rdf:resource="https://www.w3.org/People/Berners-Lee/"/>
136+
<phone rdf:resource="tel:+1-(617)-253-5702"/>
137+
<title>Sir</title>
138+
<weblog rdf:resource="http://dig.csail.mit.edu/breadcrumbs/blog/4"/>
139+
<workplaceHomepage rdf:resource="https://www.w3.org/"/>
140+
<solid:publicTypeIndex rdf:resource="https://timbl.com/timbl/Public/PublicTypeIndex.ttl"/>
141+
</con:Male>
142+
</rdf:RDF>

0 commit comments

Comments
 (0)