File coherence-getPage.patch of Package python-Coherence

Index: Coherence-0.6.6.2/coherence/upnp/core/test/test_utils.py
===================================================================
--- Coherence-0.6.6.2.orig/coherence/upnp/core/test/test_utils.py
+++ Coherence-0.6.6.2/coherence/upnp/core/test/test_utils.py
@@ -9,9 +9,14 @@
 Test cases for L{upnp.core.utils}
 """
 
+import os
 from twisted.trial import unittest
+from twisted.python.filepath import FilePath
+from twisted.internet import reactor
+from twisted.web import static, server
+from twisted.protocols import policies
 
-from coherence.upnp.core.utils import *
+from coherence.upnp.core import utils
 
 # This data is joined using CRLF pairs.
 testChunkedData = ['200',
@@ -121,9 +126,49 @@ class TestUpnpUtils(unittest.TestCase):
             based on a test and data provided by Lawrence
         """
         testData = '\r\n'.join(testChunkedData)
-        newData = de_chunk_payload(testData)
+        newData = utils.de_chunk_payload(testData)
         # see whether we can parse the result
         self.assertEqual(newData, '\r\n'.join( testChunkedDataResult))
 
 
+class TestClient(unittest.TestCase):
+
+    def _listen(self, site):
+        return reactor.listenTCP(0, site, interface="127.0.0.1")
+
+    def setUp(self):
+        name = self.mktemp()
+        os.mkdir(name)
+        FilePath(name).child("file").setContent("0123456789")
+        r = static.File(name)
+        self.site = server.Site(r, timeout=None)
+        self.wrapper = policies.WrappingFactory(self.site)
+        self.port = self._listen(self.wrapper)
+        self.portno = self.port.getHost().port
+
+    def tearDown(self):
+        return self.port.stopListening()
+
+    def getURL(self, path):
+        return "http://127.0.0.1:%d/%s" % (self.portno, path)
+
+    def assertResponse(self, original, content, headers):
+        self.assertIsInstance(original, tuple)
+        self.assertEqual(original[0], content)
+        originalHeaders = original[1]
+        for header in headers:
+            self.assertIn(header, originalHeaders)
+            self.assertEqual(originalHeaders[header], headers[header])
+
+    def test_getPage(self):
+        content = '0123456789'
+        headers = {'accept-ranges': ['bytes'],
+                   'content-length': ['10'],
+                   'content-type': ['text/html']}
+        d = utils.getPage(self.getURL("file"))
+        d.addCallback(self.assertResponse, content, headers)
+        return d
+
+
+
 # $Id:$
Index: Coherence-0.6.6.2/coherence/upnp/core/utils.py
===================================================================
--- Coherence-0.6.6.2.orig/coherence/upnp/core/utils.py
+++ Coherence-0.6.6.2/coherence/upnp/core/utils.py
@@ -517,48 +517,14 @@ class HeaderAwareHTTPClientFactory(clien
     protocol = myHTTPPageGetter
     noisy = False
 
-    def __init__(self, url, method='GET', postdata=None, headers=None,
-                 agent="Twisted PageGetter", timeout=0, cookies=None,
-                 followRedirect=True, redirectLimit=20):
-        self.followRedirect = followRedirect
-        self.redirectLimit = redirectLimit
-        self._redirectCount = 0
-        self.timeout = timeout
-        self.agent = agent
-
-        if cookies is None:
-            cookies = {}
-        self.cookies = cookies
-        if headers is not None:
-            self.headers = InsensitiveDict(headers)
-        else:
-            self.headers = InsensitiveDict()
-        if postdata is not None:
-            self.headers.setdefault('Content-Length', len(postdata))
-            # just in case a broken http/1.1 decides to keep connection alive
-            self.headers.setdefault("connection", "close")
-        self.postdata = postdata
-        self.method = method
-
-        self.setURL(url)
-
-        self.waiting = 1
-        self.deferred = defer.Deferred()
-        self.response_headers = None
-
     def buildProtocol(self, addr):
-        p = protocol.ClientFactory.buildProtocol(self, addr)
+        p = client.HTTPClientFactory.buildProtocol(self, addr)
         p.method = self.method
         p.followRedirect = self.followRedirect
-        if self.timeout:
-            timeoutCall = reactor.callLater(self.timeout, p.timeout)
-            self.deferred.addBoth(self._cancelTimeout, timeoutCall)
         return p
 
     def page(self, page):
-        if self.waiting:
-            self.waiting = 0
-            self.deferred.callback((page, self.response_headers))
+        client.HTTPClientFactory.page(self, (page, self.response_headers))
 
 
 class HeaderAwareHTTPDownloader(client.HTTPDownloader):
@@ -577,24 +543,22 @@ class HeaderAwareHTTPDownloader(client.H
                 self.requestedPartial = 0
 
 
+
 def getPage(url, contextFactory=None, *args, **kwargs):
-    """Download a web page as a string.
+    """
+    Download a web page as a string.
 
     Download a page. Return a deferred, which will callback with a
     page (as a string) or errback with a description of the error.
 
     See HTTPClientFactory to see what extra args can be passed.
     """
-    scheme, host, port, path = client._parse(url)
-    factory = HeaderAwareHTTPClientFactory(url, *args, **kwargs)
-    if scheme == 'https':
-        from twisted.internet import ssl
-        if contextFactory is None:
-            contextFactory = ssl.ClientContextFactory()
-        reactor.connectSSL(host, port, factory, contextFactory)
-    else:
-        reactor.connectTCP(host, port, factory)
-    return factory.deferred
+    kwargs['agent'] = "Coherence PageGetter"
+    return client._makeGetterFactory(
+        url,
+        HeaderAwareHTTPClientFactory,
+        contextFactory=contextFactory,
+        *args, **kwargs).deferred
 
 
 def downloadPage(url, file, contextFactory=None, *args, **kwargs):
openSUSE Build Service is sponsored by