Exemplo n.º 1
0
 def test_17_advanced_replace_file_content(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging='http://purl.org/net/sword/package/SimpleZip')
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # now do the replace
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="update.zip",
                         packaging='http://purl.org/net/sword/package/SimpleZip',
                         metadata_relevant=True)
     
     assert new_receipt.code == 204
     assert new_receipt.dom is None
Exemplo n.º 2
0
 def test_15_retrieve_content_em_iri_as_feed(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging='http://purl.org/net/sword/package/SimpleZip')
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # we're going to work with the edit_media_feed iri
     assert receipt.edit_media_feed is not None
     
     response = conn.get_resource(content_iri=receipt.edit_media_feed)
     
     assert response.code == 200
     assert response.content is not None
     
     # the response should be an xml document, so let's see if we can parse
     # it.  This should give us an exception which will fail the test if not
     dom = etree.fromstring(response.content)
Exemplo n.º 3
0
	def __init__(self, owner):
		raise NotImplementedError
		c = Connection(SD_URI, user_name = owner.username, user_pass=owner.password)
		c.get_service_document()

		# pick the first collection within the first workspace:
		workspace_1_title, workspace_1_collections = c.workspaces[0]
		collection = workspace_1_collections[0]

		# upload "package.zip" to this collection as a new (binary) resource:
		with open("package.zip", "r") as pkg:
		    receipt = c.create(col_iri = collection.href,
		                                payload = pkg,
		                                mimetype = "application/zip",
		                                filename = "package.zip",
		                                packaging = 'http://purl.org/net/sword/package/Binary',
		                                in_progress = True)    # As the deposit isn't yet finished


		# Add a metadata record to this newly created resource (or 'container')
		from sword2 import Entry
		# Entry can be passed keyword parameters to add metadata to the entry (namespace + '_' + tagname)
		e = Entry(id="atomid", 
		          title="atom-title",
		          dcterms_abstract = "Info about the resource....",
		          )
		# to add a new namespace:
		e.register_namespace('skos', 'http://www.w3.org/2004/02/skos/core#')
		e.add_field("skos_Concept", "...")


		# Update the metadata entry to the resource:
		updated_receipt = c.update(metadata_entry = e,
		                           dr = receipt,   # use the receipt to discover the right URI to use
		                           in_progress = False)  # finish the deposit
Exemplo n.º 4
0
 def test_31_delete_container(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO,
                         error_response_raises_exceptions=False)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     #e = Entry(title="Multipart deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     #metadata_entry = e,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
     
     # ensure that we have a receipt (the server may not give us one
     # by default)
     edit_iri = receipt.location
     receipt = conn.get_deposit_receipt(edit_iri)
     
     # delete the container
     new_receipt = conn.delete_container(dr=receipt)
     
     assert new_receipt.code == 204
     assert new_receipt.dom is None
     
     # the next check is that this 404s appropriately now
     another_receipt = conn.get_deposit_receipt(edit_iri)
Exemplo n.º 5
0
    def test_01_massive_file(self):
        http = UrlLib2Layer()
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="scalability testing",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri=col.href, metadata_entry=e)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now do the replace
        with open(PACKAGE) as pkg:
            new_receipt = conn.update(
                dr=receipt,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="massive_file.zip",
                packaging='http://purl.org/net/sword/package/Binary')

        assert new_receipt.code == 204
Exemplo n.º 6
0
    def preflight_submission(self):
        opener = self.get_opener()

        conn = Connection(self.sword2_sd_url,
                          error_response_raises_exceptions=False,
                          http_impl=UrlLib2Layer(opener))
        logger.debug("Retrieving the service document")
        conn.get_service_document()

        logger.debug("Retrieved the service document")

        self.assertIsNotNone(conn.sd)
        self.assertIsNotNone(conn.sd.workspaces)
        self.assertNotEqual(len(conn.sd.workspaces), 0)

        workspace = conn.sd.workspaces[0][1]

        # we require there to be at least one collection
        self.assertNotEqual(len(workspace), 0)
        col = workspace[0]

        testid = "testid_" + str(uuid.uuid4())
        logger.debug("col iri = " + str(col.href))

        e = Entry(id=testid,
                  title="test title",
                  dcterms_abstract="test description")
        print str(e)
        receipt = conn.create(col_iri=col.href,
                              metadata_entry=e,
                              suggested_identifier=testid)
        #col.href=http://192.168.2.237/swordv2/silo/test-silo
        self.assertIsNotNone(receipt)
        self.assertEquals(receipt.code, 201)
        return receipt.location
