marco@16
|
1 from . import TestController
|
marco@16
|
2
|
marco@16
|
3 from sword2 import Connection, Entry
|
marco@16
|
4 from sword2.exceptions import PackagingFormatNotAvailable
|
marco@16
|
5 from sword2.compatible_libs import json
|
marco@16
|
6
|
marco@16
|
7 SSS_PY_URL="http://sword-app.svn.sourceforge.net/viewvc/sword-app/sss/trunk/sss.py?revision=HEAD"
|
marco@16
|
8 PORT_NUMBER="8081"
|
marco@16
|
9
|
marco@16
|
10 import subprocess, urllib, tempfile
|
marco@16
|
11 import os
|
marco@16
|
12
|
marco@16
|
13 import atexit
|
marco@16
|
14
|
marco@16
|
15 from time import sleep
|
marco@16
|
16
|
marco@16
|
17 long_service_doc = '''<?xml version="1.0" ?>
|
marco@16
|
18 <service xmlns:dcterms="http://purl.org/dc/terms/"
|
marco@16
|
19 xmlns:sword="http://purl.org/net/sword/terms/"
|
marco@16
|
20 xmlns:atom="http://www.w3.org/2005/Atom"
|
marco@16
|
21 xmlns="http://www.w3.org/2007/app">
|
marco@16
|
22
|
marco@16
|
23 <sword:version>2.0</sword:version>
|
marco@16
|
24 <sword:maxUploadSize>16777216</sword:maxUploadSize>
|
marco@16
|
25
|
marco@16
|
26 <workspace>
|
marco@16
|
27 <atom:title>Main Site</atom:title>
|
marco@16
|
28
|
marco@16
|
29 <collection href="http://swordapp.org/col-iri/43">
|
marco@16
|
30 <atom:title>Collection 43</atom:title>
|
marco@16
|
31 <accept>*/*</accept>
|
marco@16
|
32 <accept alternate="multipart-related">*/*</accept>
|
marco@16
|
33 <sword:collectionPolicy>Collection Policy</sword:collectionPolicy>
|
marco@16
|
34 <dcterms:abstract>Collection Description</dcterms:abstract>
|
marco@16
|
35 <sword:mediation>false</sword:mediation>
|
marco@16
|
36 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
37 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
38 <sword:acceptPackaging>http://purl.org/net/sword/package/METSDSpaceSIP</sword:acceptPackaging>
|
marco@16
|
39 <sword:service>http://swordapp.org/sd-iri/e4</sword:service>
|
marco@16
|
40 </collection>
|
marco@16
|
41 </workspace>
|
marco@16
|
42 <workspace>
|
marco@16
|
43 <atom:title>Sub-site</atom:title>
|
marco@16
|
44
|
marco@16
|
45 <collection href="http://swordapp.org/col-iri/44">
|
marco@16
|
46 <atom:title>Collection 44</atom:title>
|
marco@16
|
47 <accept>*/*</accept>
|
marco@16
|
48 <accept alternate="multipart-related">*/*</accept>
|
marco@16
|
49 <sword:collectionPolicy>Collection Policy</sword:collectionPolicy>
|
marco@16
|
50 <dcterms:abstract>Collection Description</dcterms:abstract>
|
marco@16
|
51 <sword:mediation>true</sword:mediation>
|
marco@16
|
52 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
53 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
54 <sword:service>http://swordapp.org/sd-iri/e5</sword:service>
|
marco@16
|
55 <sword:service>http://swordapp.org/sd-iri/e6</sword:service>
|
marco@16
|
56 <sword:service>http://swordapp.org/sd-iri/e7</sword:service>
|
marco@16
|
57 <sword:service>http://swordapp.org/sd-iri/e8</sword:service>
|
marco@16
|
58 </collection>
|
marco@16
|
59 <collection href="http://swordapp.org/col-iri/46">
|
marco@16
|
60 <atom:title>Collection 46</atom:title>
|
marco@16
|
61 <accept>application/zip</accept>
|
marco@16
|
62 <accept alternate="multipart-related">application/zip</accept>
|
marco@16
|
63 <sword:collectionPolicy>Only Theses</sword:collectionPolicy>
|
marco@16
|
64 <dcterms:abstract>Theses dropbox</dcterms:abstract>
|
marco@16
|
65 <sword:mediation>true</sword:mediation>
|
marco@16
|
66 <sword:treatment>Treatment description</sword:treatment>
|
marco@16
|
67 <sword:acceptPackaging>http://purl.org/net/sword/package/SimpleZip</sword:acceptPackaging>
|
marco@16
|
68 </collection>
|
marco@16
|
69 </workspace>
|
marco@16
|
70 </service>'''
|
marco@16
|
71
|
marco@16
|
72
|
marco@16
|
73 f, sss_path = tempfile.mkstemp(suffix=".py")
|
marco@16
|
74 os.close(f)
|
marco@16
|
75
|
marco@16
|
76 urllib.urlretrieve(SSS_PY_URL, sss_path)
|
marco@16
|
77 sss_pid = subprocess.Popen(['python', sss_path, PORT_NUMBER])
|
marco@16
|
78 sleep(1)
|
marco@16
|
79
|
marco@16
|
80 atexit.register(sss_pid.kill)
|
marco@16
|
81
|
marco@16
|
82 class TestConnection(TestController):
|
marco@16
|
83 def test_01_blank_init(self):
|
marco@16
|
84 conn = Connection("http://example.org/service-doc")
|
marco@16
|
85 assert conn.sd_iri == "http://example.org/service-doc"
|
marco@16
|
86 assert conn.sd == None
|
marco@16
|
87
|
marco@16
|
88 def test_02_init_then_load_from_string(self):
|
marco@16
|
89 conn = Connection("http://example.org/service-doc")
|
marco@16
|
90 assert conn.sd_iri == "http://example.org/service-doc"
|
marco@16
|
91 assert conn.sd == None
|
marco@16
|
92 conn.load_service_document(long_service_doc)
|
marco@16
|
93 assert conn.sd != None
|
marco@16
|
94 assert len(conn.sd.workspaces) == 2
|
marco@16
|
95 assert len(conn.workspaces) == 2
|
marco@16
|
96 assert conn.sd.workspaces[0][0] == "Main Site"
|
marco@16
|
97 assert conn.sd.workspaces[1][0] == "Sub-site"
|
marco@16
|
98 assert len(conn.sd.workspaces[1][1]) == 2
|
marco@16
|
99
|
marco@16
|
100 def test_03_init_then_load_from_string_t_history(self):
|
marco@16
|
101 conn = Connection("http://example.org/service-doc")
|
marco@16
|
102 assert conn.sd_iri == "http://example.org/service-doc"
|
marco@16
|
103 assert conn.sd == None
|
marco@16
|
104 conn.load_service_document(long_service_doc)
|
marco@16
|
105 # Should have made a two client 'transactions', the init and subsequent XML load
|
marco@16
|
106 assert len(conn.history) == 2
|
marco@16
|
107 assert conn.history[0]['type'] == "init"
|
marco@16
|
108 assert conn.history[1]['type'] == "SD Parse"
|
marco@16
|
109
|
marco@16
|
110 def test_04_init_from_sss_then_get_doc(self):
|
marco@16
|
111 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword")
|
marco@16
|
112 assert conn.sd_iri == "http://localhost:%s/sd-uri" % PORT_NUMBER
|
marco@16
|
113 assert conn.sd == None # Not asked to get sd doc yet
|
marco@16
|
114 conn.get_service_document()
|
marco@16
|
115 assert conn.sd != None
|
marco@16
|
116 assert conn.sd.parsed == True
|
marco@16
|
117 assert conn.sd.valid == True
|
marco@16
|
118 assert len(conn.sd.workspaces) == 1
|
marco@16
|
119
|
marco@16
|
120 def test_05_init_from_sss(self):
|
marco@16
|
121 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
122 assert conn.sd_iri == "http://localhost:%s/sd-uri" % PORT_NUMBER
|
marco@16
|
123 assert conn.sd != None
|
marco@16
|
124 assert conn.sd.parsed == True
|
marco@16
|
125 assert conn.sd.valid == True
|
marco@16
|
126 assert len(conn.sd.workspaces) == 1
|
marco@16
|
127
|
marco@16
|
128 def test_06_Simple_POST_to_sss(self):
|
marco@16
|
129 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
130 resp = conn.create(payload = "Payload is just a load of text",
|
marco@16
|
131 mimetype = "text/plain",
|
marco@16
|
132 filename = "readme.txt",
|
marco@16
|
133 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
134 workspace = 'Main Site',
|
marco@16
|
135 collection = conn.sd.workspaces[0][1][0].title,
|
marco@16
|
136 in_progress=True,
|
marco@16
|
137 metadata_entry=None)
|
marco@16
|
138 assert resp.code == 201
|
marco@16
|
139
|
marco@16
|
140 def test_07_Multipart_POST_to_sss(self):
|
marco@16
|
141 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
142 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
143 resp = conn.create(payload = "Multipart payload here",
|
marco@16
|
144 metadata_entry = e,
|
marco@16
|
145 mimetype = "text/plain",
|
marco@16
|
146 filename = "readme.txt",
|
marco@16
|
147 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
148 workspace='Main Site',
|
marco@16
|
149 collection=conn.sd.workspaces[0][1][0].title,
|
marco@16
|
150 in_progress=True)
|
marco@16
|
151 assert resp.code == 201
|
marco@16
|
152
|
marco@16
|
153
|
marco@16
|
154 def test_08_Simple_POST_to_sss_w_coliri(self):
|
marco@16
|
155 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
156 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
157 resp = conn.create(payload = "Payload is just a load of text",
|
marco@16
|
158 mimetype = "text/plain",
|
marco@16
|
159 filename = "readme.txt",
|
marco@16
|
160 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
161 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
162 in_progress=True,
|
marco@16
|
163 metadata_entry=None)
|
marco@16
|
164 assert resp.code == 201
|
marco@16
|
165
|
marco@16
|
166 def test_09_Multipart_POST_to_sss_w_coliri(self):
|
marco@16
|
167 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
168 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
169 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
170 resp = conn.create(payload = "Multipart payload here",
|
marco@16
|
171 metadata_entry = e,
|
marco@16
|
172 mimetype = "text/plain",
|
marco@16
|
173 filename = "readme.txt",
|
marco@16
|
174 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
175 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
176 in_progress=True)
|
marco@16
|
177 assert resp != None
|
marco@16
|
178
|
marco@16
|
179
|
marco@16
|
180 def test_10_Multipart_POST_then_update_on_EM_IRI(self):
|
marco@16
|
181 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
182 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
183 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
184 metadata_entry = e,
|
marco@16
|
185 mimetype = "text/plain",
|
marco@16
|
186 filename = "readme.txt",
|
marco@16
|
187 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
188 col_iri = conn.workspaces[0][1][0].href,
|
marco@16
|
189 in_progress=True)
|
marco@16
|
190 assert deposit_receipt.edit_media != None
|
marco@16
|
191 dr = conn.update(payload = "Multipart_POST_then_update_on_EM_IRI -- updated resource",
|
marco@16
|
192 mimetype = "text/plain",
|
marco@16
|
193 filename = "readthis.txt",
|
marco@16
|
194 packaging = "http://purl.org/net/sword/package/Binary",
|
marco@16
|
195 edit_media_iri = deposit_receipt.edit_media)
|
marco@16
|
196 assert dr.code == 204 # empty response
|
marco@16
|
197
|
marco@16
|
198 def test_11_Multipart_POST_then_update_metadata_on_Edit_IRI(self):
|
marco@16
|
199 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
200 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
201 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
202 metadata_entry = e,
|
marco@16
|
203 mimetype = "text/plain",
|
marco@16
|
204 filename = "readme.txt",
|
marco@16
|
205 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
206 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
207 in_progress=True)
|
marco@16
|
208 assert deposit_receipt.code == 201 # new resource
|
marco@16
|
209
|
marco@16
|
210 e.add_fields(dcterms_newfield = "blah de blah")
|
marco@16
|
211 dr = conn.update_metadata_for_resource(edit_iri = deposit_receipt.edit,
|
marco@16
|
212 metadata_entry = e)
|
marco@16
|
213 assert (dr.code == 200 or dr.code == 204)
|
marco@16
|
214
|
marco@16
|
215
|
marco@16
|
216 def test_12_Metadata_POST_to_sss(self):
|
marco@16
|
217 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
218 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
219 resp = conn.create(metadata_entry = e,
|
marco@16
|
220 workspace='Main Site',
|
marco@16
|
221 collection=conn.sd.workspaces[0][1][0].title,
|
marco@16
|
222 in_progress=True)
|
marco@16
|
223 assert resp != None
|
marco@16
|
224
|
marco@16
|
225
|
marco@16
|
226 def test_13_Metadata_POST_to_sss_altering_entry(self):
|
marco@16
|
227 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
228 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
229 e.add_fields(dcterms_identifier="doi://somerubbish", dcterms_foo="blah blah")
|
marco@16
|
230 resp = conn.create(metadata_entry = e,
|
marco@16
|
231 workspace='Main Site',
|
marco@16
|
232 collection=conn.sd.workspaces[0][1][0].title,
|
marco@16
|
233 in_progress=False)
|
marco@16
|
234 assert resp != None
|
marco@16
|
235
|
marco@16
|
236 def test_14_Invalid_Packaging_cached_receipt(self):
|
marco@16
|
237 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True, honour_receipts=True)
|
marco@16
|
238 col_iri = conn.sd.workspaces[0][1][0].href # pick the first collection
|
marco@16
|
239 dr = conn.create(payload = "Payload is just a load of text",
|
marco@16
|
240 mimetype = "text/plain",
|
marco@16
|
241 filename = "readme.txt",
|
marco@16
|
242 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
243 col_iri = col_iri,
|
marco@16
|
244 in_progress=True)
|
marco@16
|
245 # Now to GET that resource with invalid packaging
|
marco@16
|
246 try:
|
marco@16
|
247 content = conn.get_resource(dr.cont_iri, packaging="foofar")
|
marco@16
|
248 assert 1 == 0 # fail
|
marco@16
|
249 except PackagingFormatNotAvailable:
|
marco@16
|
250 # test the 'honour_receipts' flag and cached deposit
|
marco@16
|
251 pass
|
marco@16
|
252
|
marco@16
|
253 def test_15_Metadata_POST_to_sss_w_coliri(self):
|
marco@16
|
254 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
255 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
256 dr = conn.create(metadata_entry = e,
|
marco@16
|
257 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
258 in_progress=True)
|
marco@16
|
259 assert dr.code == 201
|
marco@16
|
260
|
marco@16
|
261 def test_16_Invalid_Packaging_cached_receipt(self):
|
marco@16
|
262 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True, honour_receipts=True)
|
marco@16
|
263 col_iri = conn.sd.workspaces[0][1][0].href # pick the first collection
|
marco@16
|
264 dr = conn.create(payload = "Payload is just a load of text",
|
marco@16
|
265 mimetype = "text/plain",
|
marco@16
|
266 filename = "readme.txt",
|
marco@16
|
267 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
268 col_iri = col_iri,
|
marco@16
|
269 in_progress=True,
|
marco@16
|
270 metadata_entry=None)
|
marco@16
|
271 # Now to GET that resource with invalid packaging
|
marco@16
|
272 try:
|
marco@16
|
273 content = conn.get_resource(dr.cont_iri, packaging="foofar")
|
marco@16
|
274 assert 1 == 0 # fail
|
marco@16
|
275 except PackagingFormatNotAvailable:
|
marco@16
|
276 # test the 'honour_receipts' flag and cached deposit
|
marco@16
|
277 pass
|
marco@16
|
278
|
marco@16
|
279 def test_17_Simple_POST_and_GET(self):
|
marco@16
|
280 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
281 col_iri = conn.sd.workspaces[0][1][0].href # pick the first collection
|
marco@16
|
282 dr = conn.create(payload = "Simple_POST_and_GET",
|
marco@16
|
283 mimetype = "text/plain",
|
marco@16
|
284 filename = "readme.txt",
|
marco@16
|
285 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
286 col_iri = col_iri,
|
marco@16
|
287 in_progress=True,
|
marco@16
|
288 metadata_entry=None)
|
marco@16
|
289 assert dr.code == 201
|
marco@16
|
290 # Now to GET that resource with no prescribed for packaging
|
marco@16
|
291 content_object = conn.get_resource(dr.cont_iri)
|
marco@16
|
292 # Can't guarantee that sss.py won't mangle submissions, so can't validate response at this moment
|
marco@16
|
293 assert content_object != None
|
marco@16
|
294
|
marco@16
|
295
|
marco@16
|
296 def test_18_Metadata_POST_to_se_iri(self):
|
marco@16
|
297 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
298 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
299 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
300 metadata_entry = e,
|
marco@16
|
301 mimetype = "text/plain",
|
marco@16
|
302 filename = "readme.txt",
|
marco@16
|
303 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
304 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
305 in_progress=True)
|
marco@16
|
306
|
marco@16
|
307 assert deposit_receipt.se_iri != None
|
marco@16
|
308 e.add_fields(dcterms_identifier="doi://somerubbish", dcterms_foo="blah blah")
|
marco@16
|
309 dr = conn.append(se_iri = deposit_receipt.se_iri,
|
marco@16
|
310 metadata_entry = e,
|
marco@16
|
311 in_progress=False)
|
marco@16
|
312 assert dr.code == 201
|
marco@16
|
313
|
marco@16
|
314 def test_19_File_POST_to_se_iri(self):
|
marco@16
|
315 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
316 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
317 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
318 metadata_entry = e,
|
marco@16
|
319 mimetype = "text/plain",
|
marco@16
|
320 filename = "readme.txt",
|
marco@16
|
321 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
322 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
323 in_progress=True)
|
marco@16
|
324
|
marco@16
|
325 assert deposit_receipt.se_iri != None
|
marco@16
|
326 dr = conn.append(se_iri = deposit_receipt.se_iri,
|
marco@16
|
327 payload = "Multipart_POST_then_appending_file_on_SE_IRI -- updated resource",
|
marco@16
|
328 mimetype = "text/plain",
|
marco@16
|
329 filename = "readthisextrafile.txt",
|
marco@16
|
330 packaging = "http://purl.org/net/sword/package/Binary")
|
marco@16
|
331 assert dr.code == 201
|
marco@16
|
332
|
marco@16
|
333 def test_20_Multipart_POST_to_se_iri(self):
|
marco@16
|
334 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
335 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
336 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
337 metadata_entry = e,
|
marco@16
|
338 mimetype = "text/plain",
|
marco@16
|
339 filename = "readme.txt",
|
marco@16
|
340 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
341 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
342 in_progress=True)
|
marco@16
|
343
|
marco@16
|
344 assert deposit_receipt.se_iri != None
|
marco@16
|
345 e.add_fields(dcterms_identifier="doi://multipart_update_to_SE_IRI")
|
marco@16
|
346 dr = conn.append(se_iri = deposit_receipt.se_iri,
|
marco@16
|
347 payload = "Multipart_POST_then_appending_file_on_SE_IRI -- updated resource",
|
marco@16
|
348 mimetype = "text/plain",
|
marco@16
|
349 filename = "readthisextrafile.txt",
|
marco@16
|
350 packaging = "http://purl.org/net/sword/package/Binary",
|
marco@16
|
351 metadata_entry = e)
|
marco@16
|
352 print dr.code
|
marco@16
|
353 assert dr.code == 201
|
marco@16
|
354
|
marco@16
|
355
|
marco@16
|
356 def test_21_Create_deposit_and_delete_content(self):
|
marco@16
|
357 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
358 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
359 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
360 metadata_entry = e,
|
marco@16
|
361 mimetype = "text/plain",
|
marco@16
|
362 filename = "readme.txt",
|
marco@16
|
363 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
364 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
365 in_progress=True)
|
marco@16
|
366 assert deposit_receipt.edit_media != None
|
marco@16
|
367 dr = conn.delete(resource_iri = deposit_receipt.edit_media)
|
marco@16
|
368 assert dr.code == 204 or dr.code == 200
|
marco@16
|
369
|
marco@16
|
370
|
marco@16
|
371 def test_22_Create_deposit_and_delete_deposit(self):
|
marco@16
|
372 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
373 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
374 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
375 metadata_entry = e,
|
marco@16
|
376 mimetype = "text/plain",
|
marco@16
|
377 filename = "readme.txt",
|
marco@16
|
378 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
379 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
380 in_progress=True)
|
marco@16
|
381 assert deposit_receipt.edit != None
|
marco@16
|
382 dr = conn.delete(resource_iri = deposit_receipt.edit)
|
marco@16
|
383 assert dr.code == 204 or dr.code == 200
|
marco@16
|
384
|
marco@16
|
385
|
marco@16
|
386 def test_23_Finish_in_progress_deposit(self):
|
marco@16
|
387 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
388 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
389 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
390 metadata_entry = e,
|
marco@16
|
391 mimetype = "text/plain",
|
marco@16
|
392 filename = "readme.txt",
|
marco@16
|
393 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
394 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
395 in_progress=True)
|
marco@16
|
396 assert deposit_receipt.edit != None
|
marco@16
|
397 dr = conn.complete_deposit(se_iri = deposit_receipt.se_iri)
|
marco@16
|
398 print "This will fail until the sss.py SWORD2 server responds properly, rather than with code 201"
|
marco@16
|
399 assert dr.code == 200
|
marco@16
|
400
|
marco@16
|
401 def test_24_get_sword_statement(self):
|
marco@16
|
402 conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="sword", download_service_document=True)
|
marco@16
|
403 e = Entry(title="Foo", id="asidjasidj", dcterms_appendix="blah blah", dcterms_title="foo bar")
|
marco@16
|
404 deposit_receipt = conn.create(payload = "Multipart_POST_then_update_on_EM_IRI",
|
marco@16
|
405 metadata_entry = e,
|
marco@16
|
406 mimetype = "text/plain",
|
marco@16
|
407 filename = "readme.txt",
|
marco@16
|
408 packaging = 'http://purl.org/net/sword/package/Binary',
|
marco@16
|
409 col_iri = conn.sd.workspaces[0][1][0].href,
|
marco@16
|
410 in_progress=True)
|
marco@16
|
411 ss_iri = None
|
marco@16
|
412 for item_dict in deposit_receipt.links['http://purl.org/net/sword/terms/statement']:
|
marco@16
|
413 if item_dict.has_key('type') and item_dict.get('type', None) == "application/atom+xml;type=feed":
|
marco@16
|
414 ss_iri = item_dict.get('href')
|
marco@16
|
415 assert ss_iri != None
|
marco@16
|
416 ss = conn.get_atom_sword_statement(ss_iri)
|
marco@16
|
417 assert ss != None
|
marco@16
|
418 assert ss.entries[0].metadata.get('sword_depositedBy') == 'sword'
|