Welcome, guest | Sign In | My Account | Store | Cart
# 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

History