server/sources/datafeed.py
changeset 9824 30183ecf5c61
parent 9823 258d2f9f7d39
child 9825 946b483bc8a1
--- a/server/sources/datafeed.py	Thu Mar 20 08:55:44 2014 +0100
+++ b/server/sources/datafeed.py	Tue Mar 25 09:20:37 2014 +0100
@@ -324,8 +324,8 @@
             self.source.info('GET %s', url)
             return _OPENER.open(url, timeout=self.source.http_timeout)
         if url.startswith('file://'):
-            return open(url[7:])
-        return StringIO.StringIO(url)
+            return URLLibResponseAdapter(open(url[7:]), url)
+        return URLLibResponseAdapter(StringIO.StringIO(url), url)
 
     def add_schema_config(self, schemacfg, checkonly=False):
         """added CWSourceSchemaConfig, modify mapping accordingly"""
@@ -490,6 +490,27 @@
             return exists(extid[7:])
         return False
 
+
+class URLLibResponseAdapter(object):
+    """Thin wrapper to be used to fake a value returned by urllib2.urlopen"""
+    def __init__(self, stream, url, code=200):
+        self._stream = stream
+        self._url = url
+        self.code = code
+
+    def read(self, *args):
+        return self._stream.read(*args)
+
+    def geturl(self):
+        return self._url
+
+    def getcode(self):
+        return self.code
+
+    def info(self):
+        from mimetools import Message
+        return Message(StringIO.StringIO())
+
 # use a cookie enabled opener to use session cookie if any
 _OPENER = urllib2.build_opener()
 try: