pywebmail-checkins Mailing List for PyWebMail
Status: Beta
Brought to you by:
dubnerm
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(45) |
Jul
(49) |
Aug
(70) |
Sep
(12) |
Oct
|
Nov
|
Dec
(14) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(9) |
Feb
(59) |
Mar
(66) |
Apr
(38) |
May
(1) |
Jun
(36) |
Jul
(2) |
Aug
|
Sep
(64) |
Oct
(22) |
Nov
(49) |
Dec
(20) |
2005 |
Jan
|
Feb
|
Mar
(57) |
Apr
(50) |
May
(4) |
Jun
(1) |
Jul
(34) |
Aug
(9) |
Sep
(18) |
Oct
(22) |
Nov
(6) |
Dec
(10) |
2006 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(53) |
Nov
|
Dec
|
2007 |
Jan
(29) |
Feb
(5) |
Mar
(57) |
Apr
(52) |
May
(14) |
Jun
(3) |
Jul
(20) |
Aug
(9) |
Sep
(2) |
Oct
(1) |
Nov
(11) |
Dec
(25) |
2008 |
Jan
|
Feb
|
Mar
(47) |
Apr
(2) |
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Michael D. <du...@us...> - 2008-07-13 16:08:52
|
Update of /cvsroot/pywebmail/webmail/webmail/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16998 Modified Files: XSocketServer.py Log Message: fix usage Index: XSocketServer.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/XSocketServer.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** XSocketServer.py 2 Mar 2008 18:00:03 -0000 1.5 --- XSocketServer.py 13 Jul 2008 16:09:00 -0000 1.6 *************** *** 244,247 **** --- 244,248 ---- lines = ServerSetup.get_usage_lines(self) lines.append(' -f cfg File to read configuration from') + return lines if __name__=='__main__': |
From: Michael D. <du...@us...> - 2008-07-13 16:08:10
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16945 Modified Files: on.version.txt Log Message: plan automation Index: on.version.txt =================================================================== RCS file: /cvsroot/pywebmail/webmail/on.version.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** on.version.txt 2 Mar 2008 10:37:27 -0000 1.3 --- on.version.txt 13 Jul 2008 16:08:14 -0000 1.4 *************** *** 19,24 **** 18. Post record to LJ community 19. Register new version in python repository: run 'setup.py register' ! 20. Register new version in Vaults of Parnassus (http://py.vaults.ca/) 21. Register new release on FreshMeat (http://freshmeat.net/pywebmail/) ! 22. Register new release on LaunchPad (https://launchpad.net/pywebmail/) 23. Bump version number in webmail/version.py for future development --- 19,25 ---- 18. Post record to LJ community 19. Register new version in python repository: run 'setup.py register' ! 20. Register new version in Vaults of Parnassus (http://py.vaults.ca/) TODO: Automate 21. Register new release on FreshMeat (http://freshmeat.net/pywebmail/) ! TODO: Automate usgin http://www.catb.org/~esr/freshmeat-submit/freshmeat-submit.html ! 22. Register new release on LaunchPad (https://launchpad.net/pywebmail/) TODO: Automate 23. Bump version number in webmail/version.py for future development |
From: Michael D. <du...@us...> - 2008-04-02 23:14:41
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27864 Modified Files: __init__.py Log Message: Backport to 1.1.7 Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/__init__.py,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** __init__.py 9 Dec 2007 11:07:51 -0000 1.25 --- __init__.py 2 Apr 2008 23:11:03 -0000 1.26 *************** *** 1,10 **** import sys, os, time, re, logging import socket, errno, urlparse, urllib2, httplib - try: cookielib - except: cookielib = None try: from cStringIO import StringIO except: from StringIO import StringIO - from webmail.utils.xhttp.utils import _socketretrieve, HTTPNoRedirectHandler, DebugHTTPCookieProcessor, DebugHTTPRedirectHandler from webmail.utils.xhttp.xCookie import CookieStorage import webmail.versions --- 1,8 ---- import sys, os, time, re, logging import socket, errno, urlparse, urllib2, httplib try: from cStringIO import StringIO except: from StringIO import StringIO from webmail.utils.xhttp.xCookie import CookieStorage + from webmail.utils.xhttp.utils import _socketretrieve, HTTPNoRedirectHandler, CookieAwareHTTPRedirectHandler import webmail.versions *************** *** 65,69 **** __default = ['__no_args__'] def url2retrieve(url, filename=None, reporthook=None, ! data=None, content_type=None, cookies=None, log=log, use_counter=0, blocking=0, max_retries=__default, read_timeout=600, --- 63,67 ---- __default = ['__no_args__'] def url2retrieve(url, filename=None, reporthook=None, ! data=None, content_type=None, cookies=CookieStorage(), log=log, use_counter=0, blocking=0, max_retries=__default, read_timeout=600, *************** *** 73,89 **** accept_charset=None, accept_language=None, override_ua=None, retry_timeout=20, gai_retry_timeout=60, do_save_headers=0, ! parse_chunked=1, retry_any_result=0, adv_headers=None): if max_retries is __default: max_retries = default_retries - if cookies is None: - if cookielib is not None: - cookies = cookielib.CookieJar() - else: - cookies = CookieStorage() - use_cookielib = not isinstance(cookies, CookieStorage) req = urllib2.Request(url, data) ! if adv_headers is None: ! adv_headers = [] ! else: ! adv_headers = adv_headers[:] if accept is not None: adv_headers.append(('Accept', accept)) --- 71,81 ---- accept_charset=None, accept_language=None, override_ua=None, retry_timeout=20, gai_retry_timeout=60, do_save_headers=0, ! parse_chunked=1, retry_any_result=0, max_redirects=20): if max_retries is __default: max_retries = default_retries req = urllib2.Request(url, data) ! req.max_redirections = max_redirects ! path = urllib2.splitquery(req.get_selector())[0] ! path = urllib2.splitattr(path)[0] ! adv_headers = [] if accept is not None: adv_headers.append(('Accept', accept)) *************** *** 99,126 **** req.add_header('Content-type', content_type) # Also urllib2 adds 'Content-length' automatically ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) if referer: req.add_header('Referer', referer) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if use_cookielib: ! ophl = [DebugHTTPCookieProcessor(cookies)] ! if not use_redirect: ! ophl.append(HTTPNoRedirectHandler) ! else: ! ophl.append(DebugHTTPRedirectHandler) ! else: ! ophl = [HTTPNoRedirectHandler] ! ophl = filter(None, ophl) # filter-out undefined (debug) handlers ! op = urllib2.build_opener(*tuple(ophl)) #op.addheaders.append(('Connection', 'close')) ua = userAgents.get(override_ua, override_ua) --- 91,105 ---- req.add_header('Content-type', content_type) # Also urllib2 adds 'Content-length' automatically ! host = req.get_host() ! assert host, url ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) if referer: req.add_header('Referer', referer) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! op = urllib2.build_opener(HTTPNoRedirectHandler) #op.addheaders.append(('Connection', 'close')) ua = userAgents.get(override_ua, override_ua) *************** *** 139,152 **** counter = 0 retries = 0 ! log.debug('>%s %s HTTP/1.x' % (req.get_method(),req.get_selector())) for k,v in req.headers.items(): log.debug('>%s: %s' % (k,v)) for k,v in op.addheaders: log.debug('+>%s: %s' % (k,v)) - if data: - for line in data.splitlines()[:10]: - log.debug('>>'+line) while 1: ! t = None ! if proxy: ! t = proxy.proxies.get(req.get_type()) if t: log.info('Connecting to %s via proxy %s...', req.get_host(), t) --- 118,126 ---- counter = 0 retries = 0 ! redirects = 0 for k,v in req.headers.items(): log.debug('>%s: %s' % (k,v)) for k,v in op.addheaders: log.debug('+>%s: %s' % (k,v)) while 1: ! t = proxy.proxies.get(req.get_type()) if t: log.info('Connecting to %s via proxy %s...', req.get_host(), t) *************** *** 156,163 **** fp = op.open(req) headers = fp.info() - log.debug('<HTTP/1.x %d %s' % (getattr(fp,'code',200), getattr(fp,'msg','?OK'))) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) ! if not use_cookielib: ! cookies.parse_headers(headers) tfp,fn,counter = _get_file(filename, use_counter, counter) if do_save_headers: --- 130,135 ---- fp = op.open(req) headers = fp.info() for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) ! cookies.parse_headers(headers) tfp,fn,counter = _get_file(filename, use_counter, counter) if do_save_headers: *************** *** 167,173 **** if headers.has_key('content-length'): size = int(headers['Content-Length']) ! blocking = _socketretrieve(fp, tfp, reporthook, size, blocking=blocking, read_timeout=read_timeout, log=log) - if blocking: parse_chunked = 0 # specific of httplib.HTTPResponse fp.close() if fn: --- 139,144 ---- if headers.has_key('content-length'): size = int(headers['Content-Length']) ! _socketretrieve(fp, tfp, reporthook, size, blocking=blocking, read_timeout=read_timeout, log=log) fp.close() if fn: *************** *** 188,192 **** --- 159,176 ---- else: log.debug('Content unchunked.') + except socket_errors+(httplib.HTTPException, httplib.BadStatusLine, webmail.utils.xhttp.utils.ReadTimeoutError), e: + if max_retries is not None: + retry_str = '(%d/%d)' % (retries,max_retries) + if max_retries is not None and retries >= max_retries: + log.warn('%s%s: %s' % (e.__class__, retry_str, e)) + raise + log.debug('Error on socket%s:', retry_str, exc_info=1) + retries = retries+1 + log.info('Retry waiting %d seconds...', retry_timeout) + time.sleep(retry_timeout) + log.info('Retrying...') + continue except urllib2.HTTPError, e: + log.debug('Status %d: %s' % (e.code, e.msg)) try: if hasattr(e, 'headers'): *************** *** 197,203 **** pass if headers is None: headers = {} ! if not use_cookielib and headers: ! cookies.parse_headers(headers) ! log.debug('<HTTP/1.x %d %s' % (e.code, e.msg)) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) if use_redirect and e.code in (301,302) and headers.has_key('Location'): --- 181,185 ---- pass if headers is None: headers = {} ! if headers: cookies.parse_headers(headers) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) if use_redirect and e.code in (301,302) and headers.has_key('Location'): *************** *** 205,220 **** log.info('Redirecting (%d: %s): %s' % (e.code, e.msg, url)) req = urllib2.Request(url) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 187,199 ---- log.info('Redirecting (%d: %s): %s' % (e.code, e.msg, url)) req = urllib2.Request(url) + req.max_redirections = max_redirects + redirects += 1 + assert redirects <= max_redirects, "Redirection loop" if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue *************** *** 237,259 **** log.debug('Failure retrieving URL: %s', e.url) raise - except socket_errors+(httplib.HTTPException, httplib.BadStatusLine, webmail.utils.xhttp.utils.ReadTimeoutError), e: - if max_retries is not None: - retry_str = '(%d/%d)' % (retries,max_retries) - if max_retries is not None and retries >= max_retries: - log.warn('%s%s: %s' % (e.__class__, retry_str, e)) - raise - log.debug('Error on socket%s:', retry_str, exc_info=1) - retries = retries+1 - log.info('Retry waiting %d seconds...', retry_timeout) - time.sleep(retry_timeout) - log.info('Retrying...') - continue except urllib2.URLError, e: URLError_retry = 0 retry_str = '' if max_retries: retry_str = '(%d/%d)' % (retries,max_retries) ! if isinstance(e.reason, socket.error) and len(e.reason.args) != 2: ! log.error('URLError%s: %s: %s', retry_str, e.reason.__class__, e.reason.args) ! elif hasattr(socket, 'sslerror') and isinstance(e.reason, socket.sslerror): log.error('URLError%s: socket.sslerror: %s', retry_str, e.reason.args) code,text = e.reason.args --- 216,224 ---- log.debug('Failure retrieving URL: %s', e.url) raise except urllib2.URLError, e: URLError_retry = 0 retry_str = '' if max_retries: retry_str = '(%d/%d)' % (retries,max_retries) ! if hasattr(socket, 'sslerror') and isinstance(e.reason, socket.sslerror): log.error('URLError%s: socket.sslerror: %s', retry_str, e.reason.args) code,text = e.reason.args *************** *** 274,285 **** code,text = e.reason.args #**** Cygwin (and hopefully POSIX) error codes - #-103 - Software caused connection abort - # 104 - Connection reset by peer - #-107 - Socket is not connected - #-110 - Operation timed out # 111 - Connection refused - # 113 - Software caused connection abort - #-115 - No route to host - # 116 - Connection timed out #**** Windows error codes # 10053 - Software caused connection abort --- 239,243 ---- *************** *** 290,295 **** # 10065 - No route to host # 11001 - getaddrinfo failed ! URLError_retry = code in (104,111,113,116,7, ! 10053,10054,10057,10060,10061,10065,11001) URLError_reason = 'socket.error' if URLError_retry: --- 248,252 ---- # 10065 - No route to host # 11001 - getaddrinfo failed ! URLError_retry = code in (111,10053,10054,10057,10060,10061,10065,11001) URLError_reason = 'socket.error' if URLError_retry: *************** *** 307,311 **** log.info('Retrying...') continue ! log.exception('URLError: %s', repr(e.reason)) raise reslog.debug(str(url)+'\n'+s) --- 264,268 ---- log.info('Retrying...') continue ! log.error('URLError: %s', repr(e.reason)) raise reslog.debug(str(url)+'\n'+s) *************** *** 317,332 **** log.info('Redirecting (via Refresh header): '+url) req = urllib2.Request(url) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 274,286 ---- log.info('Redirecting (via Refresh header): '+url) req = urllib2.Request(url) + req.max_redirections = max_redirects + redirects += 1 + assert redirects <= max_redirects, "Redirection loop" if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue *************** *** 337,352 **** log.info('Redirecting (via META Refresh): '+url) req = urllib2.Request(url) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 291,303 ---- log.info('Redirecting (via META Refresh): '+url) req = urllib2.Request(url) + req.max_redirections = max_redirects + redirects += 1 + assert redirects <= max_redirects, "Redirection loop" if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue |
From: Michael D. <du...@us...> - 2008-04-02 23:14:37
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28403 Modified Files: __init__.py Log Message: Forward-port Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/__init__.py,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** __init__.py 2 Apr 2008 23:11:03 -0000 1.26 --- __init__.py 2 Apr 2008 23:12:17 -0000 1.27 *************** *** 1,8 **** import sys, os, time, re, logging import socket, errno, urlparse, urllib2, httplib try: from cStringIO import StringIO except: from StringIO import StringIO from webmail.utils.xhttp.xCookie import CookieStorage - from webmail.utils.xhttp.utils import _socketretrieve, HTTPNoRedirectHandler, CookieAwareHTTPRedirectHandler import webmail.versions --- 1,10 ---- import sys, os, time, re, logging import socket, errno, urlparse, urllib2, httplib + try: cookielib + except: cookielib = None try: from cStringIO import StringIO except: from StringIO import StringIO + from webmail.utils.xhttp.utils import _socketretrieve, HTTPNoRedirectHandler, DebugHTTPCookieProcessor, DebugHTTPRedirectHandler from webmail.utils.xhttp.xCookie import CookieStorage import webmail.versions *************** *** 63,67 **** __default = ['__no_args__'] def url2retrieve(url, filename=None, reporthook=None, ! data=None, content_type=None, cookies=CookieStorage(), log=log, use_counter=0, blocking=0, max_retries=__default, read_timeout=600, --- 65,69 ---- __default = ['__no_args__'] def url2retrieve(url, filename=None, reporthook=None, ! data=None, content_type=None, cookies=None, log=log, use_counter=0, blocking=0, max_retries=__default, read_timeout=600, *************** *** 71,81 **** accept_charset=None, accept_language=None, override_ua=None, retry_timeout=20, gai_retry_timeout=60, do_save_headers=0, ! parse_chunked=1, retry_any_result=0, max_redirects=20): if max_retries is __default: max_retries = default_retries req = urllib2.Request(url, data) req.max_redirections = max_redirects ! path = urllib2.splitquery(req.get_selector())[0] ! path = urllib2.splitattr(path)[0] ! adv_headers = [] if accept is not None: adv_headers.append(('Accept', accept)) --- 73,91 ---- accept_charset=None, accept_language=None, override_ua=None, retry_timeout=20, gai_retry_timeout=60, do_save_headers=0, ! parse_chunked=1, retry_any_result=0, adv_headers=None, ! max_redirects=20): if max_retries is __default: max_retries = default_retries + if cookies is None: + if cookielib is not None: + cookies = cookielib.CookieJar() + else: + cookies = CookieStorage() + use_cookielib = not isinstance(cookies, CookieStorage) req = urllib2.Request(url, data) req.max_redirections = max_redirects ! if adv_headers is None: ! adv_headers = [] ! else: ! adv_headers = adv_headers[:] if accept is not None: adv_headers.append(('Accept', accept)) *************** *** 91,105 **** req.add_header('Content-type', content_type) # Also urllib2 adds 'Content-length' automatically ! host = req.get_host() ! assert host, url ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) if referer: req.add_header('Referer', referer) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! op = urllib2.build_opener(HTTPNoRedirectHandler) #op.addheaders.append(('Connection', 'close')) ua = userAgents.get(override_ua, override_ua) --- 101,128 ---- req.add_header('Content-type', content_type) # Also urllib2 adds 'Content-length' automatically ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) if referer: req.add_header('Referer', referer) if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if use_cookielib: ! ophl = [DebugHTTPCookieProcessor(cookies)] ! if not use_redirect: ! ophl.append(HTTPNoRedirectHandler) ! else: ! ophl.append(DebugHTTPRedirectHandler) ! else: ! ophl = [HTTPNoRedirectHandler] ! ophl = filter(None, ophl) # filter-out undefined (debug) handlers ! op = urllib2.build_opener(*tuple(ophl)) #op.addheaders.append(('Connection', 'close')) ua = userAgents.get(override_ua, override_ua) *************** *** 119,126 **** retries = 0 redirects = 0 for k,v in req.headers.items(): log.debug('>%s: %s' % (k,v)) for k,v in op.addheaders: log.debug('+>%s: %s' % (k,v)) while 1: ! t = proxy.proxies.get(req.get_type()) if t: log.info('Connecting to %s via proxy %s...', req.get_host(), t) --- 142,155 ---- retries = 0 redirects = 0 + log.debug('>%s %s HTTP/1.x' % (req.get_method(),req.get_selector())) for k,v in req.headers.items(): log.debug('>%s: %s' % (k,v)) for k,v in op.addheaders: log.debug('+>%s: %s' % (k,v)) + if data: + for line in data.splitlines()[:10]: + log.debug('>>'+line) while 1: ! t = None ! if proxy: ! t = proxy.proxies.get(req.get_type()) if t: log.info('Connecting to %s via proxy %s...', req.get_host(), t) *************** *** 130,135 **** fp = op.open(req) headers = fp.info() for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) ! cookies.parse_headers(headers) tfp,fn,counter = _get_file(filename, use_counter, counter) if do_save_headers: --- 159,166 ---- fp = op.open(req) headers = fp.info() + log.debug('<HTTP/1.x %d %s' % (getattr(fp,'code',200), getattr(fp,'msg','?OK'))) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) ! if not use_cookielib: ! cookies.parse_headers(headers) tfp,fn,counter = _get_file(filename, use_counter, counter) if do_save_headers: *************** *** 139,144 **** if headers.has_key('content-length'): size = int(headers['Content-Length']) ! _socketretrieve(fp, tfp, reporthook, size, blocking=blocking, read_timeout=read_timeout, log=log) fp.close() if fn: --- 170,176 ---- if headers.has_key('content-length'): size = int(headers['Content-Length']) ! blocking = _socketretrieve(fp, tfp, reporthook, size, blocking=blocking, read_timeout=read_timeout, log=log) + if blocking: parse_chunked = 0 # specific of httplib.HTTPResponse fp.close() if fn: *************** *** 159,176 **** else: log.debug('Content unchunked.') - except socket_errors+(httplib.HTTPException, httplib.BadStatusLine, webmail.utils.xhttp.utils.ReadTimeoutError), e: - if max_retries is not None: - retry_str = '(%d/%d)' % (retries,max_retries) - if max_retries is not None and retries >= max_retries: - log.warn('%s%s: %s' % (e.__class__, retry_str, e)) - raise - log.debug('Error on socket%s:', retry_str, exc_info=1) - retries = retries+1 - log.info('Retry waiting %d seconds...', retry_timeout) - time.sleep(retry_timeout) - log.info('Retrying...') - continue except urllib2.HTTPError, e: - log.debug('Status %d: %s' % (e.code, e.msg)) try: if hasattr(e, 'headers'): --- 191,195 ---- *************** *** 181,185 **** pass if headers is None: headers = {} ! if headers: cookies.parse_headers(headers) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) if use_redirect and e.code in (301,302) and headers.has_key('Location'): --- 200,206 ---- pass if headers is None: headers = {} ! if not use_cookielib and headers: ! cookies.parse_headers(headers) ! log.debug('<HTTP/1.x %d %s' % (e.code, e.msg)) for k,v in headers.items(): log.debug('<%s: %s' % (k,v)) if use_redirect and e.code in (301,302) and headers.has_key('Location'): *************** *** 192,199 **** if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 213,226 ---- if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue *************** *** 216,224 **** log.debug('Failure retrieving URL: %s', e.url) raise except urllib2.URLError, e: URLError_retry = 0 retry_str = '' if max_retries: retry_str = '(%d/%d)' % (retries,max_retries) ! if hasattr(socket, 'sslerror') and isinstance(e.reason, socket.sslerror): log.error('URLError%s: socket.sslerror: %s', retry_str, e.reason.args) code,text = e.reason.args --- 243,265 ---- log.debug('Failure retrieving URL: %s', e.url) raise + except socket_errors+(httplib.HTTPException, httplib.BadStatusLine, webmail.utils.xhttp.utils.ReadTimeoutError), e: + if max_retries is not None: + retry_str = '(%d/%d)' % (retries,max_retries) + if max_retries is not None and retries >= max_retries: + log.warn('%s%s: %s' % (e.__class__, retry_str, e)) + raise + log.debug('Error on socket%s:', retry_str, exc_info=1) + retries = retries+1 + log.info('Retry waiting %d seconds...', retry_timeout) + time.sleep(retry_timeout) + log.info('Retrying...') + continue except urllib2.URLError, e: URLError_retry = 0 retry_str = '' if max_retries: retry_str = '(%d/%d)' % (retries,max_retries) ! if isinstance(e.reason, socket.error) and len(e.reason.args) != 2: ! log.error('URLError%s: %s: %s', retry_str, e.reason.__class__, e.reason.args) ! elif hasattr(socket, 'sslerror') and isinstance(e.reason, socket.sslerror): log.error('URLError%s: socket.sslerror: %s', retry_str, e.reason.args) code,text = e.reason.args *************** *** 239,243 **** --- 280,291 ---- code,text = e.reason.args #**** Cygwin (and hopefully POSIX) error codes + #-103 - Software caused connection abort + # 104 - Connection reset by peer + #-107 - Socket is not connected + #-110 - Operation timed out # 111 - Connection refused + # 113 - Software caused connection abort + #-115 - No route to host + # 116 - Connection timed out #**** Windows error codes # 10053 - Software caused connection abort *************** *** 248,252 **** # 10065 - No route to host # 11001 - getaddrinfo failed ! URLError_retry = code in (111,10053,10054,10057,10060,10061,10065,11001) URLError_reason = 'socket.error' if URLError_retry: --- 296,301 ---- # 10065 - No route to host # 11001 - getaddrinfo failed ! URLError_retry = code in (104,111,113,116,7, ! 10053,10054,10057,10060,10061,10065,11001) URLError_reason = 'socket.error' if URLError_retry: *************** *** 264,268 **** log.info('Retrying...') continue ! log.error('URLError: %s', repr(e.reason)) raise reslog.debug(str(url)+'\n'+s) --- 313,317 ---- log.info('Retrying...') continue ! log.exception('URLError: %s', repr(e.reason)) raise reslog.debug(str(url)+'\n'+s) *************** *** 279,286 **** if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 328,341 ---- if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue *************** *** 296,303 **** if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! c = cookies.get_cookies(req.get_host(), path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue --- 351,364 ---- if adv_headers: map(lambda t:apply(req.add_header, t), adv_headers) ! if not use_cookielib: ! req_uri = req.get_selector() ! path = urllib2.splitquery(req_uri)[0] ! path = urllib2.splitattr(path)[0] ! host = req.get_host() ! assert host, req_uri ! c = cookies.get_cookies(host, path) ! if c: ! log.debug('Sending cookies: '+c) ! req.add_header('Cookie', c) retries = 0 continue |
From: Michael D. <du...@us...> - 2008-03-07 20:41:15
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22783 Modified Files: local.xml Log Message: script_name Index: local.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/local.xml,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** local.xml 2 Mar 2008 17:28:25 -0000 1.8 --- local.xml 7 Mar 2008 20:41:17 -0000 1.9 *************** *** 5,8 **** --- 5,9 ---- <field name="inbox"><skip/></field> <field name="delete_multiple">10</field> + <field name="script_name"><value expr="getdefault('path','/python/webmail')"/></field> <field name="port_suffix"><value expr="iif(getdefault('port','80')!='80',':'+getdefault('port','80'))"/></field> <cookie name="docookie" path="/" domain="loopback">true</cookie> *************** *** 20,24 **** <fetch> <url_get id="login_result"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/login.html</url> <file>login.htm</file> <method>POST</method> --- 21,25 ---- <fetch> <url_get id="login_result"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/login.html</url> <file>login.htm</file> <method>POST</method> *************** *** 35,43 **** <test><title>Successfull logon</title></test> </check> </login> <logout> <fetch> <url_get id="logout_result"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/logout.html</url> <file>logout.htm</file> <method>GET</method> --- 36,49 ---- <test><title>Successfull logon</title></test> </check> + <post_process> + <fixed> + <cookie name="sid" path="/" domain="loopback"><value expr="cookie('sid')"/></cookie> + </fixed> + </post_process> </login> <logout> <fetch> <url_get id="logout_result"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/logout.html</url> <file>logout.htm</file> <method>GET</method> *************** *** 57,61 **** <fetch> <url_get id="folder_page"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/list_folder.html</url> <file>folder_<value name="folder"/>.htm</file> <method>GET</method> --- 63,67 ---- <fetch> <url_get id="folder_page"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/list_folder.html</url> <file>folder_<value name="folder"/>.htm</file> <method>GET</method> *************** *** 82,86 **** <fetch> <url_get id="folders_list"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/folders.html</url> <file>folders.htm</file> <method>GET</method> --- 88,92 ---- <fetch> <url_get id="folders_list"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/folders.html</url> <file>folders.htm</file> <method>GET</method> *************** *** 103,107 **** <fetch> <url_get id="message_eml"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/message.eml</url> <file>message_<value name="folder"/>_<value name="msgid"/>.txt</file> <method>GET</method> --- 109,113 ---- <fetch> <url_get id="message_eml"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/message.eml</url> <file>message_<value name="folder"/>_<value name="msgid"/>.txt</file> <method>GET</method> *************** *** 117,121 **** <fetch> <url_get id="delete_page"> ! <url>http://loopback<value name="port_suffix"/>/python/webmail/delete.html</url> <file>delete_<value name="folder"/>_<value name="timestamp"/>.htm</file> <method>GET</method> --- 123,127 ---- <fetch> <url_get id="delete_page"> ! <url>http://loopback<value name="port_suffix"/><value name="script_name"/>/delete.html</url> <file>delete_<value name="folder"/>_<value name="timestamp"/>.htm</file> <method>GET</method> |
From: Michael D. <du...@us...> - 2008-03-07 20:38:33
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config/parse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21642 Modified Files: list_helpers.py Log Message: Try to avoid stack problems in Jython Index: list_helpers.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/parse/list_helpers.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** list_helpers.py 17 Jul 2007 20:40:46 -0000 1.16 --- list_helpers.py 7 Mar 2008 20:38:36 -0000 1.17 *************** *** 144,148 **** #@endif assert type(file)==type(''), repr(file) ! t.sub(_get, file) return res test = None --- 144,154 ---- #@endif assert type(file)==type(''), repr(file) ! # Try to avoid stack problems in Jython - seems not helped ! if hasattr(t, 'finditer'): ! for m in t.finditer(file): ! _get(m) ! # To support backward compatibility (<2.2) ! else: ! t.sub(_get, file) return res test = None |
From: Michael D. <du...@us...> - 2008-03-07 20:37:17
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config/parse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21239 Modified Files: __init__.py Log Message: - Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/parse/__init__.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** __init__.py 1 Oct 2007 07:22:15 -0000 1.14 --- __init__.py 7 Mar 2008 20:37:21 -0000 1.15 *************** *** 1,2 **** --- 1,3 ---- + #import webmail.client.config.parse.parse, webmail.client.config.parse.values, webmail.client.config.parse.fetch, webmail.client.config.parse.check_helper, webmail.client.config.parse.list_helpers, webmail.client.config.parse.action, webmail.client.config.parse.mime from webmail.client.config.parse import parse, values, fetch, check_helper, list_helpers, action, mime *************** *** 21,25 **** 'parse':action.DoParse, 'assign':'DoAssign', ! 'fixed':'DoAssign' #outdated } def post_parse_check(self): --- 22,26 ---- 'parse':action.DoParse, 'assign':'DoAssign', ! 'fixed':'DoAssign', #outdated } def post_parse_check(self): |
From: Michael D. <du...@us...> - 2008-03-07 20:36:34
|
Update of /cvsroot/pywebmail/webmail/webmail/client In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20854 Modified Files: wmailbox.py Log Message: xCookie don't like None's Index: wmailbox.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/wmailbox.py,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** wmailbox.py 8 Dec 2007 16:44:50 -0000 1.46 --- wmailbox.py 7 Mar 2008 20:36:36 -0000 1.47 *************** *** 255,259 **** else: expires = time.localtime(expires)+(-time.timezone,) ! self.cookies.append((str(name+'='+value), expires, str(path or '') or None, str(domain or '') or None)) class SessionBase(SessionAttributes, SessionCache, SessionCookies): --- 255,259 ---- else: expires = time.localtime(expires)+(-time.timezone,) ! self.cookies.append((str(name+'='+value), expires, str(path or ''), str(domain or ''))) class SessionBase(SessionAttributes, SessionCache, SessionCookies): |
From: Michael D. <du...@us...> - 2008-03-07 20:34:47
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20110 Modified Files: xCookie.py Log Message: - Index: xCookie.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/xCookie.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** xCookie.py 4 Mar 2008 05:57:17 -0000 1.9 --- xCookie.py 7 Mar 2008 20:34:48 -0000 1.10 *************** *** 21,24 **** --- 21,25 ---- force_local = 0 #allow only cookies with domain set (see check_path) force_tail_match = 1 #always match domain names as if it was set with .domain + ignore_empty_port = 0 debug = 1 *************** *** 70,74 **** def check_not_expired(self, c): ! if c[1] is None: return 0 try: return rfc822.mktime_tz(c[1]) > time.time() + time.timezone --- 71,75 ---- def check_not_expired(self, c): ! if c[1] is None: return 1 try: return rfc822.mktime_tz(c[1]) > time.time() + time.timezone *************** *** 99,103 **** log.debug('check_path: %s filtered out due to path: "%s" doesn\'t starts with "%s"' % (c[0], path, c[2])) return 0 ! if not domain: return not self.force_local if self.force_tail_match or domain[0]=='.': if host[-len(domain):] == domain or '.'+host == domain: return 1 --- 100,108 ---- log.debug('check_path: %s filtered out due to path: "%s" doesn\'t starts with "%s"' % (c[0], path, c[2])) return 0 ! if not domain: ! if self.force_local: ! log.debug('check_path: %s filtered out due to domain: force_local is set (host="%s")' % (c[0], host)) ! return 0 ! return 1 if self.force_tail_match or domain[0]=='.': if host[-len(domain):] == domain or '.'+host == domain: return 1 *************** *** 105,108 **** --- 110,118 ---- return 0 if host==domain: return 1 + if (self.ignore_empty_port and + ':' not in domain and + ':' in host and + host.split(':')[0]==domain): + return 1 log.debug('check_path: %s filtered out due to domain: "%s" != "%s"' % (c[0], domain, host)) return 0 |
From: Michael D. <du...@us...> - 2008-03-04 07:14:57
|
Update of /cvsroot/pywebmail/webmail/webmail/backends In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16193 Modified Files: smtp.py Log Message: sender handling was completely wrong Index: smtp.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/backends/smtp.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** smtp.py 10 Dec 2007 06:57:10 -0000 1.6 --- smtp.py 4 Mar 2008 07:14:57 -0000 1.7 *************** *** 145,149 **** if l: recipients.extend(zip(*l)[1]) sender = headers.getaddr('from') ! assert sender[0].lower() != self.email.lower(), "Sender sanity check failed" smtp = smtplib.SMTP() smtp.set_debuglevel(self.debug) --- 145,149 ---- if l: recipients.extend(zip(*l)[1]) sender = headers.getaddr('from') ! assert sender[1].lower() == self.email.lower(), "Sender sanity check failed" smtp = smtplib.SMTP() smtp.set_debuglevel(self.debug) *************** *** 155,159 **** if self.auth: smtp.login(self.user, self.password) ! smtp.sendmail(sender, recipients, msg) smtp.quit() --- 155,159 ---- if self.auth: smtp.login(self.user, self.password) ! smtp.sendmail(sender[1], recipients, msg) smtp.quit() |
From: Michael D. <du...@us...> - 2008-03-04 05:57:13
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20115 Modified Files: xCookie.py Log Message: Index: xCookie.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/xCookie.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** xCookie.py 4 Mar 2008 05:42:58 -0000 1.8 --- xCookie.py 4 Mar 2008 05:57:17 -0000 1.9 *************** *** 50,54 **** if p[0].lower()=='expires': expires=rfc822.parsedate_tz(p[1]) ! if expires is not None and expires[0]<1900: year = expires[0]+1900 if year < 1970: year += 100 --- 50,54 ---- if p[0].lower()=='expires': expires=rfc822.parsedate_tz(p[1]) ! if expires is not None and expires[0]<100: year = expires[0]+1900 if year < 1970: year += 100 |
From: Michael D. <du...@us...> - 2008-03-04 05:42:54
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14666 Modified Files: xCookie.py Log Message: dance around jython bug in rfc822.parsedate_tz Index: xCookie.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/xCookie.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** xCookie.py 3 Mar 2008 19:13:35 -0000 1.7 --- xCookie.py 4 Mar 2008 05:42:58 -0000 1.8 *************** *** 50,53 **** --- 50,57 ---- if p[0].lower()=='expires': expires=rfc822.parsedate_tz(p[1]) + if expires is not None and expires[0]<1900: + year = expires[0]+1900 + if year < 1970: year += 100 + expires = (year,)+expires[1:] elif p[0].lower()=='path': path=p[1] *************** *** 66,70 **** def check_not_expired(self, c): ! if c[1] is None: return 1 try: return rfc822.mktime_tz(c[1]) > time.time() + time.timezone --- 70,74 ---- def check_not_expired(self, c): ! if c[1] is None: return 0 try: return rfc822.mktime_tz(c[1]) > time.time() + time.timezone |
From: Michael D. <du...@us...> - 2008-03-03 19:22:35
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13865 Modified Files: checker.py checker_manage.py Log Message: support test aliases Index: checker_manage.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/checker_manage.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** checker_manage.py 2 Mar 2008 10:54:29 -0000 1.14 --- checker_manage.py 3 Mar 2008 19:22:30 -0000 1.15 *************** *** 521,524 **** --- 521,528 ---- if py_cfg.has_key('add_args'): checker += ' '+py_cfg['add_args'] + if self.tag_config.has_key('aliases'): + checker += ' -a '+self.tag_config['aliases'] + if py_cfg.has_key('aliases'): + checker += ' -a '+py_cfg['aliases'] checker += self.add_checker_arg executable = py_cfg['executable'] Index: checker.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/checker.py,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** checker.py 2 Mar 2008 10:53:08 -0000 1.17 --- checker.py 3 Mar 2008 19:22:30 -0000 1.18 *************** *** 185,196 **** try: e = unicode(e) ! except (UnicodeEncodeError,UnicodeDecodeError): try: e = unicode(e,'utf-8') ! except (TypeError,UnicodeEncodeError,UnicodeDecodeError): e = str(e) try: e = unicode(e,'utf-8') ! except (UnicodeEncodeError,UnicodeDecodeError): pass if type(e) == type(u'') and self.parent.output_encoding is not None: --- 185,196 ---- try: e = unicode(e) ! except UnicodeError: try: e = unicode(e,'utf-8') ! except (TypeError,UnicodeError): e = str(e) try: e = unicode(e,'utf-8') ! except UnicodeError: pass if type(e) == type(u'') and self.parent.output_encoding is not None: *************** *** 695,698 **** --- 695,699 ---- def __init__(self, argv, progname=None): + self.aliases = {} self.tests = {} self.output_encoding = None *************** *** 718,722 **** def get_optdefs(self): ! return 'vqt:c:C:d:i:e:n:' def parse_optlist(self, optlist): --- 719,723 ---- def get_optdefs(self): ! return 'vqt:c:C:d:i:e:n:a:' def parse_optlist(self, optlist): *************** *** 730,733 **** --- 731,739 ---- self.parent.output_encoding = None if opt == '-c': self.config_file = optarg + if opt == '-a': + aliases = filter(None, map(lambda s:s.strip(), optarg.split(','))) + aliases = map(lambda s:s.split('=',1), aliases) + for k,v in aliases: + self.aliases[k] = v if opt == '-d': self.db_file = optarg if opt == '-i': self.config_id = optarg *************** *** 963,968 **** if self.tests.has_key(test_name): return self.tests[test_name] ! assert self.config.config.has_section('test_'+test_name), test_name ! test_info = webmail.utils.ConfigSection(self.config.config, 'test_'+test_name) return self.create_test(test_name, test_info) --- 969,977 ---- if self.tests.has_key(test_name): return self.tests[test_name] ! section_name = 'test_'+test_name ! if self.aliases.has_key(test_name): ! section_name = 'test_'+self.aliases[test_name] ! assert self.config.config.has_section(section_name), test_name ! test_info = webmail.utils.ConfigSection(self.config.config, section_name) return self.create_test(test_name, test_info) *************** *** 1018,1026 **** req_resolve(test_name) return map(lambda t:('run_test',t), l) ! if self.tests_done.has_key(test_name.lower()): log.info('Skipping %s (already done)', test_name) return 1 test = self.get_test(test_name) ! self.tests_done[test_name.lower()] = 1 test_thread = threading.Thread(None, test.perform) test_thread.setDaemon(0) --- 1027,1035 ---- req_resolve(test_name) return map(lambda t:('run_test',t), l) ! if self.tests_done.has_key(test_name): log.info('Skipping %s (already done)', test_name) return 1 test = self.get_test(test_name) ! self.tests_done[test_name] = 1 test_thread = threading.Thread(None, test.perform) test_thread.setDaemon(0) |
From: Michael D. <du...@us...> - 2008-03-03 19:18:33
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12429 Modified Files: HotMail.xml Log Message: avoid jython2.2 bug Index: HotMail.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/HotMail.xml,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** HotMail.xml 2 Mar 2008 17:33:13 -0000 1.23 --- HotMail.xml 3 Mar 2008 19:18:34 -0000 1.24 *************** *** 94,98 **** <field name="wa">wsignin1.0</field> <!--field name="n"><value name="session"/></field--> ! <field name="n"><value expr="str(randrange(10000000000))"/></field> <field name="gs">true</field> </fields> --- 94,98 ---- <field name="wa">wsignin1.0</field> <!--field name="n"><value name="session"/></field--> ! <field name="n"><value expr="str(randrange(1000000000))"/>0</field> <field name="gs">true</field> </fields> *************** *** 335,343 **** <url_get id="folder_page"> <url>http://<value name="server"/>/mail/InboxLight.aspx</url> ! <file>folder_<value expr="folder.encode('punycode').strip()"/>_<value name="curmbox"/>_page<value name="page"/>.htm</file> <method>GET</method> <fields> <field name="FolderID"><value name="curmbox"/></field> ! <field name="n"><value expr="str(randrange(10000000000))"/></field> <field name="InboxSortAscending">False</field> <field name="InboxSortBy">Date</field> --- 335,343 ---- <url_get id="folder_page"> <url>http://<value name="server"/>/mail/InboxLight.aspx</url> ! <file>folder_<value expr="folder.encode('quopri')"/>_<value name="curmbox"/>_page<value name="page"/>.htm</file> <method>GET</method> <fields> <field name="FolderID"><value name="curmbox"/></field> ! <field name="n"><value expr="str(randrange(1000000000))"/>0</field> <field name="InboxSortAscending">False</field> <field name="InboxSortBy">Date</field> *************** *** 385,389 **** <url_get id="message_eml"> <url>http://<value name="server"/>/mail/GetMessageSource.aspx</url> ! <file>message_<value expr="folder.encode('punycode').strip()"/>_<value name="msgid"/>.txt</file> <method>GET</method> <fields> --- 385,389 ---- <url_get id="message_eml"> <url>http://<value name="server"/>/mail/GetMessageSource.aspx</url> ! <file>message_<value expr="folder.encode('quopri')"/>_<value name="msgid"/>.txt</file> <method>GET</method> <fields> *************** *** 486,491 **** <fetch> <url_get id="delete_page"> ! <url>http://<value name="server"/>/mail/InboxLight.aspx?FolderID=<value name="curmbox"/>&n=<value expr="str(randrange(10000000000))"/></url> ! <file>delete_<value expr="folder.encode('punycode').strip()"/>_<value name="timestamp"/>.htm</file> <method>POST</method> <fields> --- 486,491 ---- <fetch> <url_get id="delete_page"> ! <url>http://<value name="server"/>/mail/InboxLight.aspx?FolderID=<value name="curmbox"/>&n=<value expr="str(randrange(1000000000))"/>0</url> ! <file>delete_<value expr="folder.encode('quopri')"/>_<value name="timestamp"/>.htm</file> <method>POST</method> <fields> |
From: Michael D. <du...@us...> - 2008-03-03 19:17:23
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12037 Modified Files: libero.it.xml Log Message: - Index: libero.it.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/libero.it.xml,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** libero.it.xml 2 Mar 2008 17:30:17 -0000 1.8 --- libero.it.xml 3 Mar 2008 19:17:26 -0000 1.9 *************** *** 3,8 **** <setup> <fixed> ! <!--field name="server">wpop<value expr="str(randrange(1,24))"/><value expr="icase(domain,'inwind.it','.inwind','iol.it','.iol','blu.it','.blu','')"/>.libero.it</field--> ! <field name="server">wpop<value expr="str(randrange(1,15))"/><value expr="icase(domain,'inwind.it','.inwind','iol.it','.iol','blu.it','.blu','')"/>.libero.it</field> <field name="inbox">inbox</field> <!--field name="delete_multiple">10</field--> --- 3,7 ---- <setup> <fixed> ! <field name="server">wpop<value expr="str(randrange(1,19))"/><value expr="icase(domain,'inwind.it','.inwind','iol.it','.iol','blu.it','.blu','')"/>.libero.it</field> <field name="inbox">inbox</field> <!--field name="delete_multiple">10</field--> |
From: Michael D. <du...@us...> - 2008-03-03 19:14:21
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10941 Modified Files: yandex.ru.xml Log Message: - Index: yandex.ru.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/yandex.ru.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** yandex.ru.xml 2 Mar 2008 17:23:33 -0000 1.9 --- yandex.ru.xml 3 Mar 2008 19:14:22 -0000 1.10 *************** *** 83,87 **** <end></tr></end> <test ref="message_subj_re"/> ! <field name="id" id="message_subj_re" group="1"><td class="b-fade"><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?ids=(\d+)"(?: onmouseup="[^"]*")? class="subj"><span class="title" title="([^">]*)">([^<]*)</span> </field> <field name="from_email" id="message_from_re" group="1"><td class="b-fade"><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?ids=\d+"(?: onmouseup="[^"]*")? title="([^">]*)">([^<]*?)\s*</a>(?:<i></i>)?</td></field> <field name="from_name" ref="message_from_re" group="2" parse="decode(utf-8),html"/> --- 83,87 ---- <end></tr></end> <test ref="message_subj_re"/> ! <field name="id" id="message_subj_re" group="1"><td class="b-fade"><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?ids=(\d+)"(?: onmouseup="[^"]*")? class="subj"><span class="title" title="([^">]*)">([^<]*)</span></field> <field name="from_email" id="message_from_re" group="1"><td class="b-fade"><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?ids=\d+"(?: onmouseup="[^"]*")? title="([^">]*)">([^<]*?)\s*</a>(?:<i></i>)?</td></field> <field name="from_name" ref="message_from_re" group="2" parse="decode(utf-8),html"/> |
From: Michael D. <du...@us...> - 2008-03-03 19:13:33
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xhttp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10571 Modified Files: xCookie.py Log Message: fix session cookie handling Index: xCookie.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xhttp/xCookie.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** xCookie.py 9 Dec 2007 07:25:21 -0000 1.6 --- xCookie.py 3 Mar 2008 19:13:35 -0000 1.7 *************** *** 66,69 **** --- 66,70 ---- def check_not_expired(self, c): + if c[1] is None: return 1 try: return rfc822.mktime_tz(c[1]) > time.time() + time.timezone |
From: Michael D. <du...@us...> - 2008-03-03 19:13:31
|
Update of /cvsroot/pywebmail/webmail/webmail/utils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10207 Modified Files: expr_helper.py Log Message: more debug output Index: expr_helper.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/expr_helper.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** expr_helper.py 17 Jul 2007 20:43:47 -0000 1.12 --- expr_helper.py 3 Mar 2008 19:13:00 -0000 1.13 *************** *** 35,42 **** --- 35,44 ---- def evalstr(self, expr, local_dict=None, global_dict=None): self.prepare(local_dict, global_dict) + _log.debug('evalstr(%s)', repr(expr)) return eval(expr, self.local_dict, self.global_dict) def execstr(self, expr, local_dict=None, global_dict=None): self.prepare(local_dict, global_dict) + _log.debug('execstr(%s)', repr(expr)) exec(expr, self.local_dict, self.global_dict) return self.local_dict |
From: Michael D. <du...@us...> - 2008-03-02 20:30:31
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31351 Modified Files: CHANGES.txt Log Message: 2008/03/02 Index: CHANGES.txt =================================================================== RCS file: /cvsroot/pywebmail/webmail/CHANGES.txt,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** CHANGES.txt 4 Aug 2007 10:48:38 -0000 1.41 --- CHANGES.txt 2 Mar 2008 20:30:34 -0000 1.42 *************** *** 1,2 **** --- 1,60 ---- + 2008/03/02 + + - Major changes on servers: 'Google', 'Netscape', 'pochta.ru', 'yandex.ru'. + + - WSGI module finished - it supports multiple mailboxes (configured as usual), + cookie, no-cookies (i.e. it doesn't breaks when user disabled cookies in browser), + access to any backend (i.e. not only file). + NTService and standalone versions tested. Major servers compatibility should be OK, + but not yet tested. + + 2008/02/14 + + - Incompatible changes on 'Hotmail'. + + 2008/02/04 + + - Incompatible changes on servers: 'libero.it', 'rambler.ru'. + + 2008/01/07 + + - checker.py: support verify folders, mail receive and delete. + + - New backend - 'file'. + + 2007/12/08 + + - At last final changes on 'HotMail' - support for delete. + + - Add logout support to 'pochta.ru'. + + 2007/12/07 + + - Infrastructure: Check now can send/receive/delete mail. + + - Changes in 'pochta.ru' folder design - multiple pages. + + 2007/12/01 + + - Major changes on 'HotMail' (become WinLive Hotmail). + + 2007/11/30 + + - Changes in 'Google' login sequence. + + - Major changes on 'Yahoo' - both login and message download. + + - Minor change in 'Netscape' (aka AOL) login sequence (twice! - right at the time fixing). + + - Changes in 'pochta.ru' folder design. + + - Changes in 'rambler.ru' message retrieval. + + - Minor changes in 'libero.it' folder design. + + 2007/09/06 + + - fix: merge backend messages failes to reattach(). + 2007/07/26 |
From: Michael D. <du...@us...> - 2008-03-02 18:05:09
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11577 Modified Files: email.ru.xml Log Message: more checks Index: email.ru.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/email.ru.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** email.ru.xml 26 Apr 2007 20:27:04 -0000 1.4 --- email.ru.xml 2 Mar 2008 18:05:12 -0000 1.5 *************** *** 27,30 **** --- 27,31 ---- <input_http ref="login_result"/> <test inverse="true" error_group="2" error_parse="decode(koi8-r)"><center><font size=\+2 color=red>([^<]*)</font>(?:<br>)?([^<]*)<br>((?:<br>|<b>|</b>|[^<])*)</center></test> + <test id="login_form_re" inverse="true"><form action="come" method="post" name=form1></test> <test><span class="text"><font color="#018977"><value name="email"/>\s*</font>\s*</span></test> </check> *************** *** 68,71 **** --- 69,73 ---- <list> <input ref="folders_list"/> + <test ref="login_form_re" inverse="true"/> <item group="1" parse="replace(^INBOX.,),url"><td class="MainCaption"><a href="folder\?(?:site=[^&]*&)?folder=(INBOX(?:\.[^"]*)?)"></item> </list> *************** *** 89,92 **** --- 91,95 ---- <pages> <input ref="folder_page"/> + <test ref="login_form_re" inverse="true"/> <start>1</start> <next group="1"><value name="page"/>\s*,\s*<a href="folder\?site=rol&folder=INBOX&pg=(<value expr="str(int(page)+1)"/>)">\s*\1</a></next> *************** *** 124,128 **** </url_get> </fetch> ! <asis ref="message_eml"/> </message> <delete> --- 127,135 ---- </url_get> </fetch> ! <asis> ! <input ref="message_eml"> ! <test ref="login_form_re" inverse="true"/> ! </input> ! </asis> </message> <delete> *************** *** 144,148 **** <parse> <input ref="delete_page"/> ! <!-- FIXME: No test at all!? --> </parse> </delete> --- 151,156 ---- <parse> <input ref="delete_page"/> ! <test ref="login_form_re" inverse="true"/> ! <!-- FIXME: No positive test at all!? --> </parse> </delete> |
From: Michael D. <du...@us...> - 2008-03-02 18:05:03
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11219 Modified Files: email.ru.xml.1.1.7 Log Message: more checks Index: email.ru.xml.1.1.7 =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/email.ru.xml.1.1.7,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** email.ru.xml.1.1.7 26 Apr 2007 20:31:38 -0000 1.1 --- email.ru.xml.1.1.7 2 Mar 2008 18:04:52 -0000 1.2 *************** *** 27,30 **** --- 27,31 ---- <input_http ref="login_result"/> <test inverse="true" error_group="2"><center><font size=\+2 color=red>([^<]*)</font>(?:<br>)?([^<]*)<br>((?:<br>|<b>|</b>|[^<])*)</center></test> + <test id="login_form_re" inverse="true"><form action="come" method="post" name=form1></test> <test><span class="text"><font color="#018977"><value name="email"/>\s*</font>\s*</span></test> </check> *************** *** 68,71 **** --- 69,73 ---- <list> <input ref="folders_list"/> + <test ref="login_form_re" inverse="true"/> <item group="1" parse="replace(^INBOX.,),url"><td class="MainCaption"><a href="folder\?(?:site=[^&]*&)?folder=(INBOX(?:\.[^"]*)?)"></item> </list> *************** *** 89,92 **** --- 91,95 ---- <pages> <input ref="folder_page"/> + <test ref="login_form_re" inverse="true"/> <start>1</start> <next group="1"><value name="page"/>\s*,\s*<a href="folder\?site=rol&folder=INBOX&pg=(<value expr="str(int(page)+1)"/>)">\s*\1</a></next> *************** *** 124,128 **** </url_get> </fetch> ! <asis ref="message_eml"/> </message> <delete> --- 127,135 ---- </url_get> </fetch> ! <asis> ! <input ref="message_eml"> ! <test ref="login_form_re" inverse="true"/> ! </input> ! </asis> </message> <delete> *************** *** 144,148 **** <parse> <input ref="delete_page"/> ! <!-- FIXME: No test at all!? --> </parse> </delete> --- 151,156 ---- <parse> <input ref="delete_page"/> ! <test ref="login_form_re" inverse="true"/> ! <!-- FIXME: No positive test at all!? --> </parse> </delete> |
From: Michael D. <du...@us...> - 2008-03-02 18:00:03
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9380 Modified Files: wmail_sa.py Log Message: standalone wsgi server Index: wmail_sa.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/wmail_sa.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** wmail_sa.py 10 Oct 2004 09:49:30 -0000 1.2 --- wmail_sa.py 2 Mar 2008 18:00:03 -0000 1.3 *************** *** 1,6 **** #!/usr/bin/env python import sys ! import webmail.server.cgi_server if __name__=='__main__': ! webmail.server.cgi_server.main(sys.argv) --- 1,13 ---- #!/usr/bin/env python import sys ! import webmail.frontends.server ! ! if 0: ! import webmail.server.cgi_server ! serversetup_factory = webmail.server.cgi_server.ServerSetupFactory(None) ! else: ! import webmail.server.wsgi.webmailwsgi ! serversetup_factory = webmail.server.wsgi.webmailwsgi.WSGIServerSetup if __name__=='__main__': ! webmail.frontends.server.main(sys.argv, serversetup_factory) |
From: Michael D. <du...@us...> - 2008-03-02 18:00:03
|
Update of /cvsroot/pywebmail/webmail/webmail/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9380/webmail/server Modified Files: XSocketServer.py Log Message: standalone wsgi server Index: XSocketServer.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/XSocketServer.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** XSocketServer.py 2 Mar 2008 17:04:33 -0000 1.4 --- XSocketServer.py 2 Mar 2008 18:00:03 -0000 1.5 *************** *** 1,3 **** ! import sys, time, logging import socket, SocketServer try: import signal --- 1,3 ---- ! import sys, time, logging, getopt import socket, SocketServer try: import signal *************** *** 181,185 **** optarg,mul = optarg[:-1],60*60*24 return int(optarg)*mul ! except e: raise getopt.GetoptError, (str(e), 't') --- 181,185 ---- optarg,mul = optarg[:-1],60*60*24 return int(optarg)*mul ! except (ValueError,TypeError), e: raise getopt.GetoptError, (str(e), 't') *************** *** 188,192 **** if self.can_set_alarm(): alarm_opts = 't:' ! return 'vql:p'+alarm_opts def parse_optlist(self, optlist): --- 188,192 ---- if self.can_set_alarm(): alarm_opts = 't:' ! return 'vql:p:'+alarm_opts def parse_optlist(self, optlist): *************** *** 196,201 **** if opt == '-l': self.host = optarg if opt == '-p': ! try: self.port = int(optarg) ! except e: raise getopt.GetoptError, (str(e), 'p') if opt == '-t': self.alarm_time = self.parse_alarm_time(optarg) --- 196,203 ---- if opt == '-l': self.host = optarg if opt == '-p': ! try: ! self.port = int(optarg) ! except (ValueError,TypeError), e: ! raise getopt.GetoptError, (str(e), 'p') if opt == '-t': self.alarm_time = self.parse_alarm_time(optarg) |
From: Michael D. <du...@us...> - 2008-03-02 17:44:25
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3916 Modified Files: wmail_nt.py Log Message: wsgi support Index: wmail_nt.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/wmail_nt.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** wmail_nt.py 10 Oct 2004 09:49:30 -0000 1.4 --- wmail_nt.py 2 Mar 2008 17:44:23 -0000 1.5 *************** *** 2,9 **** import win32serviceutil import webmail.frontends.ntservice - import webmail.server.cgi_server ! class WebMailHTTPService(webmail.frontends.ntservice.ServiceSetupMixin, ! webmail.server.cgi_server.WebMailHTTPServerSetup): # NTService specific parameters _svc_name_ = 'PyWebMailHTTP' --- 2,14 ---- import win32serviceutil import webmail.frontends.ntservice ! if 0: ! import webmail.server.cgi_server ! serversetup_class = webmail.server.cgi_server.WebMailHTTPServerSetup ! else: ! import webmail.server.wsgi.webmailwsgi ! serversetup_class = webmail.server.wsgi.webmailwsgi.WSGIServerSetup ! ! class WebMailHTTPService(webmail.frontends.ntservice.ServiceSetupMixin, serversetup_class): # NTService specific parameters _svc_name_ = 'PyWebMailHTTP' *************** *** 12,17 **** def __init__(self, argv): ! webmail.frontends.ntservice.ServiceSetupMixin.__init__(self, argv, ! webmail.server.cgi_server.WebMailHTTPServerSetup) if __name__=='__main__': --- 17,21 ---- def __init__(self, argv): ! webmail.frontends.ntservice.ServiceSetupMixin.__init__(self, argv, serversetup_class) if __name__=='__main__': |
From: Michael D. <du...@us...> - 2008-03-02 17:38:42
|
Update of /cvsroot/pywebmail/webmail/www/cron In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1689 Modified Files: lockfixperm.sh Log Message: surge-log is ok... :-( Index: lockfixperm.sh =================================================================== RCS file: /cvsroot/pywebmail/webmail/www/cron/lockfixperm.sh,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** lockfixperm.sh 28 Apr 2007 07:26:53 -0000 1.5 --- lockfixperm.sh 2 Mar 2008 17:38:44 -0000 1.6 *************** *** 26,33 **** --url "${fixperm_url}" >"$temp_file" ! if [ -n "`sed -e '1 {/^=== fixperm\.cgi$/d}' \ -e '2 {/^=== Done\.$/d}' \ -e '3 {/^Done (200) 26 at [0-9]*\.[0-9]* seconds\.$/d}' \ ! "$temp_file"`" ] ; then cat "$temp_file" fi --- 26,48 ---- --url "${fixperm_url}" >"$temp_file" ! want_output=true ! if [ -n "$(sed -e '1 {/^=== fixperm\.cgi$/d}' \ -e '2 {/^=== Done\.$/d}' \ -e '3 {/^Done (200) 26 at [0-9]*\.[0-9]* seconds\.$/d}' \ ! "$temp_file")" ] ; then ! want_output=false ! elif [ -n "$(sed -e '1 {/^=== fixperm\.cgi$/d}' \ ! -e '2 {/^+ ls -laFd \/tmp\/persistent\/pywebmail\/moinmoin\/wiki\/data\/cache\/surgeprotect\/surge-log$/d}' \ ! -e '3 {/^-rw------- 1 nfsnobody 83093 [0-9]* [A-Z][a-z][a-z] [0-9*] *[0-9]*:[0-9]* \/tmp\/persistent\/pywebmail\/moinmoin\/wiki\/data\/cache\/surgeprotect\/surge-log$/d}' \ ! -e '4 {/^+ chmod 666 \/tmp\/persistent\/pywebmail\/moinmoin\/wiki\/data\/cache\/surgeprotect\/surge-log$/d}' \ ! -e '2 {/^+ ls -laFd \/tmp\/persistent\/pywebmail\/moinmoin\/wiki\/data\/cache\/surgeprotect\/surge-log$/d}' \ ! -e '3 {/^-rw-rw-rw- 1 nfsnobody 83093 [0-9]* [A-Z][a-z][a-z] [0-9*] *[0-9]*:[0-9]* \/tmp\/persistent\/pywebmail\/moinmoin\/wiki\/data\/cache\/surgeprotect\/surge-log$/d}' \ ! -e '7 {/^=== Done\.$/d}' \ ! -e '8 {/^Done (200) 522 at [0-9]*\.[0-9]* seconds\.$/d}' \ ! "$temp_file")" ] ; then ! want_output=false ! fi ! ! if $want_output ; then cat "$temp_file" fi |