diff sword2-libraries-pyinstaller-compatible/sword2/error_document.py @ 16:8b69bba225c9

Added pyinstaller compatible sword2 python libraries
author Marco Fabiani <marco.fabiani@eecs.qmul.ac.uk>
date Tue, 29 May 2012 12:42:49 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sword2-libraries-pyinstaller-compatible/sword2/error_document.py	Tue May 29 12:42:49 2012 +0100
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Provides a convenience class for handling and parsing Error Document responses.
+"""
+
+from deposit_receipt import Deposit_Receipt
+from server_errors import SWORD2ERRORSBYIRI, get_error
+
+class Error_Document(Deposit_Receipt):
+    """
+Example Error document:
+
+<?xml version="1.0" encoding="utf-8"?>
+<sword:error xmlns="http://www.w3.org/2005/Atom"
+       xmlns:sword="http://purl.org/net/sword/"
+       xmlns:arxiv="http://arxiv.org/schemas/atom"
+       href="http://example.org/errors/BadManifest">
+    <author>
+        <name>Example repository</name>
+    </author>
+    <title>ERROR</title>
+    <updated>2008-02-19T09:34:27Z</updated>
+
+    <generator uri="https://example.org/sword-app/"
+               version="0.9">sword@example.org</generator>
+
+    <summary>The manifest could be parsed, but was not valid - 
+    no technical metadata was provided.</summary>
+    <sword:treatment>processing failed</sword:treatment>
+    <sword:verboseDescription>
+        Exception at [ ... ]
+    </sword:verboseDescription>
+    <link rel="alternate" href="https://arxiv.org/help" type="text/html"/>
+
+</sword:error>
+
+
+Error document is an AtomPub extension:
+
+The sword:error element MAY contain any of the elements normally used in the Deposit Receipt, but all fields are OPTIONAL.
+
+The error document SHOULD contain an atom:summary element with a short description of the error.
+
+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.
+
+The server SHOULD specify that the Content-Type of the is text/xml or application/xml.
+    """
+    def __init__(self, xml_deposit_receipt=None, code=None, resp=None):
+        if xml_deposit_receipt:
+            super(Error_Document, self).__init__(xml_deposit_receipt)
+        else:
+            super(Error_Document, self).__init__("""<?xml version="1.0" encoding="utf-8"?>
+<sword:error xmlns:sword="http://purl.org/net/sword/"/>""")
+        self.error_href = None
+        self.error_info = None
+        self.verboseDescription = None
+        self.content = None  # for parity with the ContentWrapper
+        self.code = code
+        self.response_headers = resp
+        self._characterise_error()
+    
+    def _characterise_error(self):
+        if "sword_verboseDescription" in self.metadata.keys():
+            self.verboseDescription = self.metadata['sword_verboseDescription']
+        if "href" in self.dom.attrib.keys():
+            self.error_href = self.dom.attrib['href']
+            self.error_info = get_error(self.error_href, self.code)