Exemplo n.º 7
0
    def preflight_submission(self):
        opener = self.get_opener()
        
        conn = Connection(self.sword2_sd_url, error_response_raises_exceptions=False, http_impl=UrlLib2Layer(opener))
        logger.debug("Retrieving the service document")
        conn.get_service_document()
        
        logger.debug("Retrieved the service document")
        
        self.assertIsNotNone(conn.sd)
        self.assertIsNotNone(conn.sd.workspaces)
        self.assertNotEqual(len(conn.sd.workspaces),0)
        
        
        workspace = conn.sd.workspaces[0][1]
        
        # we require there to be at least one collection
        self.assertNotEqual(len(workspace),0)
        col = workspace[0]
        

        testid = "testid_"+str(uuid.uuid4())
        logger.debug("col iri = " + str(col.href))
        
        e = Entry(id=testid, title="test title", dcterms_abstract="test description")
        print str(e)
        receipt = conn.create(col_iri=col.href, metadata_entry=e, suggested_identifier=testid)
        #col.href=http://192.168.2.237/swordv2/silo/test-silo
        self.assertIsNotNone(receipt)
        self.assertEquals(receipt.code,201)
        return receipt.location
Exemplo n.º 8
0
    def test_33_get_ore_statement(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Multipart deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        # ensure that we have a receipt (the server may not give us one
        # by default)
        edit_iri = receipt.location
        receipt = conn.get_deposit_receipt(edit_iri)

        assert receipt.ore_statement_iri is not None

        # get the statement
        statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)

        assert isinstance(statement, Ore_Sword_Statement)
Exemplo n.º 9
0
 def test_21_advanced_replace_with_multipart(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="Multipart deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     metadata_entry = e,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
                     
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # now do the replace
     ne = Entry(title="A multipart update", id="asidjasidj", dcterms_abstract="new abstract", dcterms_identifier="http://elsewhere/")
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         metadata_entry = ne,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="update.zip",
                         packaging='http://purl.org/net/sword/package/SimpleZip',
                         in_progress=True)
     
     assert new_receipt.code == 204 or new_receipt.code == 200
     if new_receipt.code == 204:
         assert new_receipt.dom is None
     if new_receipt.code == 200:
         assert new_receipt.parsed == True
         assert new_receipt.valid == True
Exemplo n.º 10
0
    def test_15_retrieve_content_em_iri_as_feed(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # we're going to work with the edit_media_feed iri
        assert receipt.edit_media_feed is not None

        response = conn.get_resource(content_iri=receipt.edit_media_feed)

        assert response.code == 200
        assert response.content is not None

        # the response should be an xml document, so let's see if we can parse
        # it.  This should give us an exception which will fail the test if not
        dom = etree.fromstring(response.content)
Exemplo n.º 11
0
    def test_10_advanced_retrieve_deposit_receipt(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                in_progress=True,
                suggested_identifier="0987654321")

        # we're going to work with the location
        assert receipt.location != None

        new_receipt = conn.get_deposit_receipt(receipt.location)

        assert new_receipt.code == 200
        assert new_receipt.parsed == True
        assert new_receipt.valid == True
Exemplo n.º 12
0
    def test_34_complete_deposit(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Foo",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_title="my title")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                in_progress=True,
                suggested_identifier="zyxwvutsrq")

        # ensure that we have a receipt (the server may not give us one
        # by default)
        edit_iri = receipt.location
        receipt = conn.get_deposit_receipt(edit_iri)

        response = conn.complete_deposit(dr=receipt)

        assert response.code == 200
Exemplo n.º 13
0
 def test_41_get_service_document_unauthorised(self):
     conn = Connection(SSS_URL,
                       user_name="alsdkfjsdz",
                       user_pass="******",
                       http_impl=http)
     conn.get_service_document()
     assert conn.sd is None
Exemplo n.º 14
0
    def test_36_check_md5(self):
        conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="An entry only deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri=col.href, metadata_entry=e)
        with open(PACKAGE) as pkg:
            new_receipt = conn.update(
                dr=receipt,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="update.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                md5sum="123456789"
            )  # pass in a known md5 (even though it is wrong)
        statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)

        # need to try and extract the md5 from the dom
        count = 0
        for element in statement.dom.findall(
                "{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description/{http://vocab.ox.ac.uk/dataset/schema#}hasMD5"
        ):
            count += 1
            assert element.text.strip() == "123456789"

        assert count == 1
