Commit 48364ffe authored by Amos Latteier's avatar Amos Latteier

Move file producers out of HTTPResponse.py into Producers.py

parent f293be00
......@@ -97,7 +97,8 @@ from medusa.http_date import build_http_date
from PubCore.ZEvent import Wakeup
from medusa.producers import hooked_producer
from medusa import http_server, asyncore
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer, \
file_part_producer, file_close_producer
import DebugLogger
......@@ -358,52 +359,3 @@ def make_response(request, headers):
return response
class file_part_producer:
"producer wrapper for part of a file[-like] objects"
# match http_channel's outgoing buffer size
out_buffer_size = 1<<16
def __init__(self, file, start, end):
self.file=file
self.start=start
self.end=end
def more(self):
end=self.end
if not end: return ''
start=self.start
if start >= end: return ''
file=self.file
file.seek(start)
size=end-start
bsize=self.out_buffer_size
if size > bsize: size=bsize
data = file.read(size)
if data:
start=start+len(data)
if start < end:
self.start=start
return data
self.end=0
del self.file
return data
class file_close_producer:
def __init__(self, file):
self.file=file
def more(self):
file=self.file
if file is not None:
file.close()
self.file=None
return ''
......@@ -120,4 +120,52 @@ class CallbackProducer:
self.callback()
self.callback=None
return ''
class file_part_producer:
"producer wrapper for part of a file[-like] objects"
# match http_channel's outgoing buffer size
out_buffer_size = 1<<16
def __init__(self, file, start, end):
self.file=file
self.start=start
self.end=end
def more(self):
end=self.end
if not end: return ''
start=self.start
if start >= end: return ''
file=self.file
file.seek(start)
size=end-start
bsize=self.out_buffer_size
if size > bsize: size=bsize
data = file.read(size)
if data:
start=start+len(data)
if start < end:
self.start=start
return data
self.end=0
del self.file
return data
class file_close_producer:
def __init__(self, file):
self.file=file
def more(self):
file=self.file
if file is not None:
file.close()
self.file=None
return ''
......@@ -97,7 +97,8 @@ from medusa.http_date import build_http_date
from PubCore.ZEvent import Wakeup
from medusa.producers import hooked_producer
from medusa import http_server, asyncore
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer
from Producers import ShutdownProducer, LoggingProducer, CallbackProducer, \
file_part_producer, file_close_producer
import DebugLogger
......@@ -358,52 +359,3 @@ def make_response(request, headers):
return response
class file_part_producer:
"producer wrapper for part of a file[-like] objects"
# match http_channel's outgoing buffer size
out_buffer_size = 1<<16
def __init__(self, file, start, end):
self.file=file
self.start=start
self.end=end
def more(self):
end=self.end
if not end: return ''
start=self.start
if start >= end: return ''
file=self.file
file.seek(start)
size=end-start
bsize=self.out_buffer_size
if size > bsize: size=bsize
data = file.read(size)
if data:
start=start+len(data)
if start < end:
self.start=start
return data
self.end=0
del self.file
return data
class file_close_producer:
def __init__(self, file):
self.file=file
def more(self):
file=self.file
if file is not None:
file.close()
self.file=None
return ''
......@@ -120,4 +120,52 @@ class CallbackProducer:
self.callback()
self.callback=None
return ''
class file_part_producer:
"producer wrapper for part of a file[-like] objects"
# match http_channel's outgoing buffer size
out_buffer_size = 1<<16
def __init__(self, file, start, end):
self.file=file
self.start=start
self.end=end
def more(self):
end=self.end
if not end: return ''
start=self.start
if start >= end: return ''
file=self.file
file.seek(start)
size=end-start
bsize=self.out_buffer_size
if size > bsize: size=bsize
data = file.read(size)
if data:
start=start+len(data)
if start < end:
self.start=start
return data
self.end=0
del self.file
return data
class file_close_producer:
def __init__(self, file):
self.file=file
def more(self):
file=self.file
if file is not None:
file.close()
self.file=None
return ''
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment