| @@ -1,17 +1,17 @@ | |||||
| #TODO add the license | |||||
| #I had to rewrite this class because the python MIME email.mime (version 2.5) | |||||
| #are buggy, they use \n instead \r\n for new line which is not compliant | |||||
| #to standard! | |||||
| # TODO add the license | |||||
| # I had to rewrite this class because the python MIME email.mime (version 2.5) | |||||
| # are buggy, they use \n instead \r\n for new line which is not compliant | |||||
| # to standard! | |||||
| # http://bugs.python.org/issue5525 | # http://bugs.python.org/issue5525 | ||||
| #TODO do not load all the message in memory stream it from the disk | |||||
| # TODO do not load all the message in memory stream it from the disk | |||||
| import re | import re | ||||
| import random | import random | ||||
| import sys | import sys | ||||
| #new line | |||||
| # new line | |||||
| NL = '\r\n' | NL = '\r\n' | ||||
| _width = len(repr(sys.maxint - 1)) | _width = len(repr(sys.maxint - 1)) | ||||
| @@ -27,32 +27,33 @@ class MIMEMessage: | |||||
| self._boundary = "" | self._boundary = "" | ||||
| def makeBoundary(self): | def makeBoundary(self): | ||||
| #create the boundary | |||||
| # create the boundary | |||||
| msgparts = [] | msgparts = [] | ||||
| msgparts.append(self._xmlMessage) | msgparts.append(self._xmlMessage) | ||||
| for i in self._files: | for i in self._files: | ||||
| msgparts.append(i.read()) | msgparts.append(i.read()) | ||||
| #this sucks, all in memory | |||||
| # this sucks, all in memory | |||||
| alltext = NL.join(msgparts) | alltext = NL.join(msgparts) | ||||
| self._boundary = _make_boundary(alltext) | self._boundary = _make_boundary(alltext) | ||||
| #maybe I can save some memory | |||||
| # maybe I can save some memory | |||||
| del alltext | del alltext | ||||
| del msgparts | del msgparts | ||||
| self._startCID = "<" + (_fmt % random.randrange(sys.maxint)) + (_fmt % random.randrange(sys.maxint)) + ">" | |||||
| self._startCID = "<" + (_fmt % random.randrange(sys.maxint)) \ | |||||
| + (_fmt % random.randrange(sys.maxint)) + ">" | |||||
| def toString(self): | def toString(self): | ||||
| '''it return a string with the MIME message''' | '''it return a string with the MIME message''' | ||||
| if len(self._boundary) == 0: | if len(self._boundary) == 0: | ||||
| #the makeBoundary hasn't been called yet | |||||
| # the makeBoundary hasn't been called yet | |||||
| self.makeBoundary() | self.makeBoundary() | ||||
| #ok we have everything let's start to spit the message out | |||||
| #first the XML | |||||
| # ok we have everything let's start to spit the message out | |||||
| # first the XML | |||||
| returnstr = NL + "--" + self._boundary + NL | returnstr = NL + "--" + self._boundary + NL | ||||
| returnstr += "Content-Type: text/xml; charset=\"us-ascii\"" + NL | returnstr += "Content-Type: text/xml; charset=\"us-ascii\"" + NL | ||||
| returnstr += "Content-Transfer-Encoding: 7bit" + NL | returnstr += "Content-Transfer-Encoding: 7bit" + NL | ||||
| returnstr += "Content-Id: " + self._startCID + NL + NL | returnstr += "Content-Id: " + self._startCID + NL + NL | ||||
| returnstr += self._xmlMessage + NL | returnstr += self._xmlMessage + NL | ||||
| #then the files | |||||
| # then the files | |||||
| for file in self._files: | for file in self._files: | ||||
| returnstr += "--" + self._boundary + NL | returnstr += "--" + self._boundary + NL | ||||
| returnstr += "Content-Type: application/octet-stream" + NL | returnstr += "Content-Type: application/octet-stream" + NL | ||||
| @@ -60,7 +61,7 @@ class MIMEMessage: | |||||
| returnstr += "Content-Id: <" + str(id(file)) + ">" + NL + NL | returnstr += "Content-Id: <" + str(id(file)) + ">" + NL + NL | ||||
| file.seek(0) | file.seek(0) | ||||
| returnstr += file.read() + NL | returnstr += file.read() + NL | ||||
| #closing boundary | |||||
| # closing boundary | |||||
| returnstr += "--" + self._boundary + "--" + NL | returnstr += "--" + self._boundary + "--" + NL | ||||
| return returnstr | return returnstr | ||||
| @@ -91,7 +92,7 @@ class MIMEMessage: | |||||
| def _make_boundary(text=None): | def _make_boundary(text=None): | ||||
| #some code taken from python stdlib | |||||
| # some code taken from python stdlib | |||||
| # Craft a random boundary. If text is given, ensure that the chosen | # Craft a random boundary. If text is given, ensure that the chosen | ||||
| # boundary doesn't appear in the text. | # boundary doesn't appear in the text. | ||||
| token = random.randrange(sys.maxint) | token = random.randrange(sys.maxint) | ||||
| @@ -46,7 +46,8 @@ except: | |||||
| class DSIG: | class DSIG: | ||||
| BASE = "http://www.w3.org/2000/09/xmldsig#" | BASE = "http://www.w3.org/2000/09/xmldsig#" | ||||
| C14N = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" | C14N = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" | ||||
| C14N_COMM = "http://www.w3.org/TR/2000/CR-xml-c14n-20010315#WithComments" | |||||
| C14N_COMM = \ | |||||
| "http://www.w3.org/TR/2000/CR-xml-c14n-20010315#WithComments" | |||||
| C14N_EXCL = "http://www.w3.org/2001/10/xml-exc-c14n#" | C14N_EXCL = "http://www.w3.org/2001/10/xml-exc-c14n#" | ||||
| DIGEST_MD2 = "http://www.w3.org/2000/09/xmldsig#md2" | DIGEST_MD2 = "http://www.w3.org/2000/09/xmldsig#md2" | ||||
| DIGEST_MD5 = "http://www.w3.org/2000/09/xmldsig#md5" | DIGEST_MD5 = "http://www.w3.org/2000/09/xmldsig#md5" | ||||
| @@ -79,8 +80,11 @@ except: | |||||
| class WSRF_V1_2: | class WSRF_V1_2: | ||||
| '''OASIS WSRF Specifications Version 1.2 | |||||
| ''' | |||||
| OASIS WSRF Specifications Version 1.2 | |||||
| ''' | ''' | ||||
| class LIFETIME: | class LIFETIME: | ||||
| XSD_DRAFT1 = "http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd" | XSD_DRAFT1 = "http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-ResourceLifetime-1.2-draft-01.xsd" | ||||
| XSD_DRAFT4 = "http://docs.oasis-open.org/wsrf/2004/11/wsrf-WS-ResourceLifetime-1.2-draft-04.xsd" | XSD_DRAFT4 = "http://docs.oasis-open.org/wsrf/2004/11/wsrf-WS-ResourceLifetime-1.2-draft-04.xsd" | ||||
| @@ -112,8 +116,8 @@ class WSRF_V1_2: | |||||
| class BASEFAULTS: | class BASEFAULTS: | ||||
| XSD_DRAFT1 = "http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-BaseFaults-1.2-draft-01.xsd" | XSD_DRAFT1 = "http://docs.oasis-open.org/wsrf/2004/06/wsrf-WS-BaseFaults-1.2-draft-01.xsd" | ||||
| XSD_DRAFT3 = "http://docs.oasis-open.org/wsrf/2004/11/wsrf-WS-BaseFaults-1.2-draft-03.xsd" | XSD_DRAFT3 = "http://docs.oasis-open.org/wsrf/2004/11/wsrf-WS-BaseFaults-1.2-draft-03.xsd" | ||||
| #LATEST = DRAFT3 | |||||
| #WSDL_LIST = (WSDL_DRAFT1, WSDL_DRAFT3) | |||||
| # LATEST = DRAFT3 | |||||
| # WSDL_LIST = (WSDL_DRAFT1, WSDL_DRAFT3) | |||||
| XSD_LIST = (XSD_DRAFT1, XSD_DRAFT3) | XSD_LIST = (XSD_DRAFT1, XSD_DRAFT3) | ||||
| WSRF = WSRF_V1_2 | WSRF = WSRF_V1_2 | ||||
| @@ -141,8 +145,9 @@ class OASIS: | |||||
| class APACHE: | class APACHE: | ||||
| '''This name space is defined by AXIS and it is used for the TC in TCapache.py, | |||||
| Map and file attachment (DataHandler) | |||||
| ''' | |||||
| This name space is defined by AXIS and it is used for the TC in | |||||
| TCapache.py, Map and file attachment (DataHandler) | |||||
| ''' | ''' | ||||
| AXIS_NS = "http://xml.apache.org/xml-soap" | AXIS_NS = "http://xml.apache.org/xml-soap" | ||||
| @@ -163,8 +168,10 @@ class WSU: | |||||
| class WSR: | class WSR: | ||||
| PROPERTIES = "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties" | |||||
| LIFETIME = "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceLifetime" | |||||
| PROPERTIES = \ | |||||
| "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceProperties" | |||||
| LIFETIME = \ | |||||
| "http://www.ibm.com/xmlns/stdwip/web-services/WS-ResourceLifetime" | |||||
| class WSA200508: | class WSA200508: | ||||
| @@ -196,7 +203,9 @@ WSA_LIST = (WSA200508, WSA200408, WSA200403, WSA200303) | |||||
| class _WSAW(str): | class _WSAW(str): | ||||
| """ Define ADDRESS attribute to be compatible with WSA* layout """ | |||||
| """ | |||||
| Define ADDRESS attribute to be compatible with WSA* layout | |||||
| """ | |||||
| ADDRESS = property(lambda s: s) | ADDRESS = property(lambda s: s) | ||||
| WSAW200605 = _WSAW("http://www.w3.org/2006/05/addressing/wsdl") | WSAW200605 = _WSAW("http://www.w3.org/2006/05/addressing/wsdl") | ||||
| @@ -15,7 +15,6 @@ | |||||
| ident = "$Id$" | ident = "$Id$" | ||||
| import string | |||||
| import socket | import socket | ||||
| import select | import select | ||||
| import errno | import errno | ||||
| @@ -24,7 +23,10 @@ WSAEINVAL = getattr(errno, 'WSAEINVAL', 10022) | |||||
| class TimeoutSocket: | class TimeoutSocket: | ||||
| """A socket imposter that supports timeout limits.""" | |||||
| """ | |||||
| A socket imposter that supports timeout limits. | |||||
| """ | |||||
| def __init__(self, timeout=20, sock=None): | def __init__(self, timeout=20, sock=None): | ||||
| self.timeout = float(timeout) | self.timeout = float(timeout) | ||||
| @@ -57,9 +59,8 @@ class TimeoutSocket: | |||||
| code = 0 | code = 0 | ||||
| else: | else: | ||||
| code, why = why | code, why = why | ||||
| if code not in ( | |||||
| errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK | |||||
| ): | |||||
| if code not in \ | |||||
| (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK): | |||||
| raise | raise | ||||
| r, w, e = select.select([], [sock], [], timeout) | r, w, e = select.select([], [sock], [], timeout) | ||||
| if w: | if w: | ||||
| @@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| # $Id$ | # $Id$ | ||||
| #XXX tuple instances (in Python 2.2) contain also: | |||||
| # XXX tuple instances (in Python 2.2) contain also: | |||||
| # __class__, __delattr__, __getattribute__, __hash__, __new__, | # __class__, __delattr__, __getattribute__, __hash__, __new__, | ||||
| # __reduce__, __setattr__, __str__ | # __reduce__, __setattr__, __str__ | ||||
| # What about these? | # What about these? | ||||