Exemplo n.º 15
0
    def test_19_advanced_replace_metadata(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="An entry only deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri=col.href, metadata_entry=e)

        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now do the replace
        ne = Entry(title="A metadata update",
                   id="asidjasidj",
                   dcterms_abstract="new abstract",
                   dcterms_identifier="http://elsewhere/")
        new_receipt = conn.update(dr=receipt,
                                  metadata_entry=ne,
                                  in_progress=True)

        assert new_receipt.code == 204 or new_receipt.code == 200
        if new_receipt.code == 204:
            assert new_receipt.dom is None
        if new_receipt.code == 200:
            assert new_receipt.parsed == True
            assert new_receipt.valid == True
Exemplo n.º 16
0
    def test_14_error_retrieve_content_em_iri(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          error_response_raises_exceptions=False,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        error = 'http://purl.org/net/sword/package/IJustMadeThisUp'
        response = conn.get_resource(content_iri=receipt.edit_media,
                                     packaging=error)

        assert response.code == 406
        assert isinstance(response, Error_Document)
        assert response.error_href == "http://purl.org/net/sword/error/ErrorContent"
Exemplo n.º 17
0
    def test_05_basic_create_resource_with_multipart(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Foo",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_title="my title")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        assert receipt.code == 201
        assert receipt.location != None

        # these last two assertions are contingent on if we actually get a
        # receipt back from the server (which we might not legitimately get)
        assert receipt.dom is None or receipt.parsed == True
        assert receipt.dom is None or receipt.valid == True
Exemplo n.º 18
0
    def test_08_advanced_create_resource_with_entry(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]

        e = Entry(title="An entry only deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        e.register_namespace("oxds", "http://databank.ox.ac.uk/terms/")
        e.add_field("oxds_whatever", "whatever")

        receipt = conn.create(col_iri=col.href,
                              metadata_entry=e,
                              in_progress=True,
                              suggested_identifier=str(uuid.uuid4()))

        assert receipt.code == 201
        assert receipt.location != None

        # these last two assertions are contingent on if we actually get a
        # receipt back from the server (which we might not legitimately get)
        assert receipt.dom is None or receipt.parsed == True
        assert receipt.dom is None or receipt.valid == True
Exemplo n.º 19
0
    def test_04_advanced_create_resource_with_package(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                in_progress=True,
                suggested_identifier="abcdefghijklmnop")

        assert receipt.code == 201
        assert receipt.location != None

        # these last two assertions are contingent on if we actually get a
        # receipt back from the server (which we might not legitimately get)
        assert receipt.dom is None or receipt.parsed == True
        assert receipt.dom is None or receipt.valid == True
Exemplo n.º 20
0
    def test_17_advanced_replace_file_content(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now do the replace
        with open(PACKAGE) as pkg:
            new_receipt = conn.update(
                dr=receipt,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="update.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                metadata_relevant=True)

        assert new_receipt.code == 204
        assert new_receipt.dom is None
Exemplo n.º 21
0
 def test_30_advanced_add_multipart(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="Multipart deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     metadata_entry = e,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
     
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     ne = Entry(title="Multipart deposit", id="asidjasidj", dcterms_identifier="http://another/",
                 dcterms_creator="Me!", dcterms_rights="CC0")
     with open(PACKAGE) as pkg:
         new_receipt = conn.append(dr=receipt,
                                     metadata_entry=ne,
                                     payload=pkg, 
                                     filename="addition.zip", 
                                     mimetype=PACKAGE_MIME,
                                     packaging="http://purl.org/net/sword/package/SimpleZip",
                                     in_progress=True,
                                     metadata_relevant=True)
         
     assert new_receipt.code >= 200 and new_receipt.code < 400
Exemplo n.º 22
0
    def test_26_advanced_add_content_to_resource_package(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        receipt = conn.get_deposit_receipt(receipt.location)

        with open(PACKAGE) as pkg:
            new_receipt = conn.add_file_to_resource(
                receipt.edit_media,
                pkg,
                "addition.zip",
                mimetype=PACKAGE_MIME,
                packaging="http://purl.org/net/sword/package/SimpleZip",
                metadata_relevant=True)

        assert new_receipt.code >= 200 and new_receipt.code < 400
        assert new_receipt.location is not None
        assert new_receipt.location == receipt.edit_media
Exemplo n.º 23
0
    def test_28_advanced_add_metadata(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Multipart deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        ne = Entry(title="Multipart deposit",
                   id="asidjasidj",
                   dcterms_identifier="http://another/",
                   dcterms_creator="Me!",
                   dcterms_rights="CC0")
        new_receipt = conn.append(dr=receipt,
                                  metadata_entry=ne,
                                  in_progress=True)

        assert new_receipt.code == 200
Exemplo n.º 24
0
    def test_31_delete_container(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          error_response_raises_exceptions=False,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Multipart deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        # ensure that we have a receipt (the server may not give us one
        # by default)
        edit_iri = receipt.location
        receipt = conn.get_deposit_receipt(edit_iri)

        # delete the container
        new_receipt = conn.delete_container(dr=receipt)

        assert new_receipt.code == 204
        assert new_receipt.dom is None

        # the next check is that this 404s appropriately now
        another_receipt = conn.get_deposit_receipt(edit_iri)
Exemplo n.º 25
0
    def test_11_basic_retrieve_content_cont_iri(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # we're going to work with the cont_iri
        assert receipt.cont_iri is not None

        resource = conn.get_resource(content_iri=receipt.cont_iri)

        assert resource.code == 200
        assert resource.content is not None
Exemplo n.º 26
0
    def test_22_delete_content(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Multipart deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now delete the content but not the container
        new_receipt = conn.delete_content_of_resource(dr=receipt)

        assert new_receipt.code == 204
        assert new_receipt.dom is None
Exemplo n.º 27
0
    def test_13_advanced_retrieve_content_em_iri(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')
        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        packaging = 'http://purl.org/net/sword/package/SimpleZip'
        if receipt.packaging is not None and len(receipt.packaging) > 0:
            packaging = receipt.packaging[0]

        resource = conn.get_resource(content_iri=receipt.edit_media,
                                     packaging=packaging,
                                     on_behalf_of=SSS_OBO)

        assert resource.code == 200
        assert resource.content is not None
Exemplo n.º 28
0
    def test_17_advanced_replace_file_content(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="An entry only deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri=col.href, metadata_entry=e)

        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now do the replace
        with open(PACKAGE) as pkg:
            new_receipt = conn.update(
                dr=receipt,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="update.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                metadata_relevant=True)

        assert new_receipt.code == 204
        assert new_receipt.dom is None
Exemplo n.º 29
0
 def testServiceDocumentAccess(self):
     opener = self.get_opener()
     for i in range(10):
         conn = Connection(self.sword2_sd_url, error_response_raises_exceptions=False, http_impl=UrlLib2Layer(opener))
         conn.get_service_document()        
         self.assertIsNotNone(conn.sd, "Service document None (loop %d)"%(i))
         self.assertIsNotNone(conn.sd.workspaces, "Service document workspace None (loop %d)"%(i))
         self.assertNotEqual(len(conn.sd.workspaces),0, "Service document worksoacxe count %d (loop %d)"%(len(conn.sd.workspaces),i))
     return
Exemplo n.º 30
0
 def test_04_init_from_sss_then_get_doc(self):
     conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER, user_name="sword", user_pass="******")
     assert conn.sd_iri == "http://localhost:%s/sd-uri" % PORT_NUMBER
     assert conn.sd == None    # Not asked to get sd doc yet
     conn.get_service_document()
     assert conn.sd != None
     assert conn.sd.parsed == True
     assert conn.sd.valid == True
     assert len(conn.sd.workspaces) == 1
Exemplo n.º 31
0
    def preflight_submission(self, dataset, opener, repository, silo ):
        logger.debug("Carrying out pre-flight submission")
        
        # verify that we can get a service document, and that there
        # is at least one silo and that we can authenticate
        
        if repository.sword2_sd_url is None:
            raise SwordServiceError("No sword2 service-document URL for repository configuration")
            
        # get the service document (for which we must be authenticated)
        conn = Connection(repository.sword2_sd_url, error_response_raises_exceptions=False, http_impl=UrlLib2Layer(opener))
        conn.get_service_document()
        
        # we require there to be at least one workspace
        if conn.sd is None:
            raise SwordServiceError("did not successfully retrieve a service document")
        
        if conn.sd.workspaces is None:
            raise SwordServiceError("no workspaces defined in service document")
        
        if len(conn.sd.workspaces) == 0:
            raise SwordServiceError("no workspaces defined in service document")
        
        workspace = conn.sd.workspaces[0][1]
        
        # we require there to be at least one collection
        if len(workspace) == 0:
            raise SwordServiceError("no collections defined in workspace")
            
        # FIXME: we don't currently have a mechanism to make decisions about
        # which collection to put stuff in, so we just put stuff in the first
        # one for the time being
        col = workspace[0]
        silohref = repository.homepage + "swordv2/silo/" + silo

        # assemble the entry ready for deposit, using the basic metadata
        # FIXME: is there anything further we need to do about the metadata here?
        e = Entry(id=dataset.identifier, title=dataset.title, dcterms_abstract=dataset.description)
        
        # create the item using the metadata-only approach (suppress errors along the way,
        # we'll check for them below)
        #receipt = conn.create(col_iri=col.href, metadata_entry=e, suggested_identifier=dataset.identifier)
        logger.debug( "Deposit is being created" )
        receipt = conn.create(col_iri=silohref, metadata_entry=e, suggested_identifier=dataset.identifier)
        logger.debug( "Deposit created" )
        # check for errors
        if receipt.code >= 400:
            # this is an error
            logger.debug("Received error message from server: " + receipt.to_xml())
            if receipt.error_href == "http://databank.ox.ac.uk/errors/DatasetConflict":
                raise SwordSlugRejected()
            raise SwordDepositError(receipt)
        
        logger.debug("Deposit carried out to: " + receipt.location)
        # return receipt.location
        return (receipt.alternate,receipt.location)
Exemplo n.º 32
0
    def test_34_check_metadata_only_state(self):
        conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri = col.href, metadata_entry = e)
        statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)

        assert len(statement.states) == 1
        assert statement.states[0][0] == "http://databank.ox.ac.uk/state/EmptyContainer"
Exemplo n.º 33
0
    def test_34_check_metadata_only_state(self):
        conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri = col.href, metadata_entry = e)
        statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)

        assert len(statement.states) == 1
        assert statement.states[0][0] == "http://databank.ox.ac.uk/state/EmptyContainer"
Exemplo n.º 34
0
    def test_01_get_service_document(self):
        conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
        conn.get_service_document()

        # given that the client is fully functional, testing that the
        # service document parses and is valid is sufficient.  This, obviously,
        # doesn't test the validation routine itself.
        assert conn.sd != None
        assert conn.sd.parsed == True
        assert conn.sd.valid == True
        assert len(conn.sd.workspaces) == 1
Exemplo n.º 35
0
 def test_02_get_service_document_on_behalf_of(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     
     # given that the client is fully functional, testing that the
     # service document parses and is valid is sufficient.  This, obviously,
     # doesn't test the validation routine itself.
     assert conn.sd != None
     assert conn.sd.parsed == True
     assert conn.sd.valid == True 
     assert len(conn.sd.workspaces) == 1
Exemplo n.º 36
0
 def test_04_init_from_sss_then_get_doc(self):
     conn = Connection("http://localhost:%s/sd-uri" % PORT_NUMBER,
                       user_name="sword",
                       user_pass="******")
     assert conn.sd_iri == "http://localhost:%s/sd-uri" % PORT_NUMBER
     assert conn.sd == None  # Not asked to get sd doc yet
     conn.get_service_document()
     assert conn.sd != None
     assert conn.sd.parsed == True
     assert conn.sd.valid == True
     assert len(conn.sd.workspaces) == 1
Exemplo n.º 37
0
    def test_10_advanced_retrieve_deposit_receipt(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        suggested_id = str(uuid.uuid4())
        e = Entry(title="An entry only deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        receipt = conn.create(col_iri=col.href,
                              metadata_entry=e,
                              in_progress=True,
                              suggested_identifier=suggested_id)

        # we're going to work with the location
        assert receipt.location != None

        new_receipt = conn.get_deposit_receipt(receipt.location)

        assert new_receipt.code == 200
        assert new_receipt.parsed == True
        assert new_receipt.valid == True

        print new_receipt.to_xml()

        # Here are some more things we can know about the receipt
        # 1 - the links will all contain the suggested identifier
        # 2 - the links will all contain the name of the silo
        # 3 - the packaging will contain DataBankBagIt
        # 4 - the DC metadata will be reflected back at us
        # 5 - the atom metadata will be populated in some way

        for rel, links in new_receipt.links.iteritems():
            for link in links:
                assert suggested_id in link['href']
                assert col.title in link['href']

        assert "http://dataflow.ox.ac.uk/package/DataBankBagIt" in new_receipt.packaging

        # check the atom metadata
        assert new_receipt.title == "An entry only deposit"
        assert new_receipt.summary == "abstract"

        # check the DC metadata
        assert "An entry only deposit" in new_receipt.metadata["dcterms_title"]
        assert "abstract" in new_receipt.metadata["dcterms_abstract"]
        assert "http://whatever/" in new_receipt.metadata["dcterms_identifier"]
Exemplo n.º 38
0
 def test_09_basic_retrieve_deposit_receipt(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     
     # we're going to work with the location
     assert receipt.location != None
     
     new_receipt = conn.get_deposit_receipt(receipt.location)
     
     assert new_receipt.code == 200
     assert new_receipt.parsed == True
     assert new_receipt.valid == True
Exemplo n.º 39
0
 def test_09_basic_retrieve_deposit_receipt(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     
     # we're going to work with the location
     assert receipt.location != None
     
     new_receipt = conn.get_deposit_receipt(receipt.location)
     
     assert new_receipt.code == 200
     assert new_receipt.parsed == True
     assert new_receipt.valid == True
Exemplo n.º 40
0
 def test_07_basic_create_resource_with_entry(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href,
                 metadata_entry = e)
                     
     assert receipt.code == 201
     assert receipt.location != None
     
     # these last two assertions are contingent on if we actually get a 
     # receipt back from the server (which we might not legitimately get)
     assert receipt.dom is None or receipt.parsed == True
     assert receipt.dom is None or receipt.valid == True
Exemplo n.º 41
0
 def test_07_basic_create_resource_with_entry(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href,
                 metadata_entry = e)
                     
     assert receipt.code == 201
     assert receipt.location != None
     
     # these last two assertions are contingent on if we actually get a 
     # receipt back from the server (which we might not legitimately get)
     assert receipt.dom is None or receipt.parsed == True
     assert receipt.dom is None or receipt.valid == True
Exemplo n.º 42
0
 def test_35_check_new_zip_state(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="update.zip",
                         packaging='http://purl.org/net/sword/package/SimpleZip')
     statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)
     
     assert len(statement.states) == 1
     assert statement.states[0][0] == "http://databank.ox.ac.uk/state/ZipFileAdded"
Exemplo n.º 43
0
 def test_35_check_new_zip_state(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="update.zip",
                         packaging='http://purl.org/net/sword/package/SimpleZip')
     statement = conn.get_ore_sword_statement(receipt.ore_statement_iri)
     
     assert len(statement.states) == 1
     assert statement.states[0][0] == "http://databank.ox.ac.uk/state/ZipFileAdded"
Exemplo n.º 44
0
 def test_36_error_bad_request(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW,
                         error_response_raises_exceptions=False)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip',
                     in_progress = "Invalid",    # the API seems to allow this!
                     suggested_identifier = "zyxwvutsrq")
                     
     assert receipt.code == 400
     assert isinstance(receipt, Error_Document)
     assert receipt.error_href == "http://purl.org/net/sword/error/ErrorBadRequest"
Exemplo n.º 45
0
    def test_21_advanced_replace_with_multipart(self):
        conn = Connection(SSS_URL,
                          user_name=SSS_UN,
                          user_pass=SSS_PW,
                          on_behalf_of=SSS_OBO,
                          http_impl=http)
        conn.get_service_document()
        col = conn.sd.workspaces[0][1][0]
        e = Entry(title="Multipart deposit",
                  id="asidjasidj",
                  dcterms_abstract="abstract",
                  dcterms_identifier="http://whatever/")
        with open(PACKAGE) as pkg:
            receipt = conn.create(
                col_iri=col.href,
                metadata_entry=e,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="example.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip')

        # ensure that we have a receipt (the server may not give us one
        # by default)
        receipt = conn.get_deposit_receipt(receipt.location)

        # now do the replace
        ne = Entry(title="A multipart update",
                   id="asidjasidj",
                   dcterms_abstract="new abstract",
                   dcterms_identifier="http://elsewhere/")
        with open(PACKAGE) as pkg:
            new_receipt = conn.update(
                dr=receipt,
                metadata_entry=ne,
                payload=pkg,
                mimetype=PACKAGE_MIME,
                filename="update.zip",
                packaging='http://purl.org/net/sword/package/SimpleZip',
                in_progress=True)

        assert new_receipt.code == 204 or new_receipt.code == 200
        if new_receipt.code == 204:
            assert new_receipt.dom is None
        if new_receipt.code == 200:
            assert new_receipt.parsed == True
            assert new_receipt.valid == True
Exemplo n.º 46
0
 def test_01_massive_file(self):
     http = UrlLib2Layer()
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, http_impl=http)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="scalability testing", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # now do the replace
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="massive_file.zip",
                         packaging='http://purl.org/net/sword/package/Binary')
                         
     assert new_receipt.code == 204
Exemplo n.º 47
0
 def test_23_basic_add_content_to_resource_single_file(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
     receipt = conn.get_deposit_receipt(receipt.location)
     
     with open(PACKAGE) as pkg:
         new_receipt = conn.add_file_to_resource(receipt.edit_media, pkg, "addition.zip", mimetype=PACKAGE_MIME)
     
     assert new_receipt.code >= 200 and new_receipt.code < 400
     assert new_receipt.location is not None
     assert new_receipt.location != receipt.edit_media
Exemplo n.º 48
0
 def test_37_error_target_owner_unknown(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW,
                         error_response_raises_exceptions=False)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip',
                     in_progress = True,
                     suggested_identifier = "zyxwvutsrq",
                     on_behalf_of="richard") # we expressly set the wrong obo on the request rather than the connection
                     
     assert receipt.code == 403
     assert isinstance(receipt, Error_Document)
     assert receipt.error_href == "http://purl.org/net/sword/error/TargetOwnerUnknown"
Exemplo n.º 49
0
 def test_35_error_checksum_mismatch(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW,
                         error_response_raises_exceptions=False)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip',
                     in_progress = True,
                     suggested_identifier = "zyxwvutsrq",
                     md5sum="123456789")
                     
     assert receipt.code == 412
     assert isinstance(receipt, Error_Document)
     assert receipt.error_href == "http://purl.org/net/sword/error/ErrorChecksumMismatch"
Exemplo n.º 50
0
 def test_03_basic_create_resource_with_package(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
                     
     assert receipt.code == 201
     assert receipt.location != None
     
     # these last two assertions are contingent on if we actually get a 
     # receipt back from the server (which we might not legitimately get)
     assert receipt.dom is None or receipt.parsed == True
     assert receipt.dom is None or receipt.valid == True
Exemplo n.º 51
0
 def get_silos(self, opener, repository):
     logger.debug("Carrying out get_silos for a repository selected")
     
     # verify that we can get a service document, and that there
     # is at least one silo and that we can authenticate
     
     if repository.sword2_sd_url is None:
         logger.debug("No sword2 service-document URL for repository configuration : ")
         logger.debug(repr(repository.sword2_sd_url))
         raise SwordServiceError("No sword2 service-document URL for repository configuration")
     
     logger.debug("formulating a connection object for sword repo with url : " + repository.sword2_sd_url )   
     # get the service document (for which we must be authenticated)
     conn = Connection(repository.sword2_sd_url, error_response_raises_exceptions=False, http_impl=UrlLib2Layer(opener))
     logger.debug("before getting service document : ")   
     conn.get_service_document()
     logger.debug("Got the service document")
     # we require there to be at least one workspace
     if conn.sd is None:
         logger.debug("did not successfully retrieve a service document")
         raise SwordServiceError("did not successfully retrieve a service document")
     
     
     if conn.sd.workspaces is None:
         logger.debug("no workspaces defined in service document")
         raise SwordServiceError("no workspaces defined in service document")
     
     if len(conn.sd.workspaces) == 0:
         logger.debug("no workspaces defined in service document")
         raise SwordServiceError("no workspaces defined in service document")
     
     workspace = conn.sd.workspaces[0][1]
     
     # we require there to be at least one collection
     if len(workspace) == 0:
         logger.debug("no collections defined in workspace")
         raise SwordServiceError("no collections defined in workspace")
         
     # FIXME: we don't currently have a mechanism to make decisions about
     # which collection to put stuff in, so we just put stuff in the first
     # one for the time being
     #col = workspace[0]
     logger.debug("Finished with get_silos for a repository selected")
     return workspace
Exemplo n.º 52
0
 def test_09_basic_retrieve_deposit_receipt(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
     
     # we're going to work with the location
     assert receipt.location != None
     
     new_receipt = conn.get_deposit_receipt(receipt.location)
     
     assert new_receipt.code == 200
     assert new_receipt.parsed == True
     assert new_receipt.valid == True
Exemplo n.º 53
0
 def test_10_advanced_retrieve_deposit_receipt(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     suggested_id = str(uuid.uuid4())
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e, 
                     in_progress = True,
                     suggested_identifier = suggested_id)
     
     # we're going to work with the location
     assert receipt.location != None
     
     new_receipt = conn.get_deposit_receipt(receipt.location)
     
     assert new_receipt.code == 200
     assert new_receipt.parsed == True
     assert new_receipt.valid == True
     
     print new_receipt.to_xml()
     
     # Here are some more things we can know about the receipt
     # 1 - the links will all contain the suggested identifier
     # 2 - the links will all contain the name of the silo
     # 3 - the packaging will contain DataBankBagIt
     # 4 - the DC metadata will be reflected back at us
     # 5 - the atom metadata will be populated in some way
     
     for rel, links in new_receipt.links.iteritems():
         for link in links:
             assert suggested_id in link['href']
             assert col.title in link['href']
         
     assert "http://dataflow.ox.ac.uk/package/DataBankBagIt" in new_receipt.packaging
     
     # check the atom metadata
     assert new_receipt.title == "An entry only deposit"
     assert new_receipt.summary == "abstract"
     
     # check the DC metadata
     assert "An entry only deposit" in new_receipt.metadata["dcterms_title"]
     assert "abstract" in new_receipt.metadata["dcterms_abstract"]
     assert "http://whatever/" in new_receipt.metadata["dcterms_identifier"]
Exemplo n.º 54
0
 def test_05_basic_create_resource_with_multipart(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, http_impl=http)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="Foo", id="asidjasidj", dcterms_abstract="abstract", dcterms_title="my title")
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href,
                     metadata_entry = e,
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip')
                     
     assert receipt.code == 201
     assert receipt.location != None
     
     # these last two assertions are contingent on if we actually get a 
     # receipt back from the server (which we might not legitimately get)
     assert receipt.dom is None or receipt.parsed == True
     assert receipt.dom is None or receipt.valid == True
Exemplo n.º 55
0
 def test_16_basic_replace_file_content(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # now do the replace
     with open(PACKAGE) as pkg:
         new_receipt = conn.update(dr = receipt,
                         payload=pkg,
                         mimetype=PACKAGE_MIME,
                         filename="update.zip",
                         packaging='http://purl.org/net/sword/package/SimpleZip')
     
     assert new_receipt.code == 204
     assert new_receipt.dom is None
Exemplo n.º 56
0
 def test_10_advanced_retrieve_deposit_receipt(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging = 'http://purl.org/net/sword/package/SimpleZip',
                     in_progress = True,
                     suggested_identifier = "0987654321")
     
     # we're going to work with the location
     assert receipt.location != None
     
     new_receipt = conn.get_deposit_receipt(receipt.location)
     
     assert new_receipt.code == 200
     assert new_receipt.parsed == True
     assert new_receipt.valid == True
Exemplo n.º 57
0
 def test_19_advanced_replace_metadata(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW, on_behalf_of=SSS_OBO)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     e = Entry(title="An entry only deposit", id="asidjasidj", dcterms_abstract="abstract", dcterms_identifier="http://whatever/")
     receipt = conn.create(col_iri = col.href, metadata_entry = e)
     
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # now do the replace
     ne = Entry(title="A metadata update", id="asidjasidj", dcterms_abstract="new abstract", dcterms_identifier="http://elsewhere/")
     new_receipt = conn.update(dr=receipt, metadata_entry=ne, in_progress=True)
     
     assert new_receipt.code == 204 or new_receipt.code == 200
     if new_receipt.code == 204:
         assert new_receipt.dom is None
     if new_receipt.code == 200:
         assert new_receipt.parsed == True
         assert new_receipt.valid == True
Exemplo n.º 58
0
 def test_12_basic_retrieve_content_em_iri(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging='http://purl.org/net/sword/package/SimpleZip')
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     # we're going to work with the edit_media iri
     assert receipt.edit_media is not None
     
     resource = conn.get_resource(content_iri=receipt.edit_media)
     
     assert resource.code == 200
     assert resource.content is not None
Exemplo n.º 59
0
 def test_14_error_retrieve_content_em_iri(self):
     conn = Connection(SSS_URL, user_name=SSS_UN, user_pass=SSS_PW,
                         error_response_raises_exceptions=False)
     conn.get_service_document()
     col = conn.sd.workspaces[0][1][0]
     with open(PACKAGE) as pkg:
         receipt = conn.create(col_iri = col.href, 
                     payload=pkg, 
                     mimetype=PACKAGE_MIME, 
                     filename="example.zip",
                     packaging='http://purl.org/net/sword/package/SimpleZip')
     # ensure that we have a receipt (the server may not give us one
     # by default)
     receipt = conn.get_deposit_receipt(receipt.location)
     
     error = 'http://purl.org/net/sword/package/IJustMadeThisUp'
     response = conn.get_resource(content_iri=receipt.edit_media, packaging=error)
     
     assert response.code == 406
     assert isinstance(response, Error_Document)
     assert response.error_href == "http://purl.org/net/sword/error/ErrorContent"