| @@ -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 | |||
| #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 random | |||
| import sys | |||
| #new line | |||
| # new line | |||
| NL = '\r\n' | |||
| _width = len(repr(sys.maxint - 1)) | |||
| @@ -27,32 +27,33 @@ class MIMEMessage: | |||
| self._boundary = "" | |||
| def makeBoundary(self): | |||
| #create the boundary | |||
| # create the boundary | |||
| msgparts = [] | |||
| msgparts.append(self._xmlMessage) | |||
| for i in self._files: | |||
| msgparts.append(i.read()) | |||
| #this sucks, all in memory | |||
| # this sucks, all in memory | |||
| alltext = NL.join(msgparts) | |||
| self._boundary = _make_boundary(alltext) | |||
| #maybe I can save some memory | |||
| # maybe I can save some memory | |||
| del alltext | |||
| 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): | |||
| '''it return a string with the MIME message''' | |||
| if len(self._boundary) == 0: | |||
| #the makeBoundary hasn't been called yet | |||
| # the makeBoundary hasn't been called yet | |||
| 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 += "Content-Type: text/xml; charset=\"us-ascii\"" + NL | |||
| returnstr += "Content-Transfer-Encoding: 7bit" + NL | |||
| returnstr += "Content-Id: " + self._startCID + NL + NL | |||
| returnstr += self._xmlMessage + NL | |||
| #then the files | |||
| # then the files | |||
| for file in self._files: | |||
| returnstr += "--" + self._boundary + NL | |||
| returnstr += "Content-Type: application/octet-stream" + NL | |||
| @@ -60,7 +61,7 @@ class MIMEMessage: | |||
| returnstr += "Content-Id: <" + str(id(file)) + ">" + NL + NL | |||
| file.seek(0) | |||
| returnstr += file.read() + NL | |||
| #closing boundary | |||
| # closing boundary | |||
| returnstr += "--" + self._boundary + "--" + NL | |||
| return returnstr | |||
| @@ -91,7 +92,7 @@ class MIMEMessage: | |||
| 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 | |||
| # boundary doesn't appear in the text. | |||
| token = random.randrange(sys.maxint) | |||
| @@ -46,7 +46,8 @@ except: | |||
| class DSIG: | |||
| BASE = "http://www.w3.org/2000/09/xmldsig#" | |||
| 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#" | |||
| DIGEST_MD2 = "http://www.w3.org/2000/09/xmldsig#md2" | |||
| DIGEST_MD5 = "http://www.w3.org/2000/09/xmldsig#md5" | |||
| @@ -79,8 +80,11 @@ except: | |||
| class WSRF_V1_2: | |||
| '''OASIS WSRF Specifications Version 1.2 | |||
| ''' | |||
| OASIS WSRF Specifications Version 1.2 | |||
| ''' | |||
| class LIFETIME: | |||
| 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" | |||
| @@ -112,8 +116,8 @@ class WSRF_V1_2: | |||
| class BASEFAULTS: | |||
| 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" | |||
| #LATEST = DRAFT3 | |||
| #WSDL_LIST = (WSDL_DRAFT1, WSDL_DRAFT3) | |||
| # LATEST = DRAFT3 | |||
| # WSDL_LIST = (WSDL_DRAFT1, WSDL_DRAFT3) | |||
| XSD_LIST = (XSD_DRAFT1, XSD_DRAFT3) | |||
| WSRF = WSRF_V1_2 | |||
| @@ -141,8 +145,9 @@ class OASIS: | |||
| 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" | |||
| @@ -163,8 +168,10 @@ class WSU: | |||
| 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: | |||
| @@ -196,7 +203,9 @@ WSA_LIST = (WSA200508, WSA200408, WSA200403, WSA200303) | |||
| 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) | |||
| WSAW200605 = _WSAW("http://www.w3.org/2006/05/addressing/wsdl") | |||
| @@ -15,7 +15,6 @@ | |||
| ident = "$Id$" | |||
| import string | |||
| import socket | |||
| import select | |||
| import errno | |||
| @@ -24,7 +23,10 @@ WSAEINVAL = getattr(errno, 'WSAEINVAL', 10022) | |||
| class TimeoutSocket: | |||
| """A socket imposter that supports timeout limits.""" | |||
| """ | |||
| A socket imposter that supports timeout limits. | |||
| """ | |||
| def __init__(self, timeout=20, sock=None): | |||
| self.timeout = float(timeout) | |||
| @@ -57,9 +59,8 @@ class TimeoutSocket: | |||
| code = 0 | |||
| else: | |||
| code, why = why | |||
| if code not in ( | |||
| errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK | |||
| ): | |||
| if code not in \ | |||
| (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK): | |||
| raise | |||
| r, w, e = select.select([], [sock], [], timeout) | |||
| if w: | |||
| @@ -43,7 +43,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
| # $Id$ | |||
| #XXX tuple instances (in Python 2.2) contain also: | |||
| # XXX tuple instances (in Python 2.2) contain also: | |||
| # __class__, __delattr__, __getattribute__, __hash__, __new__, | |||
| # __reduce__, __setattr__, __str__ | |||
| # What about these? | |||