Package sword2 :: Module error_document
[hide private]
[frames] | no frames]

Source Code for Module sword2.error_document

 1  #!/usr/bin/env python 
 2  # -*- coding: utf-8 -*- 
 3  """ 
 4  Provides a convenience class for handling and parsing Error Document responses. 
 5  """ 
 6   
 7  from deposit_receipt import Deposit_Receipt 
 8  from server_errors import SWORD2ERRORSBYIRI, get_error 
 9   
10 -class Error_Document(Deposit_Receipt):
11 """ 12 Example Error document: 13 14 <?xml version="1.0" encoding="utf-8"?> 15 <sword:error xmlns="http://www.w3.org/2005/Atom" 16 xmlns:sword="http://purl.org/net/sword/" 17 xmlns:arxiv="http://arxiv.org/schemas/atom" 18 href="http://example.org/errors/BadManifest"> 19 <author> 20 <name>Example repository</name> 21 </author> 22 <title>ERROR</title> 23 <updated>2008-02-19T09:34:27Z</updated> 24 25 <generator uri="https://example.org/sword-app/" 26 version="0.9">sword@example.org</generator> 27 28 <summary>The manifest could be parsed, but was not valid - 29 no technical metadata was provided.</summary> 30 <sword:treatment>processing failed</sword:treatment> 31 <sword:verboseDescription> 32 Exception at [ ... ] 33 </sword:verboseDescription> 34 <link rel="alternate" href="https://arxiv.org/help" type="text/html"/> 35 36 </sword:error> 37 38 39 Error document is an AtomPub extension: 40 41 The sword:error element MAY contain any of the elements normally used in the Deposit Receipt, but all fields are OPTIONAL. 42 43 The error document SHOULD contain an atom:summary element with a short description of the error. 44 45 The error document MAY contain a sword:verboseDescription element with a long description of the problem or any other appropriate software-level debugging output (e.g. a stack trace). Server implementations may wish to provide this for client developers' convenience, but may wish to disable such output in any production systems. 46 47 The server SHOULD specify that the Content-Type of the is text/xml or application/xml. 48 """
49 - def __init__(self, xml_deposit_receipt=None, code=None, resp=None):
50 if xml_deposit_receipt: 51 super(Error_Document, self).__init__(xml_deposit_receipt) 52 else: 53 super(Error_Document, self).__init__("""<?xml version="1.0" encoding="utf-8"?> 54 <sword:error xmlns:sword="http://purl.org/net/sword/"/>""") 55 self.error_href = None 56 self.error_info = None 57 self.verboseDescription = None 58 self.content = None # for parity with the ContentWrapper 59 self.code = code 60 self.response_headers = resp 61 self._characterise_error()
62
63 - def _characterise_error(self):
64 if "sword_verboseDescription" in self.metadata.keys(): 65 self.verboseDescription = self.metadata['sword_verboseDescription'] 66 if "href" in self.dom.attrib.keys(): 67 self.error_href = self.dom.attrib['href'] 68 self.error_info = get_error(self.error_href, self.code)
69