# SingleUpload.py
from sys import stdin
from re import compile
from cgi import parse_header
from os import environ as env
search = compile(r'([^\\/]+)$').search
def open():
global next, last
try:
next = '--' + parse_header(env['CONTENT_TYPE'])[1]['boundary']
except:
raise IOError
last = next + '--'
filename = None
while not filename:
while True:
l = stdin.readline(65536)
if not l:
raise IOError
if l[:2] == '--':
sl = l.strip()
if sl == next:
break
if sl == last:
raise IOError
for i in xrange(10):
l = stdin.readline(65536).strip()
if not l:
break
try:
filename = parse_header(l.split(':', 1)[1])[1]['filename']
break
except:
continue
m = search(filename)
if not m:
raise IOError
filename = m.groups()[0]
while stdin.readline(65536).strip():
pass
def _readline():
el = ''
while True:
l = stdin.readline(65536)
if not l:
raise IOError
if l[:2] == '--' and el:
sl = l.strip()
if sl == next or sl == last:
break
ol, el = el, l[-2:] == '\r\n' and '\r\n' or (
l[-1] == '\n' and '\n' or '')
p = len(el)
if p == 0:
yield ol + l
else:
yield ol + l[:-p]
while True:
yield None
rl = _readline().next
def _next(size=65536):
buff = _next.buff
while len(buff) < size:
l = rl()
if not l:
_next.buff = ''
return buff
buff += l
r, _next.buff = buff[:size], buff[size:]
return r
_next.buff = rl()
def _read(size=None):
if size:
return _next(size)
fp = __import__('StringIO').StringIO()
while True:
l = _next()
if not l:
return fp.getvalue()
fp.write(l)
fp = type('SingleFile', (), {})()
fp.next = _next; fp.read = _read
fp.filename = filename
return fp