pywebmail-checkins Mailing List for PyWebMail (Page 2)
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-03-02 17:34:12
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32701 Modified Files: Google.xml Log Message: incompatible changes on server Index: Google.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/Google.xml,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** Google.xml 30 Nov 2007 20:23:26 -0000 1.17 --- Google.xml 2 Mar 2008 17:34:15 -0000 1.18 *************** *** 80,84 **** <input ref="login2_result"/> <test inverse="yes">location\.replace\((["'])https?://g?mail.google.com/g?mail/?\?(?:_sgh|auth)(?:=|\\u003d)(.*)\1\)</test> ! <test id="login2_check">location\.replace\("http://www\.google\.ru/accounts/SetSID\?[^"]*&continue\\u003dhttp%3A%2F%2Fmail\.google\.com%2Fmail%2F%3Fauth%3D([^"]*)%26gausr%3D<value name="user"/>%2540gmail\.com"\)</test> <field ref="login2_check" name="session" group="1" parse="url"/> </parse> --- 80,84 ---- <input ref="login2_result"/> <test inverse="yes">location\.replace\((["'])https?://g?mail.google.com/g?mail/?\?(?:_sgh|auth)(?:=|\\u003d)(.*)\1\)</test> ! <test id="login2_check">location\.replace\("http://www\.google\.ru/accounts/SetSID\?[^"]*(?:&|\\46)continue(?:\\u003d|\\75)http%3A%2F%2Fmail\.google\.com%2Fmail%2F%3Fauth%3D([^"]*)%26gausr%3D<value name="user"/>%2540gmail\.com"\)</test> <field ref="login2_check" name="session" group="1" parse="url"/> </parse> *************** *** 96,101 **** <test inverse="yes" error_group="1">^Location: https://mail\.google\.com/mail/\?view=(chatintro)&</test> <test inverse="yes" result="retry">^Location: https://www\.google\.com/accounts/ServiceLogin\?</test> ! <field name="language" expr="icase('','en',match.group(2)[:1],'/',match.group(2)[1:],icase(match.group(2)[:4],'\\x2F',match.group(2)[4:],'Unknown'))">top\.location\s*=\s*(['"])(?:/g?mail/)?html(|(?:/|\\x2F)(?:en-GB|fr|it|de|es|zh-TW|zh-CN|ja|ko|nl|pt-BR|ru))(?:/|\\x2F)noactivex\.html\1</field> ! <test id="js_ver">(?:<script src="(?:/gmail)?\?view=page&name=browser&|^js\.location\.replace\("\?(?:ui=1\\x26)?view=page\\x26name=js\\x26)ver=([^ ">]*)"(?:>|\);$)</test> <field ref="js_ver" name="js_ver" group="1"/> </parse> --- 96,101 ---- <test inverse="yes" error_group="1">^Location: https://mail\.google\.com/mail/\?view=(chatintro)&</test> <test inverse="yes" result="retry">^Location: https://www\.google\.com/accounts/ServiceLogin\?</test> ! <field name="language" expr="icase(match.group(2)[:1],'','en','/',match.group(2)[1:],icase(match.group(2)[:4],'\\x2F',match.group(2)[4:],'Unknown'))">top\.location\s*=\s*(['"])(?:/g?mail/)?html(|(?:/|\\x2F)(?:en-GB|fr|it|de|es|zh-TW|zh-CN|ja|ko|nl|pt-BR|ru))(?:/|\\x2F)noactivex\.html\1</field> ! <test id="js_ver">(?:<script src="(?:/gmail)?\?(?:ui=1&(?:amp;)?)?view=page&(?:amp;)?name=browser&(?:amp;)?|^js\.location\.replace\("\?(?:ui=1\\x26)?view=page\\x26name=js\\x26)ver=([^ ">]*)"(?:>|\);$)</test> <field ref="js_ver" name="js_ver" group="1"/> </parse> *************** *** 103,110 **** <choose> <when test="language=='en'"> ! <fixed><line>parse_date=date(%a %b %d %Y_%I:%M %p)</line></fixed> </when> <when test="language=='ru'"> ! <fixed><line>parse_date=decode(utf-8),replace( ã\.,),replace( ã\.,),replace(ÿíâàðÿ,Jan),replace(ôåâðàëÿ,Feb),replace(ìàðòà,Mar),replace(àïðåëÿ,Apr),replace(ìàÿ,May),replace(èþíÿ,Jun),replace(èþëÿ,Jul),replace(àâãóñòà,Aug),replace(ñåíòÿáðÿ,Sep),replace(îêòÿáðÿ,Oct),replace(íîÿáðÿ,Nov),replace(äåêàáðÿ,Dec),date(%d %b %Y_%H:%M)</line></fixed> </when> <otherwise> --- 103,110 ---- <choose> <when test="language=='en'"> ! <fixed><line>parse_date=replace(_, ),date(%a %b %d %Y %I:%M %p)</line></fixed> </when> <when test="language=='ru'"> ! <fixed><line>parse_date=decode(utf-8),replace( ã\.,),replace( ã\.,),replace(ÿíâàðÿ,Jan),replace(ôåâðàëÿ,Feb),replace(ìàðòà,Mar),replace(àïðåëÿ,Apr),replace(ìàÿ,May),replace(èþíÿ,Jun),replace(èþëÿ,Jul),replace(àâãóñòà,Aug),replace(ñåíòÿáðÿ,Sep),replace(îêòÿáðÿ,Oct),replace(íîÿáðÿ,Nov),replace(äåêàáðÿ,Dec),replace(_, ),date(%d %b %Y %H:%M)</line></fixed> </when> <otherwise> *************** *** 200,204 **** <start>,\[</start> <end>,\d(?:,"[^"]*")?\]$</end> ! <field name="id" id="list_message_id" group="1">^,\["([^"]+)(?#1=uid)",[01](?#unread),[01](?#starred),"(?:<b>)?([^"]+?)(?#2=display_date)(?:</b>)?","(?:<|\\u003c)span id(?:=|\\u003d)\\(['"])(?#3)_u(?:ser|pro)_([^'"\\]*)(?#4=from_email)\\\3\\?>(?:<b>)?([^"]*?)(?#5=from_name)(?:</b>)?(?:<|\\u003c)/span\\?>(?: \((\d+)(?#6=conversation_length)\))?","[^"]*"(?#maillist_mark),"(?:<b>)?([^"]*?)(?#7=subject)(?:</b>)?","[^"]*"(?#body start),\[(?:"(?:[^"])*"(?:,"(?:[^"])*")*)?\](?#labels)\s*,"([^"]*)(?#8=attachments)","\1"(?#uid-copy),\d+,"([^"]*)"(?#9=date),\d+,"[^"]*",\d+,\d+,\d+\]</field> <field name="date" group="9" ref="list_message_id" parse="$parse_date"/> <field name="from_email" group="4" ref="list_message_id" parse=""/> --- 200,204 ---- <start>,\[</start> <end>,\d(?:,"[^"]*")?\]$</end> ! <field name="id" id="list_message_id" group="1">^,\["([^"]+)(?#1=uid)",[01](?#unread),[01](?#starred),"(?:<b>)?([^"]+?)(?#2=display_date)(?:</b>)?","(?:<|\\u003c)span id(?:=|\\u003d)\\(['"])(?#3)_u(?:ser|pro)_([^'"\\]*)(?#4=from_email)\\\3(?:\\?>|\\u003e)(?:<b>)?([^"]*?)(?#5=from_name)(?:</b>)?(?:<|\\u003c)/span(?:\\?>|\\u003e)(?: \((\d+)(?#6=conversation_length)\))?","[^"]*"(?#maillist_mark),"(?:<b>)?([^"]*?)(?#7=subject)(?:</b>)?","[^"]*"(?#body start),\[(?:"(?:[^"])*"(?:,"(?:[^"])*")*)?\](?#labels)\s*,"([^"]*)(?#8=attachments)","\1"(?#uid-copy),\d+,"([^"]*)"(?#9=date),\d+,"[^"]*",\d+,\d+,\d+\]</field> <field name="date" group="9" ref="list_message_id" parse="$parse_date"/> <field name="from_email" group="4" ref="list_message_id" parse=""/> |
From: Michael D. <du...@us...> - 2008-03-02 17:33:10
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32325 Modified Files: HotMail.xml Log Message: incompatible changes on server Index: HotMail.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/HotMail.xml,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** HotMail.xml 8 Dec 2007 07:55:10 -0000 1.22 --- HotMail.xml 2 Mar 2008 17:33:13 -0000 1.23 *************** *** 9,12 **** --- 9,13 ---- <field name="language">EN</field> <field name="country">EN</field> + <!--field name="datefmt">html,replace(Yesterday,<value expr="'%d.%d.%04d'%(lambda t:(t[2],t[1],t[0]))(gmtime())"/>),date(%d.%m.%Y,%m/%d/%Y,%H:%M,%H:%M %p)</field--> </fixed> </setup> *************** *** 250,254 **** </choose> <test inverse="yes" error_group="1">error=(.*)</test> ! <field name="inbox" group="1" parse="decode(unicode_escape)">^inbox=(.*)$</field> </parse> </login> --- 251,255 ---- </choose> <test inverse="yes" error_group="1">error=(.*)</test> ! <field name="inbox" group="1" parse="encode(ascii),decode(unicode_escape)">^inbox=(.*)$</field> </parse> </login> *************** *** 310,314 **** <check> <input ref="logout_page3"/> ! <test>^Location: http://www\.(?:live|msn)\.com</test> </check> </logout> --- 311,315 ---- <check> <input ref="logout_page3"/> ! <test>^Location: http://(?:www|<value name="language"/>)\.(?:live|msn)\.com</test> </check> </logout> *************** *** 348,351 **** --- 349,364 ---- </url_get> </fetch> + <pre_require> + <parse> + <input ref="folder_page"> + <fields><field name="page">1</field></fields> + </input> + <field ref="re_crude_yesterday" name="datefmt" + expr="'html,replace(Yesterday,'+ + match.group(3)+'.'+match.group(2)+'.'+('%02d'%(max(int(match.group(3))-1,1),))+ + '),date(%d.%m.%Y,%m/%d/%Y,%H:%M,%H:%M %p)'"/> + <test id="re_crude_yesterday">InboxPageAnchorTime=(\d\d\d\d)-(\d\d)-(\d\d)T</test> + </parse> + </pre_require> <list> <pages> *************** *** 363,367 **** <field name="from_name" group="1" parse="html"><td class="(?:InboxContentItemUnread)?" nowrap><a href="ReadMessageLight\.aspx\?[^"]+" class="TruncateFrom">([^<]*)</a></td></field> <field name="subject" group="1" parse="html"><td class="(?:InboxContentItemUnread)?"><a href="ReadMessageLight\.aspx\?[^"]+">([^<]*)&#x200f;</a></td></field> ! <field name="date" group="1" parse="html,date(%d.%m.%Y,%H:%M)"><td class="NoWrap">([^<]+)</td></field> <field name="size" group="1" parse="html,decode(utf-8),replace(KB$,k),replace(КБ$,k),replace(MB$,m),replace(МБ$,m),replace(GB$,g),replace(ГБ$,g)"><td class="TextAlignRight">([^lt;]*)</td></field> </item> --- 376,380 ---- <field name="from_name" group="1" parse="html"><td class="(?:InboxContentItemUnread)?" nowrap><a href="ReadMessageLight\.aspx\?[^"]+" class="TruncateFrom">([^<]*)</a></td></field> <field name="subject" group="1" parse="html"><td class="(?:InboxContentItemUnread)?"><a href="ReadMessageLight\.aspx\?[^"]+">([^<]*)&#x200f;</a></td></field> ! <field name="date" group="1" parse="$datefmt"><td class="NoWrap">([^<]+)</td></field> <field name="size" group="1" parse="html,decode(utf-8),replace(KB$,k),replace(КБ$,k),replace(MB$,m),replace(МБ$,m),replace(GB$,g),replace(ГБ$,g)"><td class="TextAlignRight">([^lt;]*)</td></field> </item> |
From: Michael D. <du...@us...> - 2008-03-02 17:31:39
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31623 Modified Files: Netscape.xml Log Message: incompatible changes on server Index: Netscape.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/Netscape.xml,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** Netscape.xml 30 Nov 2007 19:20:29 -0000 1.18 --- Netscape.xml 2 Mar 2008 17:31:43 -0000 1.19 *************** *** 121,124 **** --- 121,137 ---- </url_options> </url_get> + <url_get id="login_usersettings"> + <url>http://webmail.aol.com/<value name="version"/>/aim/en-us/common/settings.js.aspx</url> + <file>login7.js</file> + <method>GET</method> + <fields/> + <url_options> + <option name="use_meta_refresh">0</option> + <option name="use_redirect">0</option> + <option name="use_refresh">0</option> + <option name="do_save_headers">1</option> + <option name="override_ua">Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1</option> + </url_options> + </url_get> </fetch> <pre_require> *************** *** 179,187 **** </fixed> </pre_require> ! <parse> <fixed> <line><value expr="cookie('Auth')"/></line> </fixed> <field name="enc_user" group="1">&uid:([^&]*)&</field> </parse> </login> --- 192,205 ---- </fixed> </pre_require> ! <!--parse> <fixed> <line><value expr="cookie('Auth')"/></line> </fixed> <field name="enc_user" group="1">&uid:([^&]*)&</field> + </parse--> + <parse> + <input ref="login_usersettings"/> + <test>^window\.Settings = </test> + <field name="enc_user" group="1">","UserUID":"([^"]*)","</field> </parse> </login> *************** *** 205,209 **** <parse> <input ref="get_info"/> ! <test>^\[{"isSuccess":true,</test> <field name="storageQuota">,"storageQuota":(\d+),</field> <field name="storageUsed">,"storageUsed":(\d+)}]</field> --- 223,229 ---- <parse> <input ref="get_info"/> ! <test inverse="true" error_group="1" result="relogin" id="re_json_err_relogin">\[{"needAuthentication":true,"msg":"([^"]*)","loginUrl":"</test> ! <test inverse="true" error_group="1" id="re_json_err">\[{"needAuthentication":true,"msg":"([^"]*)",</test> ! <test id="re_json_success">^\[{"isSuccess":true,</test> <field name="storageQuota">,"storageQuota":(\d+),</field> <field name="storageUsed">,"storageUsed":(\d+)}]</field> *************** *** 229,233 **** <list> <input ref="folders_list"/> ! <test>^\[{"isSuccess":true,</test> <list bounds="inclusive"> <start>,"folders":\[</start> --- 249,255 ---- <list> <input ref="folders_list"/> ! <test inverse="true" error_group="1" result="relogin" ref="re_json_err_relogin"/> ! <test inverse="true" error_group="1" ref="re_json_err"/> ! <test ref="re_json_success"/> <list bounds="inclusive"> <start>,"folders":\[</start> *************** *** 243,247 **** <fetch> <url_get id="folder_page"> ! <url>http://webmail.aol.com/<value name="version"/>/aim/en-us/common/rpc/RPC.aspx?user=<value name="enc_user"/></url> <file>folder_<value name="folder"/>_<value name="page"/>.htm</file> <method>POST</method> --- 265,269 ---- <fetch> <url_get id="folder_page"> ! <url>http://webmail.aol.com/<value name="version"/>/aim/en-us/common/rpc/RPC.aspx?user=<value name="enc_user"/>&a=GetMessageList</url> <file>folder_<value name="folder"/>_<value name="page"/>.htm</file> <method>POST</method> *************** *** 262,266 **** <input ref="folder_page"/> <start>0</start> ! <test>^\[{"isSuccess":true,</test> <next expr="iif(int(match.group(1))>(int(page)+1)*100,str(int(page)+1))">,"totalItems":(\d+),</next> </pages> --- 284,290 ---- <input ref="folder_page"/> <start>0</start> ! <test inverse="true" error_group="1" result="relogin" ref="re_json_err_relogin"/> ! <test inverse="true" error_group="1" ref="re_json_err"/> ! <test ref="re_json_success"/> <next expr="iif(int(match.group(1))>(int(page)+1)*100,str(int(page)+1))">,"totalItems":(\d+),</next> </pages> *************** *** 322,326 **** <check> <input ref="delete_page"/> ! <test>^\[{"isSuccess":true}\]</test> </check> </delete> --- 346,352 ---- <check> <input ref="delete_page"/> ! <test inverse="true" error_group="1" result="relogin" ref="re_json_err_relogin"/> ! <test inverse="true" error_group="1" ref="re_json_err"/> ! <test ref="re_json_success"/> </check> </delete> |
From: Michael D. <du...@us...> - 2008-03-02 17:30:13
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31253 Modified Files: libero.it.xml Log Message: incompatible changes on server Index: libero.it.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/libero.it.xml,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** libero.it.xml 30 Nov 2007 20:37:25 -0000 1.7 --- libero.it.xml 2 Mar 2008 17:30:17 -0000 1.8 *************** *** 16,25 **** <file>login.htm</file> <fields> <field name="dominio"><value name="domain"/></field> <field name="LOGIN"><value name="user"/></field> - <field name="PASSWD"><value name="password"/></field> <field name="choice"><value expr="icase(domain,'libero.it','libero','inwind.it','inwind','iol.it','iol','blu.it','blu','')"/></field> ! <field name="Act_Login.x">0</field> ! <field name="Act_Login.y">0</field> </fields> <url_options/> --- 16,28 ---- <file>login.htm</file> <fields> + <field name="u"/> + <field name="d"/> + <field name="password"/> <field name="dominio"><value name="domain"/></field> <field name="LOGIN"><value name="user"/></field> <field name="choice"><value expr="icase(domain,'libero.it','libero','inwind.it','inwind','iol.it','iol','blu.it','blu','')"/></field> ! <field name="PASSWD"><value name="password"/></field> ! <!--field name="Act_Login.x">0</field> ! <field name="Act_Login.y">0</field--> </fields> <url_options/> |
From: Michael D. <du...@us...> - 2008-03-02 17:28:22
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30474 Modified Files: local.xml Log Message: support new wsgi server+logout Index: local.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/local.xml,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** local.xml 9 Oct 2006 21:14:49 -0000 1.7 --- local.xml 2 Mar 2008 17:28:25 -0000 1.8 *************** *** 5,8 **** --- 5,10 ---- <field name="inbox"><skip/></field> <field name="delete_multiple">10</field> + <field name="port_suffix"><value expr="iif(getdefault('port','80')!='80',':'+getdefault('port','80'))"/></field> + <cookie name="docookie" path="/" domain="loopback">true</cookie> </fixed> </setup> *************** *** 18,22 **** <fetch> <url_get id="login_result"> ! <url>http://loopback<value expr="iif(defined('port'),':'+getdefault('port','80'))"/>/python/webmail/login.html</url> <file>login.htm</file> <method>POST</method> --- 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> *************** *** 30,40 **** <check> <input ref="login_result"/> <test><title>Successfull logon</title></test> </check> </login> <folder> <fetch> <url_get id="folder_page"> ! <url>http://loopback<value expr="iif(defined('port'),':'+getdefault('port','80'))"/>/python/webmail/list_folder.html</url> <file>folder_<value name="folder"/>.htm</file> <method>GET</method> --- 32,61 ---- <check> <input ref="login_result"/> + <test id="relogin_form_re" inverse="true"><form action="(?:[^"]*/)?login\.html" </test> <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> + <fields/> + <url_options> + <option name="use_redirect">0</option> + <option name="do_save_headers">1</option> + </url_options> + </url_get> + </fetch> + <check> + <input ref="logout_result"/> + <test>Location: </test> + </check> + </logout> <folder> <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> *************** *** 45,48 **** --- 66,70 ---- <list> <input ref="folder_page"/> + <test ref="relogin_form_re" inverse="true"/> <item> <start>\<tr class=msg\></start> *************** *** 60,64 **** <fetch> <url_get id="folders_list"> ! <url>http://loopback<value expr="iif(defined('port'),':'+getdefault('port','80'))"/>/python/webmail/folders.html</url> <file>folders.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> *************** *** 73,76 **** --- 95,99 ---- <list> <input ref="folders_list"/> + <test ref="relogin_form_re" inverse="true"/> <item group="1">"list_folder\.html\?folder\=([^"]+)"</item> </list> *************** *** 80,84 **** <fetch> <url_get id="message_eml"> ! <url>http://loopback<value expr="iif(defined('port'),':'+getdefault('port','80'))"/>/python/webmail/message.eml</url> <file>message_<value name="folder"/>_<value name="msgid"/>.txt</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> *************** *** 94,98 **** <fetch> <url_get id="delete_page"> ! <url>http://loopback<value expr="iif(defined('port'),':'+getdefault('port','80'))"/>/python/webmail/delete.html</url> <file>delete_<value name="folder"/>_<value name="timestamp"/>.htm</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> *************** *** 105,108 **** --- 128,132 ---- <check> <input ref="delete_page"/> + <test ref="relogin_form_re" inverse="true"/> <test><title>Delete successful</title></test> </check> |
From: Michael D. <du...@us...> - 2008-03-02 17:26:42
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29766 Modified Files: pochta.ru.xml Log Message: major changes on server Index: pochta.ru.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/pochta.ru.xml,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** pochta.ru.xml 8 Dec 2007 16:55:08 -0000 1.16 --- pochta.ru.xml 2 Mar 2008 17:26:47 -0000 1.17 *************** *** 74,78 **** <option name="use_meta_refresh">0</option> <option name="do_save_headers">1</option> ! <option name="parse_chunked">0</option> </url_options> </url_get> --- 74,78 ---- <option name="use_meta_refresh">0</option> <option name="do_save_headers">1</option> ! <!--option name="parse_chunked">0</option--> </url_options> </url_get> *************** *** 86,91 **** <end></tr></end> <test ref="re_folder"/> ! <field name="folder_id" group="1" id="re_folder"><td><input type="checkbox" name="mbfs\[\]" value="([^"]*)"></td></field> ! <field name="folder_name" ref="re_folder" expr="iif(match.group(1).startswith('INBOX.%26'),lambda s:(s.replace('INBOX.%26','').replace('%2B','+').replace('%26','+')+'===').decode('base64').decode('utf-16-be'),lambda s:s.replace('INBOX.',''))(match.group(1))"/> </item> </list> --- 86,91 ---- <end></tr></end> <test ref="re_folder"/> ! <field name="folder_id" group="1" parse="url" id="re_folder"><td><input type="checkbox" name="mbfs\[\]" value="([^"]*)"></td></field> ! <field name="folder_name" ref="re_folder" expr="iif(match.group(1).startswith('INBOX.%26'),lambda s:(s.replace('INBOX.%26','').replace('%2B','+').replace('%26','+')+'===').decode('base64').decode('utf-16-be'),lambda s:s.replace('INBOX.',''))(match.group(1))" parse="url"/> </item> </list> *************** *** 99,108 **** <fields> <field name="id"><value name="session"/></field> ! <field name="mailbox"><value name="folder"/></field> <field name="page"><value name="page"/></field> </fields> <url_options> <option name="use_meta_refresh">0</option> ! <option name="parse_chunked">0</option> </url_options> </url_get> --- 99,108 ---- <fields> <field name="id"><value name="session"/></field> ! <field name="mailbox"><value name="folder_id"/></field> <field name="page"><value name="page"/></field> </fields> <url_options> <option name="use_meta_refresh">0</option> ! <!--option name="parse_chunked">0</option--> </url_options> </url_get> *************** *** 116,125 **** <next group="1"><a href="mailbox\.php\?id=<value name="session"/>&page=(\d+)" id="link_next_f">[^&]*&nbsp;?&raquo;</a></next> </pages> <item> <start><tr(?:\s+class="(?:unread)?\s*")?\s*></start> <end></tr></end> <test ref="list_message_id"/> ! <field name="id" group="1" id="list_message_id"><td class="checkbox"><input\s+type="Checkbox"(?: class="transparent")? name="indices\[\]" value="(\d*)"></td></field> ! <field name="from" group="1" parse="html"><td class="sender">(?:\s|&nbsp;)*<a href=[^>]*>([^<]*)</a></td></field> <field name="subject" group="1" parse="html"><td class="subject">\s*(?:<img[^>]*>)?<a href=[^>]*>([^<]*)</a>\s*</td></field> <field name="date" group="1" parse="date(%H:%M:%S %d.%m.%Y)"><td class="date_time" title="([^"]+)"></field> --- 116,127 ---- <next group="1"><a href="mailbox\.php\?id=<value name="session"/>&page=(\d+)" id="link_next_f">[^&]*&nbsp;?&raquo;</a></next> </pages> + <empty_list_test><div class="navbar_top">[^& ]{6} [^& ]{11}&nbsp;</div></empty_list_test> <item> <start><tr(?:\s+class="(?:unread)?\s*")?\s*></start> <end></tr></end> <test ref="list_message_id"/> ! <field name="id" group="1" id="list_message_id"><td class="checkbox"><input type="hidden" name="ltr\[\]" value="(\d*)"><input\s+type="Checkbox"(?: class="transparent")? name="indices\[\]" value="(\d*)"></td></field> ! <field name="from_name" group="1" ref="list_message_from"/> ! <field name="from_name" group="2" parse="html" id="list_message_from"><td class="sender">(?:\s|&nbsp;)*<a href="[^">]*" title="([^">]*)">([^<]*)</a></td></field> <field name="subject" group="1" parse="html"><td class="subject">\s*(?:<img[^>]*>)?<a href=[^>]*>([^<]*)</a>\s*</td></field> <field name="date" group="1" parse="date(%H:%M:%S %d.%m.%Y)"><td class="date_time" title="([^"]+)"></field> *************** *** 138,142 **** <field name="partID"></field> <field name="index"><value name="msgid"/></field> ! <field name="mailbox"><value name="folder"/></field> <field name="actionID">view_source</field> </fields> --- 140,144 ---- <field name="partID"></field> <field name="index"><value name="msgid"/></field> ! <field name="mailbox"><value name="folder_id"/></field> <field name="actionID">view_source</field> </fields> *************** *** 150,159 **** <!--reencode ref="message_eml" from="koi8-r" to="windows-1251"/--> <!--reencode ref="message_eml" from="windows-1251" to="koi8-r"/--> ! <asis> <input ref="message_eml"> <test ref="relogin_error_re" inverse="true" result="relogin" error_group="1"/> <test ref="err_report_re" inverse="true" error_group="1"/> </input> ! </asis> </message> <delete> --- 152,167 ---- <!--reencode ref="message_eml" from="koi8-r" to="windows-1251"/--> <!--reencode ref="message_eml" from="windows-1251" to="koi8-r"/--> ! <replace> <input ref="message_eml"> <test ref="relogin_error_re" inverse="true" result="relogin" error_group="1"/> <test ref="err_report_re" inverse="true" error_group="1"/> </input> ! <replaces> ! <item> ! <search>(\r\n\r)([^\r\n])</search> ! <replace>\1\n\2</replace> ! </item> ! </replaces> ! </replace> </message> <delete> *************** *** 170,174 **** <url_options> <option name="use_meta_refresh">0</option> ! <option name="parse_chunked">0</option> </url_options> </url_get> --- 178,182 ---- <url_options> <option name="use_meta_refresh">0</option> ! <!--option name="parse_chunked">0</option--> </url_options> </url_get> |
From: Michael D. <du...@us...> - 2008-03-02 17:24:53
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29029 Modified Files: rambler.ru.xml Log Message: minor format change Index: rambler.ru.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/rambler.ru.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** rambler.ru.xml 30 Nov 2007 20:39:44 -0000 1.4 --- rambler.ru.xml 2 Mar 2008 17:24:58 -0000 1.5 *************** *** 49,53 **** <parse> <input_http ref="logout_result"/> ! <test>^Set-Cookie: rlogin=; (?:path=/; domain=\.rambler\.ru|domain=\.rambler\.ru; path=/)\r?$</test> <test>^Location: http://mail\.rambler\.ru/\r?$</test> </parse> --- 49,53 ---- <parse> <input_http ref="logout_result"/> ! <test>^Set-Cookie: rlogin=; (?:path=/; domain=\.rambler\.ru|domain=\.rambler\.ru; path=/)(?:; expires=Thu, 1-Jan-(?:19)?70 00:00:00 GMT)?\r?$</test> <test>^Location: http://mail\.rambler\.ru/\r?$</test> </parse> |
From: Michael D. <du...@us...> - 2008-03-02 17:23:29
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28638 Modified Files: yandex.ru.xml Log Message: Major changes on server Index: yandex.ru.xml =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/yandex.ru.xml,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** yandex.ru.xml 16 Jul 2007 20:32:15 -0000 1.8 --- yandex.ru.xml 2 Mar 2008 17:23:33 -0000 1.9 *************** *** 40,44 **** <fetch> <url_get id="folders_list"> ! <url>http://webmail.yandex.ru/messages</url> <file>folders.htm</file> <method>GET</method> --- 40,44 ---- <fetch> <url_get id="folders_list"> ! <url>http://webmail.yandex.ru/classic/setup_folders</url> <file>folders.htm</file> <method>GET</method> *************** *** 51,57 **** <test ref="mailbox_page_re"/> <item> ! <start><div></start> ! <end></div></end> ! <test id="folder_info_re"><input name="cfolder" type="radio" id="cf_(\d*)" value="\1"(?: checked disabled)?><label for="cf_\1">(.*)</label></test> <field name="folder_name" group="2" ref="folder_info_re" parse="decode(utf-8)"/> <field name="folder_id" group="1" ref="folder_info_re"/> --- 51,57 ---- <test ref="mailbox_page_re"/> <item> ! <start><tr id="tr</start> ! <end></tr></end> ! <test id="folder_info_re"><td><a href="/classic/messages\?current_folder=([^"]*)">([^<]*)</a></td></test> <field name="folder_name" group="2" ref="folder_info_re" parse="decode(utf-8)"/> <field name="folder_id" group="1" ref="folder_info_re"/> *************** *** 62,66 **** <fetch> <url_get id="folder_page"> ! <url>http://webmail.yandex.ru/messages</url> <file>folder_<value name="folder_id"/>_page<value name="page"/>.htm</file> <method>GET</method> --- 62,66 ---- <fetch> <url_get id="folder_page"> ! <url>http://webmail.yandex.ru/classic/messages</url> <file>folder_<value name="folder_id"/>_page<value name="page"/>.htm</file> <method>GET</method> *************** *** 78,92 **** <next group="1"><span class="active">(\d*)</span>\s*<span><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?pagenum=\1&(?:amp;)?(?:mesort=[^">]*)?"></next> </pages> ! <empty_list_test><title>.*: 0 ?\(0\) .*</title></empty_list_test> <item> ! <start><tr id="id\d+" class="m(?: re| fresh)?"></start> <end></tr></end> <test ref="message_subj_re"/> ! <field name="id" id="message_subj_re" group="1"><td class="subject"><div><a href="/mt\?page_number=<value name="page"/>&(?:amp;)?ids=(\d+)&(?:amp;)?current_folder=<value name="folder_id"/>">(?:<span class="prefix re">([^<]*)</span>[^<]{1,2})?<span class="title">([^<]*)</span>(?:\s*<span class="fl">[^<]*</span>)?</a></div>(?:<i></i>)?</td></field> ! <field name="from_email" id="message_from_re" group="1"><td class="from"><span title="([^">]*)">([^<]*?)\s*</span>(?:<i></i>)?</td></field> <field name="from_name" ref="message_from_re" group="2" parse="decode(utf-8),html"/> <field name="subject" ref="message_subj_re" expr="iif(match.group(2) is None, (match.group(2) or '').title()+': ', '')+match.group(3)" parse="decode(utf-8),html"/> ! <field name="date" group="1" parse="replace(">,/),html,date(%Y-%m-%dT%H:%M:%S)"><td class="date" abbr="(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d)" title="[^"]*">[^<]*</td></field> ! <field name="size" group="1" parse="decode(utf-8),replace(КБ,K),html,replace( ,)"><td class="size">\s*(\d*(?:&(?:#160;|nbsp;))?[^<]{2,6})\s*</td></field> </item> </list> --- 78,92 ---- <next group="1"><span class="active">(\d*)</span>\s*<span><a href="/classic/message\?current_folder=<value name="folder_id"/>&(?:amp;)?pagenum=\1&(?:amp;)?(?:mesort=[^">]*)?"></next> </pages> ! <empty_list_test><title>.*: 0 ?(?:\(0\))? .*</title></empty_list_test> <item> ! <start><tr class="(?:new|default)" id="tr\d+" onmouseup="[^"]*"></start> <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"/> <field name="subject" ref="message_subj_re" expr="iif(match.group(2) is None, (match.group(2) or '').title()+': ', '')+match.group(3)" parse="decode(utf-8),html"/> ! <field name="date" group="1" parse="replace(">,/),html,date(%d.%m.%y,%H:%M)"><td>(\d\d.\d\d.\d\d|\d\d:\d\d)</td></field> ! <field name="size" group="1" parse="decode(utf-8),replace(КБ,K),html,replace( ,)"><td>(\d*(?:&(?:#160;|nbsp;)| )?[^<]{2,6})</td></field> </item> </list> *************** *** 95,99 **** <fetch> <url_get id="message_info"> ! <url>http://webmail.yandex.ru/message</url> <file>message_<value name="folder_id"/>_<value name="msgid"/>.htm</file> <method>GET</method> --- 95,99 ---- <fetch> <url_get id="message_info"> ! <url>http://webmail.yandex.ru/classic/message</url> <file>message_<value name="folder_id"/>_<value name="msgid"/>.htm</file> <method>GET</method> *************** *** 107,111 **** </url_get> <url_get id="message_eml"> ! <url>http://webmail.yandex.ru/source_message_content</url> <file>message_<value name="folder_id"/>_<value name="msgid"/>.eml</file> <method>GET</method> --- 107,111 ---- </url_get> <url_get id="message_eml"> ! <url>http://webmail.yandex.ru/classic/source_message_content</url> <file>message_<value name="folder_id"/>_<value name="msgid"/>.eml</file> <method>GET</method> *************** *** 120,124 **** <input ref="message_info"/> <test ref="re_msgid_mid"/> ! <field id="re_msgid_mid" name="msgid_mid" group="2"><a href="((?:http://mail\.yandex\.ru)?/source_message\?mid=(\d+\.\d+\.\d+))" class="sys" target="_blank"></field> </parse> </pre_require> --- 120,124 ---- <input ref="message_info"/> <test ref="re_msgid_mid"/> ! <field id="re_msgid_mid" name="msgid_mid" group="2"><a href="((?:http://mail\.yandex\.ru)?(?:/classic)?/source_message\?mid=(\d+\.\d+\.\d+))"</field> </parse> </pre_require> |
From: Michael D. <du...@us...> - 2008-03-02 17:15:25
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config/parse In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25733 Modified Files: action.py Log Message: tipo Index: action.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/parse/action.py,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** action.py 30 Nov 2007 19:12:19 -0000 1.23 --- action.py 2 Mar 2008 17:15:29 -0000 1.24 *************** *** 213,217 **** res.append(item) res = '\n'.join(res) ! log.debug('FileInput: %s', repr(res)) return res --- 213,217 ---- res.append(item) res = '\n'.join(res) ! log.debug('FixedInput: %s', repr(res)) return res |
From: Michael D. <du...@us...> - 2008-03-02 17:13:33
|
Update of /cvsroot/pywebmail/webmail/webmail/client/config In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24975 Modified Files: __init__.py Log Message: more debug output Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/client/config/__init__.py,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** __init__.py 30 Apr 2007 15:59:19 -0000 1.24 --- __init__.py 2 Mar 2008 17:13:36 -0000 1.25 *************** *** 478,481 **** --- 478,482 ---- if scriptpath: prefixes.append(scriptpath) prefixes.extend([sys.prefix, sys.exec_prefix]) + log.debug('_get_configfiles: prefixes=%s', prefixes) suffixes = [''] if type(progname) in StringTypes: *************** *** 484,487 **** --- 485,489 ---- suffixes.extend(progname) suffixes.append('webmail') + log.debug('_get_configfiles: suffixes=%s', suffixes) for prefix in prefixes: for suffix in suffixes: *************** *** 537,543 **** --- 539,547 ---- class NTServiceConfig(ConfigBase): def __init__(self, service, scriptpath=None): + log.debug('NTServiceConfig.__init__(%s,%s)', repr(service), repr(scriptpath)) setup_path = self._get_default_setup_path(service, scriptpath) c = webmail.utils.xConfigParser.xConfigParser({'setup_path':setup_path}) l = self._get_configfiles(service, scriptpath) + log.debug('NTServiceConfig: configfiles = %s', l) if l: f = l[0] |
From: Michael D. <du...@us...> - 2008-03-02 17:12:45
|
Update of /cvsroot/pywebmail/webmail/webmail/utils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24609 Modified Files: __init__.py Log Message: mutable XPrefixDict+default section handling in ConfigSection Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/__init__.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** __init__.py 16 Jul 2007 21:59:32 -0000 1.14 --- __init__.py 2 Mar 2008 17:12:47 -0000 1.15 *************** *** 137,140 **** --- 137,144 ---- def __getitem__(self, name): return self.config[self.prefix+name] + def __setitem__(self, name, value): + self.config[self.prefix+name] = value + def __delitem__(self, name): + del self.config[self.prefix+name] def keys(self): result = [] *************** *** 151,166 **** def get(self, name, default=''): try: ! return self[self.prefix+name] except KeyError: return default class ConfigSection: ! from ConfigParser import NoOptionError _NoOptionError = NoOptionError ! del NoOptionError def __init__(self, parent_config, section_name): self.config = parent_config self.section = section_name def __len__(self): if not self.config.has_section(self.section): return 0 return len(self.keys()) --- 155,173 ---- def get(self, name, default=''): try: ! return self.config[self.prefix+name] except KeyError: return default class ConfigSection: ! from ConfigParser import NoOptionError, DEFAULTSECT _NoOptionError = NoOptionError ! _DEFAULTSECT = DEFAULTSECT ! del NoOptionError, DEFAULTSECT def __init__(self, parent_config, section_name): self.config = parent_config self.section = section_name def __len__(self): + if self.section == ConfigSection._DEFAULTSECT: + return len(self.config.defaults()) if not self.config.has_section(self.section): return 0 return len(self.keys()) *************** *** 171,174 **** --- 178,183 ---- raise KeyError(name) def keys(self): + if self.section == ConfigSection._DEFAULTSECT: + return self.config.defaults().keys() return self.config.options(self.section) def has_key(self, name): *************** *** 178,181 **** --- 187,192 ---- return self[name] def values(self): + if self.section == ConfigSection._DEFAULTSECT: + return self.config.defaults().values() res = [] for k in self.keys(): *************** *** 183,186 **** --- 194,199 ---- return res def items(self): + if self.section == ConfigSection._DEFAULTSECT: + return self.config.defaults().items() res = [] for k in self.keys(): |
From: Michael D. <du...@us...> - 2008-03-02 17:10:44
|
Update of /cvsroot/pywebmail/webmail/webmail/utils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23885 Modified Files: backend_helpers.py Log Message: allow passing msg Index: backend_helpers.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/backend_helpers.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** backend_helpers.py 8 Dec 2007 07:59:44 -0000 1.8 --- backend_helpers.py 2 Mar 2008 17:10:48 -0000 1.9 *************** *** 22,26 **** class MessageInfoBase: ! def __init__(self, folder, msgid): self._folder = folder self._msgid = msgid --- 22,26 ---- class MessageInfoBase: ! def __init__(self, folder, msgid, msg=None): self._folder = folder self._msgid = msgid *************** *** 31,36 **** self.date = None self.uid = self._msgid ! self.msg = None self.__details = 0 def __parse_details(self): if self.__details: return --- 31,38 ---- self.date = None self.uid = self._msgid ! self.msg = msg self.__details = 0 + if self.msg is not None: + self.__parse_details() def __parse_details(self): if self.__details: return |
From: Michael D. <du...@us...> - 2008-03-02 17:09:29
|
Update of /cvsroot/pywebmail/webmail/webmail/utils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23472 Added Files: xmailbox.py Log Message: moved from cgi_server, because now also used by file backend --- NEW FILE: xmailbox.py --- import sys, os, getopt, mailbox, rfc822 try: from cStringIO import StringIO except: from StringIO import StringIO class _FileUnread: def __init__(self, fp, unread_data=''): self.__dict__['fp'] = fp self.__dict__['unread_data'] = unread_data def __getattr__(self, name): return getattr(self.fp, name) def __setattr__(self, name, val): setattr(self.fp, name, val) def read(self, sizehint=-1): buf = '' if self.unread_data: if sizehint>0 and len(self.unread_data)>sizehint: buf = self.unread_data[:sizehint] self.__dict__['unread_data'] = self.unread_data[sizehint:] return buf buf = self.unread_data self.__dict__['unread_data'] = '' if sizehint>0: sizehint = sizehint-len(buf) return buf+self.fp.read(sizehint) def readline(self): buf = '' if self.unread_data: f = StringIO(self.unread_data) buf = f.readline() rest = f.read() f.close() del f self.__dict__['unread_data'] = rest if buf[-1:] in '\n\r': return buf return buf+self.fp.readline() def unread(self, data): self.__dict__['unread_data'] = data+self.unread_data class NetscapeMessage(rfc822.Message): def readheaders(self): self.netscapefrom = '' startofline = None firstline = 1 self.dict = {} self.unixfrom = '' self.headers = [] self.status = '' self.netscape_headers = [] gtfrom = None data = '' if self.seekable: try: startofmsg = self.fp.tell() except IOError: self.seekable = 0 while 1: if self.seekable: startofline = self.fp.tell() line = self.fp.readline() if not self.seekable: data = data+line if not line: self.status = 'EOF in headers' return if firstline and line.startswith('From '): self.netscapefrom = self.netscapefrom + line continue firstline = 0 if line.startswith('>From '): gtfrom = startofline+1 break if self.islast(line): self.netscapefrom = '' self.netscape_headers = [] break self.netscape_headers.append(line) if gtfrom is not None: if hasattr(self.fp, 'unread'): self.fp.unread(line[1:]) elif self.seekable: self.fp.seek(gtfrom) else: self.fp = _FileUnread(self.fp, line[1:]) else: if hasattr(self.fp, 'unread'): self.fp.unread(data) elif self.seekable: self.fp.seek(startofmsg) else: self.fp = _FileUnread(self.fp, data) rfc822.Message.readheaders(self) if gtfrom: for line in self.netscape_headers: headerseen = self.isheader(line) if headerseen: self.dict[headerseen] = line[len(headerseen)+1:].strip() class NetscapeMailbox(mailbox.PortableUnixMailbox): def __init__(self, fp, factory=NetscapeMessage): mailbox.PortableUnixMailbox.__init__(self, fp, factory) def main(argv): file = '' verbose = 0 msgno = None try: optlist,args = getopt.getopt(argv[1:], 'f:vq') for opt,optarg in optlist: if opt == '-v': verbose = verbose+1 if opt == '-q': verbose = verbose-1 if opt == '-f': file = optarg if args and not file: file,args = args[0],args[1:] if args: try: msgno,args = int(args[0]),args[1:] except e: raise getopt.GetoptError, (str(e), args[0]) if args: raise getopt.GetoptError, ('Too many arguments: '+str(args), 'f') except getopt.GetoptError, e: if e.opt != 'h': print 'Error:', e print 'Usage:', argv[0], '[-v|-q]', '[-f] <file>', '[<msgno>]' return f = open(file, 'rb') mb = NetscapeMailbox(f) msgs = [] while 1: msg = mb.next() if msg is None: break msgs.append(msg) if msgno is None: msg.fp = None if msgno is not None: print 'Message %d/%d body:' % (msgno,len(msgs)) msg = msgs[msgno-1] if verbose > 0: map(sys.stdout.write, msg.headers) msg.rewindbody() sys.stdout.write(msg.fp.read()) else: print 'Mailbox',file,'has',len(msgs),'messages:' for msg in msgs: f = msg.getheader('from') or "" s = msg.getheader('subject') or "" d = msg.getheader('date') or "" print '-%20.20s %20.20s %-30.30s'%(f, d[5:], s) if __name__=='__main__': main(sys.argv) |
From: Michael D. <du...@us...> - 2008-03-02 17:08:26
|
Update of /cvsroot/pywebmail/webmail/webmail/server/cgi_server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23086 Modified Files: content.py Removed Files: xmailbox.py Log Message: xmailbox moved to utils Index: content.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/cgi_server/content.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** content.py 25 Oct 2006 23:57:21 -0000 1.4 --- content.py 2 Mar 2008 17:08:28 -0000 1.5 *************** *** 3,8 **** try: from cStringIO import StringIO except: from StringIO import StringIO - import xmailbox import webmail.utils.xstrings CR = '\r' --- 3,8 ---- try: from cStringIO import StringIO except: from StringIO import StringIO import webmail.utils.xstrings + from webmail.utils.xmailbox import NetscapeMailbox CR = '\r' *************** *** 25,29 **** def _get_messages(mailbox='mbox'): mbfile = _get_mbfile(mailbox) ! mb = xmailbox.NetscapeMailbox(open(mbfile)) try: deleted = filter(None, webmail.utils.xstrings.normalize_lines(open(mbfile+'.del').read()).split('\n')) except: deleted = [] --- 25,29 ---- def _get_messages(mailbox='mbox'): mbfile = _get_mbfile(mailbox) ! mb = NetscapeMailbox(open(mbfile)) try: deleted = filter(None, webmail.utils.xstrings.normalize_lines(open(mbfile+'.del').read()).split('\n')) except: deleted = [] *************** *** 170,174 **** print '</body></html>' ! def message_eml(req, message): msg,msgid = _get_message(message) assert msg, 'Message %s not found.' % (message,) --- 170,174 ---- print '</body></html>' ! def message_txt(req, message): msg,msgid = _get_message(message) assert msg, 'Message %s not found.' % (message,) *************** *** 184,187 **** --- 184,191 ---- if line is None: break print line + req.content_type = 'text/plain' + + def message_eml(req, message): + message_txt(req, message) req.content_type = 'message/rfc822' *************** *** 368,377 **** return getattr(self, ext)(req) ! index = _container(html=output_func('index_html'), xul=output_func('index_xul')) login = _container(html=output_func('login_html', ['usernm', 'passwd'])) test = _container(html=output_func('test_html')) folders = _container(html=output_func('folders_html')) list_folder = _container(html=output_func('list_folder_html')) ! message = _container(html=output_func('message_html', ['message']), eml=output_func('message_eml', ['message'])) delete = _container(html=output_func('delete_html', ['message'])) --- 372,384 ---- return getattr(self, ext)(req) ! index = _container(html=output_func('index_html'), ! xul=output_func('index_xul')) login = _container(html=output_func('login_html', ['usernm', 'passwd'])) test = _container(html=output_func('test_html')) folders = _container(html=output_func('folders_html')) list_folder = _container(html=output_func('list_folder_html')) ! message = _container(html=output_func('message_html', ['message']), ! txt=output_func('message_txt', ['message']), ! eml=output_func('message_eml', ['message'])) delete = _container(html=output_func('delete_html', ['message'])) --- xmailbox.py DELETED --- |
From: Michael D. <du...@us...> - 2008-03-02 17:06:56
|
Update of /cvsroot/pywebmail/webmail/webmail/server/pop3 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22370 Modified Files: plain.py Log Message: check password Index: plain.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/pop3/plain.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** plain.py 6 Oct 2006 20:53:30 -0000 1.12 --- plain.py 2 Mar 2008 17:06:57 -0000 1.13 *************** *** 256,260 **** def login(self, username, password, folder_name=None): ! if not self.mailboxes.has_key(username): mailbox = self.setup.get_mailbox(username, password) mailbox.open() --- 256,264 ---- def login(self, username, password, folder_name=None): ! if self.mailboxes.has_key(username): ! info = self.mailboxes[username].account.initial_info ! check_password = info.get('access_password', info.get('password', None)) ! assert password==check_password, 'Invalid username or password.' ! else: mailbox = self.setup.get_mailbox(username, password) mailbox.open() |
From: Michael D. <du...@us...> - 2008-03-02 17:05:28
|
Update of /cvsroot/pywebmail/webmail/webmail/server/pop3 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21993 Modified Files: __init__.py Log Message: use new XSocketServer.MailboxesServerSetup Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/pop3/__init__.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** __init__.py 26 Apr 2005 22:15:48 -0000 1.8 --- __init__.py 2 Mar 2008 17:05:31 -0000 1.9 *************** *** 24,28 **** global_command_factory, mailbox_command_factory) ! class ServerSetup(webmail.settings.MailboxesListSetup, webmail.server.XSocketServer.ServerSetup): enforce_server_style = 0 cached_by_default = 1 --- 24,28 ---- global_command_factory, mailbox_command_factory) ! class ServerSetup(webmail.server.XSocketServer.MailboxesServerSetup): enforce_server_style = 0 cached_by_default = 1 *************** *** 39,44 **** self.local = None self.logfile = PausableOutput(sys.stderr) ! webmail.settings.MailboxesListSetupMixin.__init__(self) ! webmail.server.XSocketServer.ServerSetup.__init__(self, argv, progname) def auto_check_from_string(self, s): --- 39,43 ---- self.local = None self.logfile = PausableOutput(sys.stderr) ! webmail.server.XSocketServer.MailboxesServerSetup.__init__(self, argv, progname) def auto_check_from_string(self, s): *************** *** 53,58 **** def get_optdefs(self): ! opts = 'vql:p:f:' ! if not self.enforce_server_style: opts = opts+'cd' if not self.enforce_server_style or self.cached_by_default: --- 52,60 ---- def get_optdefs(self): ! opts = webmail.server.XSocketServer.MailboxesServerSetup.get_optdefs(self) ! if self.enforce_server_style: ! # add hidden (not shown in help) option - same as forced style ! opts = opts+'cd'[not self.cached_by_default] ! else: opts = opts+'cd' if not self.enforce_server_style or self.cached_by_default: *************** *** 64,69 **** def parse_optlist(self, optlist): for opt,optarg in optlist: - if opt == '-v': self.verbose = self.verbose+1 - if opt == '-q': self.verbose = self.verbose-1 if opt == '-c': self.cached = 1 if opt == '-d': self.cached = 0 --- 66,69 ---- *************** *** 71,91 **** if opt == '-L': self.local = 1 if opt == '-W': self.local = 0 ! if opt == '-f': self.config_file = optarg ! if opt == '-l': self.host = optarg ! if opt == '-p': ! try: self.port = int(optarg) ! except Exception, e: raise getopt.GetoptError, (str(e), 'p') ! if opt == '-t': ! self.alarm_time = self.parse_alarm_time(optarg) def get_usage_lines(self): ! lines = [] ! lines.append('Usage: %s <options>...' % (self.argv[0],)) ! lines.append('Options:') ! lines.append(' -v Verbose') ! lines.append(' -q Quiet') ! lines.append(' -l Specify host address to listen at') ! lines.append(' -p Specify port') ! lines.append(' -f cfg File to read configuration from') if not self.enforce_server_style: default = ['', '(default) '][self.cached_by_default] --- 71,78 ---- if opt == '-L': self.local = 1 if opt == '-W': self.local = 0 ! webmail.server.XSocketServer.MailboxesServerSetup.parse_optlist(self, optlist) def get_usage_lines(self): ! lines = webmail.server.XSocketServer.MailboxesServerSetup.get_usage_lines(self) if not self.enforce_server_style: default = ['', '(default) '][self.cached_by_default] *************** *** 97,102 **** lines.append(' -o Offline (don\'t automatically start autochecking)'+enforce) lines.append(' -L Autocheck local mailboxes'+enforce) - if self.can_set_alarm(): - lines.append(' -t Stop after specified time (3600=3600s=60m=1h)') return lines --- 84,87 ---- *************** *** 125,128 **** --- 110,114 ---- def setup_logging(self): + # this is needed for PausableOutput to work global logfile stdout,stderr = sys.stdout,sys.stderr |
From: Michael D. <du...@us...> - 2008-03-02 17:04:35
|
Update of /cvsroot/pywebmail/webmail/webmail/server In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21602 Modified Files: XSocketServer.py Log Message: support webmail.settings+cache support_shutdown decision Index: XSocketServer.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/server/XSocketServer.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** XSocketServer.py 2 Dec 2004 09:59:37 -0000 1.3 --- XSocketServer.py 2 Mar 2008 17:04:33 -0000 1.4 *************** *** 8,11 **** --- 8,12 ---- except: select=None import webmail.utils.xgetopt + import webmail.settings log = logging.getLogger('webmail.server.XSocketServer') *************** *** 47,50 **** --- 48,85 ---- raise + def get_request_settimeout(self): + self.socket.setblocking(0) + self.socket.settimeout(self.__timeout) + try: + res = self.__master_class.get_request(self) + try: + request,client_address = res + request.setblocking(1) + finally: + return res + finally: + self.socket.setblocking(1) + + def get_request_select(self): + l,t,t = select.select([self.socket], [], [], self.__timeout) + if not l: raise socket.error, 'timeout' + #poplog.debug('Incomming connection...') + return self.__master_class.get_request(self) + + def get_request_setblocking(self): + self.socket.setblocking(0) + try: + try: + return self.__master_class.get_request(self) + except socket.error: + time.sleep(self.__timeout) + if self.__shutdown: raise + return self.__master_class.get_request(self) + finally: + self.socket.setblocking(1) + + def get_request_master(self): + return self.__master_class.get_request(self) + def get_request(self): """Get the request and client address from the socket. *************** *** 53,93 **** """ if not self.__support_shutdown: ! return self.__master_class.get_request(self) elif hasattr(self.socket, 'settimeout'): ! reqlog.debug('settimeout') ! self.socket.setblocking(0) ! self.socket.settimeout(self.__timeout) ! try: ! res = self.__master_class.get_request(self) ! try: ! request,client_address = res ! request.setblocking(1) ! finally: ! return res ! finally: ! self.socket.setblocking(1) elif select: ! reqlog.debug('select') ! l,t,t = select.select([self.socket], [], [], self.__timeout) ! if not l: raise socket.error, 'timeout' ! #poplog.debug('Incomming connection...') ! return self.__master_class.get_request(self) elif hasattr(self.socket, 'setblocking') and hasattr(time, 'sleep'): ! reqlog.debug('setblocking+sleep') ! self.socket.setblocking(0) ! try: ! try: ! return self.__master_class.get_request(self) ! except socket.error: ! time.sleep(self.__timeout) ! if self.__shutdown: raise ! return self.__master_class.get_request(self) ! finally: ! self.socket.setblocking(1) else: if self.__support_shutdown: log.error("Warning: Can't be stoppable.") self.__support_shutdown = 0 ! return self.__master_class.get_request(self) class XTCPServer(StoppableServerMixin, SocketServer.TCPServer): --- 88,107 ---- """ if not self.__support_shutdown: ! self.get_request = self.get_request_master elif hasattr(self.socket, 'settimeout'): ! log.debug('setting get_request to use settimeout') ! self.get_request = self.get_request_settimeout elif select: ! log.debug('setting get_request to use select') ! self.get_request = self.get_request_select elif hasattr(self.socket, 'setblocking') and hasattr(time, 'sleep'): ! log.debug('setting get_request to use setblocking+sleep') ! self.get_request = self.get_request_setblocking else: if self.__support_shutdown: log.error("Warning: Can't be stoppable.") self.__support_shutdown = 0 ! self.get_request = self.get_request_master ! return self.get_request() class XTCPServer(StoppableServerMixin, SocketServer.TCPServer): *************** *** 210,213 **** --- 224,246 ---- return self.server + class MailboxesServerSetup(webmail.settings.MailboxesListSetup, ServerSetup): + + def __init__(self, argv, progname=None): + webmail.settings.MailboxesListSetupMixin.__init__(self) + webmail.server.XSocketServer.ServerSetup.__init__(self, argv, progname) + + def get_optdefs(self): + opts = ServerSetup.get_optdefs(self) + return opts+'f:' + + def parse_optlist(self, optlist): + for opt,optarg in optlist: + if opt == '-f': self.config_file = optarg + ServerSetup.parse_optlist(self, optlist) + + def get_usage_lines(self): + lines = ServerSetup.get_usage_lines(self) + lines.append(' -f cfg File to read configuration from') + if __name__=='__main__': sys.stderr.write("It's a library, not a standalone script!\n") |
From: Michael D. <du...@us...> - 2008-03-02 16:02:15
|
Update of /cvsroot/pywebmail/webmail/webmail/utils/xlogging In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31664 Modified Files: __init__.py Log Message: earlier logging Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xlogging/__init__.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** __init__.py 10 Oct 2004 02:35:08 -0000 1.1 --- __init__.py 2 Mar 2008 16:02:18 -0000 1.2 *************** *** 3,6 **** --- 3,7 ---- #must have at least 3 items verbose_map = [logging.ERROR,logging.WARN,logging.INFO,logging.DEBUG,logging.NOTSET] + max_verbose = len(verbose_map)-1 BASIC_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s" *************** *** 27,31 **** --- 28,34 ---- if line: self.func(line) + default_handler_installed = 0 def appConfig(app=None, verbose=1): + global default_handler_installed if not app: app = sys.argv[0] *************** *** 39,47 **** if os.path.exists(logconfig): logging.fileConfig(logconfig) ! else: hdlr = logging.StreamHandler() fmt = logging.Formatter(BASIC_FORMAT) hdlr.setFormatter(fmt) logging.getLogger('').addHandler(hdlr) if verbose is not None: logConfig(verbose=verbose) --- 42,51 ---- if os.path.exists(logconfig): logging.fileConfig(logconfig) ! elif not default_handler_installed: hdlr = logging.StreamHandler() fmt = logging.Formatter(BASIC_FORMAT) hdlr.setFormatter(fmt) logging.getLogger('').addHandler(hdlr) + default_handler_installed = 1 if verbose is not None: logConfig(verbose=verbose) *************** *** 49,53 **** # None is root logger def logConfig(log=None, verbose=1): ! verbose = min(max(verbose,0),len(verbose_map)-1) if log is None or type(log)==type(''): log = logging.getLogger(log) --- 53,57 ---- # None is root logger def logConfig(log=None, verbose=1): ! verbose = min(max(verbose,0),max_verbose) if log is None or type(log)==type(''): log = logging.getLogger(log) |
From: Michael D. <du...@us...> - 2008-03-02 16:01:42
|
Update of /cvsroot/pywebmail/webmail/webmail/utils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31311 Modified Files: xgetopt.py Log Message: earlier logging Index: xgetopt.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/utils/xgetopt.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** xgetopt.py 1 Mar 2007 23:36:13 -0000 1.2 --- xgetopt.py 2 Mar 2008 16:01:46 -0000 1.3 *************** *** 19,22 **** --- 19,25 ---- if self.setup_ok: self.init_step() + self.setup_ok = self.presetup_logging() + if self.setup_ok: + self.init_step() self.setup_ok = self.parse_config() if self.setup_ok: *************** *** 55,58 **** --- 58,65 ---- print line + def presetup_logging(self): + webmail.utils.xlogging.appConfig(verbose=self.verbose) + return 1 + def setup_logging(self): webmail.utils.xlogging.appConfig(verbose=self.verbose) |
From: Michael D. <du...@us...> - 2008-03-02 16:01:09
|
Update of /cvsroot/pywebmail/webmail/webmail/frontends In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31285 Modified Files: ntservice.py Log Message: Better logging Index: ntservice.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/frontends/ntservice.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ntservice.py 22 Apr 2007 00:44:36 -0000 1.7 --- ntservice.py 2 Mar 2008 16:01:12 -0000 1.8 *************** *** 19,22 **** --- 19,24 ---- class ServiceSetupMixin(win32serviceutil.ServiceFramework): + nt_setup_logging_done = 0 + def create_config(self, progname, config_file): return webmail.client.config.NTServiceConfig(progname, config_file) *************** *** 38,42 **** self.usage_lines = None self.continue_event = threading.Event() ! self.setup_logging_done = 0 self.init_step() try: --- 40,48 ---- self.usage_lines = None self.continue_event = threading.Event() ! self.init_step() ! if len(argv) > 1: ! logging.root.setLevel(logging.NOTSET) ! self.nt_setup_logging() ! webmail.utils.xlogging.appConfig(verbose=webmail.utils.xlogging.max_verbose) self.init_step() try: *************** *** 52,56 **** self.init_step() logging.root.setLevel(logging.NOTSET) ! if not self.setup_logging_done: self.setup_logging() if self.usage_lines: excobj = sys.exc_info()[1] --- 58,62 ---- self.init_step() logging.root.setLevel(logging.NOTSET) ! self.setup_logging() if self.usage_lines: excobj = sys.exc_info()[1] *************** *** 85,101 **** self.ReportServiceStatus(self.service_status) def setup_logging(self): if not self.__ServerSetup.setup_logging(self): return 0 ! self._setup_logging() ! self.setup_logging_done = 1 return 1 ! def _setup_logging(self): ! hdlr = logging.handlers.NTEventLogHandler(self._svc_display_name_) ! hdlr.setLevel(logging.root.level+1) #time and level already in log entry fmt = logging.Formatter("%(name)s:\n%(message)s") ! hdlr.setFormatter(fmt) ! logging.root.addHandler(hdlr) def SvcRun(self): --- 91,115 ---- self.ReportServiceStatus(self.service_status) + def presetup_logging(self): + if not self.__ServerSetup.presetup_logging(self): return 0 + self.nt_setup_logging() + return 1 + def setup_logging(self): if not self.__ServerSetup.setup_logging(self): return 0 ! self.nt_setup_logging() return 1 ! def nt_setup_logging(self): ! if self.nt_setup_logging_done: ! self.nt_setup_logging_hdlr.setLevel(logging.root.level+1) ! return ! self.nt_setup_logging_hdlr = logging.handlers.NTEventLogHandler(self._svc_display_name_) ! self.nt_setup_logging_hdlr.setLevel(logging.root.level+1) #time and level already in log entry fmt = logging.Formatter("%(name)s:\n%(message)s") ! self.nt_setup_logging_hdlr.setFormatter(fmt) ! logging.root.addHandler(self.nt_setup_logging_hdlr) ! self.nt_setup_logging_done = 1 def SvcRun(self): |
From: Michael D. <du...@us...> - 2008-03-02 11:06:44
|
Update of /cvsroot/pywebmail/webmail/webmail/backends In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26139 Modified Files: __init__.py Added Files: file.py Log Message: file backend --- NEW FILE: file.py --- import sys, logging, md5, rfc822, poplib, time, socket try: from cStringIO import StringIO except: from StringIO import StringIO from webmail.utils.backend_helpers import MessageInfoBase from webmail.utils.expr_helper import a2bool from webmail.utils.xstrings import normalize_lines from webmail.utils.xmailbox import NetscapeMailbox log = logging.getLogger('webmail.backends.file') CR = '\r' LF = '\n' CRLF = CR+LF def _get_msgid(msg): m = md5.new() for line in msg.headers: line = line.strip(CRLF) if line is None: continue m.update(line+CRLF) m.update(CRLF) # header separator #log.debug('_get_msgid: rewindbody()') msg.rewindbody() lineno = 1 while 1: #log.debug('_get_msgid: reading line %d', lineno) line = msg.fp.readline() if not line: break #log.debug('_get_msgid: line %d = %r', lineno, line) line = line.strip(CRLF) m.update(line+CRLF) lineno = lineno+1 return m.hexdigest() class FileMessageInfo(MessageInfoBase): def __init__(self, folder, msg): msgid = _get_msgid(msg) MessageInfoBase.__init__(self, folder, msgid, msg) class FileAccountFolder: def __init__(self, account, folder_name, filename): self.parent = account self.folder = folder_name self.filename = filename self.messages = None self.deleted = None self.closed = 1 def _open(self): assert self.closed, 'Account/folder already opened' self.closed = 0 if self.messages is None or self.deleted is None: self._list() def close(self): assert not self.closed, 'Account/folder already closed' self.closed = 1 f = open(self.filename+'.del', 'wb') if self.deleted: f.write('\n'.join(self.deleted)+'\n') f.close() def _close(self): if not self.closed: self.close() self.deleted = self.messages = None def _list(self): log.info('Opening file %s', self.filename) mb = NetscapeMailbox(open(self.filename,'rb')) if self.deleted is None: try: self.deleted = filter(None, normalize_lines(open(self.filename+'.del').read()).split('\n')) except: self.deleted = [] log.info('%d deleted entries read', len(self.deleted)) messages = {} while 1: msg = mb.next() if not msg: break msginfo = FileMessageInfo(self, msg) if msginfo.uid in self.deleted: continue messages[msginfo.uid] = msginfo log.info('%d messages read', len(self.deleted)) self.messages = messages def list(self): assert not self.closed, 'Account/folder closed' self._list() return self.messages.values() def get(self, msgid): assert not self.closed, 'Account/folder closed' if self.messages is None: self._list() return self.messages[msgid].msg def delete(self, msgids): assert not self.closed, 'Account/folder closed' if type(msgids)!=type([]): raise TypeError, 'list expected, '+type(msgids).__name__+' found' if self.messages is None: self._list() for msgid in msgids: self.deleted.append(msgid) del self.messages[msgid] class FileAccount: def __init__(self, main_config, box_config): self.email = box_config['email'] self.folder_names = [None] folder_names = box_config.get('folders') if folder_names: self.folder_names.extend(folder_names.split(',')) self.folders = {} for folder_name in self.folder_names: if folder_name is None: filename = box_config['file'] else: filename = box_config['file_'+folder_name] self.folders[folder_name] = FileAccountFolder(self, folder_name, filename) self.closed = 1 def open(self): self.closed = 0 def close(self): assert not self.closed, 'Account already closed' for f in self.folders.values(): f._close() self.closed = 1 def get_inbox_name(self): return None def list(self): assert not self.closed, 'Account not yet opened' return self.folder_names def get(self, folder_name=None): assert not self.closed, 'Account not yet opened' folder = self.folders[folder_name] if folder.closed: folder._open() return folder mailbox_factory = FileAccount if __name__=='__main__': sys.stderr.write('It\'s a library, not a standalone script!\n') Index: __init__.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/backends/__init__.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** __init__.py 8 Dec 2007 08:03:08 -0000 1.6 --- __init__.py 2 Mar 2008 11:06:44 -0000 1.7 *************** *** 2,6 **** def get_default_mailbox_backend(mailbox_info): ! #if mailbox_info.has_key('file'): return 'file' # not yet supported if mailbox_info.has_key('server'): host = mailbox_info['server'] --- 2,7 ---- def get_default_mailbox_backend(mailbox_info): ! if mailbox_info.has_key('file'): ! return 'file' if mailbox_info.has_key('server'): host = mailbox_info['server'] *************** *** 13,17 **** if mailbox_info.has_key('port'): port = int(mailbox_info['port']) ! if port in (25, 465, 587): return 'smtp' #if port in (143, 993): return 'imap' # imap not yet supported return 'pop3' --- 14,19 ---- if mailbox_info.has_key('port'): port = int(mailbox_info['port']) ! if port in (25, 465, 587): ! return 'smtp' #if port in (143, 993): return 'imap' # imap not yet supported return 'pop3' |
From: Michael D. <du...@us...> - 2008-03-02 11:00:40
|
Update of /cvsroot/pywebmail/webmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23958 Modified Files: settings.py Log Message: - Index: settings.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/webmail/settings.py,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** settings.py 9 Dec 2007 11:05:59 -0000 1.20 --- settings.py 2 Mar 2008 11:00:44 -0000 1.21 *************** *** 121,125 **** backend = self.get_outbox_backend_name(outbox_info) backend_module = webmail.backends.get_backend_module(backend) ! assert backend_module, 'Unknown backend '+backend outbox = backend_module.outbox_factory(self, outbox_info) outbox.initial_info = outbox_info --- 121,125 ---- backend = self.get_outbox_backend_name(outbox_info) backend_module = webmail.backends.get_backend_module(backend) ! assert backend_module is not None, 'Unknown backend '+backend outbox = backend_module.outbox_factory(self, outbox_info) outbox.initial_info = outbox_info |
From: Michael D. <du...@us...> - 2008-03-02 10:54:31
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21718 Modified Files: checker_manage.py Log Message: - Index: checker_manage.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/checker_manage.py,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** checker_manage.py 6 Dec 2007 10:13:26 -0000 1.13 --- checker_manage.py 2 Mar 2008 10:54:29 -0000 1.14 *************** *** 319,322 **** --- 319,328 ---- return d + def _del(self, root, fn): + f = os.path.join(root,fn) + if self.verbose > 2: + print '-- del', f + if self.doexec: + os.remove(f) def dircleanup(self, d): if self.verbose > 1: *************** *** 325,333 **** for fn in files: if fn[-4:] in ('.pyc','.pyo','.wmc') or fn[-9:] == '$py.class': ! f = os.path.join(root,fn) ! if self.verbose > 2: ! print '-- del', f ! if self.doexec: ! os.remove(f) if 'CVS' in dirs: dirs.remove('CVS') --- 331,338 ---- for fn in files: if fn[-4:] in ('.pyc','.pyo','.wmc') or fn[-9:] == '$py.class': ! self._del(root,fn) ! elif fn[-4:] == '.pdb' and fn[:-4]+'.exe' in files: ! self._del(root,fn) ! self._del(root,fn[:-4]+'.exe') if 'CVS' in dirs: dirs.remove('CVS') *************** *** 347,351 **** --- 352,360 ---- f.close() + _cygpath_cache = {} + def _cygpath(self, key, fn): + if self._cygpath_cache.has_key((key,fn)): + return self._cygpath_cache[(key,fn)] if sys.platform == 'cygwin' and key in 'uw' and ctypes is not None: MAXPATH = 512 *************** *** 361,364 **** --- 370,374 ---- if self.verbose > 0: print '#'+key+'#', fn, '=>', res + self._cygpath_cache[(key,fn)] = res return res |
From: Michael D. <du...@us...> - 2008-03-02 10:53:06
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21338 Modified Files: checker.py Log Message: support verify folders, mail receive and delete Index: checker.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/checker.py,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** checker.py 6 Dec 2007 10:12:44 -0000 1.16 --- checker.py 2 Mar 2008 10:53:08 -0000 1.17 *************** *** 28,31 **** --- 28,39 ---- unixfrom = 'From - Thu Jan 01 00:00:00 1970\n' + outmail_template = '''\ + From: %(from)s + To: %(to)s + Subject: %(subject)s + + %(body)s + ''' + class TestProcess: def __init__(self, test_name, main_config, test_config): *************** *** 48,51 **** --- 56,61 ---- mailbox_info = ([folder]+mailbox_name.split('#',1))[-2:] self.mailboxes.append(mailbox_info) + self.test_key = '%X' % (id(self),) + self.support_outbox = hasattr(self.parent, 'get_outbox_by_name') def _get_verify(self): *************** *** 92,96 **** def msg_prepare_literal(self, msg): msg.rewindbody() ! return ''.join(msg.headers)+'\n'+(msg.fp.read().rstrip('\n'))+'\n' def msg_prepare_relaxed(self, msg): --- 102,106 ---- def msg_prepare_literal(self, msg): msg.rewindbody() ! return ''.join(msg.headers).replace('\r\n','\n')+'\n'+(msg.fp.read().replace('\r\n','\n').rstrip('\n'))+'\n' def msg_prepare_relaxed(self, msg): *************** *** 147,164 **** log.info('Starting test %s...', self.name) try: getattr(self, 'perform_'+self.verify)() log.info('Test %s (%s) succeded!', self.name, self.verify) return 1,'Ok' except Exception, e: ! log.info('Test %s (%s) failed:', self.name, self.verify, exc_info=1) if type(e) not in (type(u''), type('')): try: e = unicode(e) ! except UnicodeEncodeError: ! e = str(e) if type(e) == type(u'') and self.parent.output_encoding is not None: e = e.encode(self.parent.output_encoding, 'replace') return 0,e def perform_references(self): tests = [] --- 157,349 ---- log.info('Starting test %s...', self.name) try: + test_step = 'parse' + want_delete = a2bool(self.config.get('verify_delete', '0')) + want_outbox = self.config.has_key('verify_outbox') + want_folders = self.config.has_key('verify_folders') + if want_folders: + test_step = 'folders' + self.perform_folders() + log.info('Folder list test %s succeded!', self.name) + test_step = self.verify getattr(self, 'perform_'+self.verify)() log.info('Test %s (%s) succeded!', self.name, self.verify) + if want_outbox: + if self.support_outbox: + test_step = 'outbox' + self.perform_outbox() + log.info('Sending test %s succeded!', self.name) + else: + want_delete = want_delete and self.config.has_key('delete_pattern') + if want_delete: + test_step = 'delete' + self.perform_delete() + log.info('Deleting test %s succeded!', self.name) return 1,'Ok' except Exception, e: ! log.info('Test %s (%s) failed:', self.name, test_step, exc_info=1) if type(e) not in (type(u''), type('')): 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: e = e.encode(self.parent.output_encoding, 'replace') return 0,e + def perform_folders(self): + encoding = self.config.get('folders_encoding') + compare_lower = a2bool(self.config.get('folders_compare_lower','0')) + inbox_name = self.config.get('folders_inbox',None) + folders = self.config['verify_folders'] + if encoding: + folders = folders.decode(encoding) + inbox_name = inbox_name.decode(encoding) + if compare_lower: + folders = folders.lower() + inbox_name = inbox_name.lower() + folders = folders.split(',') + folders.sort() + + mailbox_name = self.config.get('folders_mailbox') + if mailbox_name is None: + mailbox_name = self.config['mailbox'] + mailbox = self.parent.get_mailbox_by_name(mailbox_name) + + mailbox.open() + try: + if inbox_name is not None: + real_inbox_name = mailbox.get_inbox_name() + if compare_lower: + real_inbox_name = real_inbox_name.lower() + if real_inbox_name != inbox_name: + raise TestFailed, "Folder list test failed: inbox name doesn't match (%s!=%s)" % (real_inbox_name, inbox_name) + real_folders = mailbox.list() + if compare_lower: + real_folders = map(lambda s:s.lower(), real_folders) + real_folders.sort() + if real_folders != folders: + raise TestFailed, "Folder list test failed: %s!=%s" % (real_folders, folders) + finally: + mailbox.close() + + def perform_outbox(self): + max_attempts = int(self.config.get('outmail_attempts','10')) + outmail_sleep = int(self.config.get('outmail_wait','60')) + + outbox_name = self.config['verify_outbox'] + outbox = self.parent.get_outbox_by_name(outbox_name) + + mailbox_name = self.config['outbox_mailbox'] + mailbox = self.parent.get_mailbox_by_name(mailbox_name) + + subject = 'PyWebmail outbox test:'+self.test_key + outmail_dict = { + 'from':outbox.email, + 'to':mailbox.email, + 'subject':subject, + 'body':subject+'\n', + } + + outbox.send(outmail_template % outmail_dict) + + done = 0 + for attempt in xrange(1,max_attempts+1): + time.sleep(outmail_sleep) + log.info('Starting attempt %d/%d to get test mail', attempt, max_attempts) + try: + if not mailbox.closed: mailbox.close() + mailbox.open() + folder = None + try: + folder = mailbox.get() + for msginfo in folder.list(): + if msginfo.subject is None: + msginfo.read_details(1) + if msginfo.subject == subject: + log.info('Found test mail %s with subject %s', msginfo.uid, msginfo.subject) + log.debug('Found test mail %s: date=%s, sender=%s, recipients=%s, size=%s', + msginfo.uid, msginfo.date, msginfo.sender, msginfo.recipients, msginfo.size) + done = 1 + else: + log.debug('Skipping mail %s (%s!=%s): date=%s, sender=%s, recipients=%s, size=%s', + msginfo.uid, msginfo.subject, subject, msginfo.date, + msginfo.sender, msginfo.recipients, msginfo.size) + finally: + if folder is not None: + folder.close() + mailbox.close() + except Exception, e: + log.info('Get outmail attempt %d/%d failed:', attempt, max_attempts, exc_info=1) + if done: + log.debug('Outbox test succeeded after %d/%d attempts', attempt, max_attempts) + return + raise TestFailed, 'Outbox test failed to found mail after %d attempts' % (max_attempts,) + + def perform_delete(self): + allow_empty_delete = a2bool(self.config.get('allow_empty_delete','0')) + delete_check_list = a2bool(self.config.get('delete_check_list','1')) + has_outbox = self.config.has_key('verify_outbox') + if has_outbox and self.support_outbox: + mailbox_name = self.config.get('delete_mailbox', self.config['outbox_mailbox']) + subject_re = re.escape('PyWebmail outbox test:'+self.test_key) + folder_name = self.config.get('delete_folder') + else: + mailbox_name = self.config['delete_mailbox'] + subject_re = self.config['delete_pattern'] + folder_name = self.config.get('delete_folder', self.config.get('folder')) + subject_re = re.compile(subject_re) + mailbox = self.parent.get_mailbox_by_name(mailbox_name) + + mailbox.open() + folder_name = folder_name or mailbox.get_inbox_name() + folder = mailbox.get(folder_name) + found = [] + for msginfo in folder.list(): + if msginfo.subject is None: + msginfo.read_details(1) + if msginfo.subject and subject_re.match(msginfo.subject): + log.debug('Found mail %s: subject=%s, date=%s, sender=%s, recipients=%s, size=%s', + msginfo.uid, msginfo.subject, msginfo.date, + msginfo.sender, msginfo.recipients, msginfo.size) + found.append(msginfo.uid) + msginfo.delete() + else: + log.debug('Leaving mail %s: subject=%s, date=%s, sender=%s, recipients=%s, size=%s', + msginfo.uid, msginfo.subject, msginfo.date, + msginfo.sender, msginfo.recipients, msginfo.size) + folder.close() + mailbox.close() + if found: + still_here = [] + mailbox.open() + folder = mailbox.get(folder_name) + if delete_check_list: + folder_list = map(lambda msginfo:msginfo.uid, folder.list()) + for uid in found: + if uid in folder_list: + still_here.append(uid) + else: + for uid in found: + try: + msginfo = folder.get(uid) + still_here.append(uid) + except: + log.info('Get deleted mail failed - this is OK.', exc_info=1) + folder.close() + mailbox.close() + if still_here: + raise TestFailed, 'Deletion test: Mail still here: '+(', '.join(still_here)) + else: + log.warn("Deletion test can't proceed because no mail found for mask %s", repr(subject_re.pattern)) + if not allow_empty_delete: + raise TestFailed, 'Deletion test: No mail found (mask=%s)' % (subject_re.pattern,) + def perform_references(self): tests = [] *************** *** 175,178 **** --- 360,366 ---- assert res, 'Test %s failed' % (test.name,) + def perform_ok(self): + pass + def perform_simple(self): test_mbx_file0 = self.config.get('test_mbx', None) *************** *** 340,344 **** def perform_orderedmailboxes(self): orderby = self.config.get('orderby', 'none').lower().strip() ! assert orderby in ('none', 'uid', 'size', '!size', 'date', '!date', 'msghash') orderforce = orderby[:1] == '!' if orderforce: orderby = orderby[1:] --- 528,532 ---- def perform_orderedmailboxes(self): orderby = self.config.get('orderby', 'none').lower().strip() ! assert orderby in ('none', 'uid', 'size', '!size', 'date', '!date', 'mailid', 'headhash', 'msghash') orderforce = orderby[:1] == '!' if orderforce: orderby = orderby[1:] *************** *** 372,379 **** msginfo.read_details(1) l.sort(lambda a,b:cmp(a.date,b.date)) elif orderby == 'msghash': for msginfo in l: msg1 = msginfo.get() ! msginfo.msghash = hash(self.msg_prepare_literal(msg1)) l.sort(lambda a,b:cmp(a.msghash,b.msghash)) elif orderby != 'none': --- 560,580 ---- msginfo.read_details(1) l.sort(lambda a,b:cmp(a.date,b.date)) + elif orderby == 'mailid': + for msginfo in l: + msg1 = msginfo.get() + mailid = msg1.get('message-id') + if mailid is None: + mailid = hex(hash(''.join(msg1.headers)))+'@localhost' + msginfo.mailid = mailid + l.sort(lambda a,b:cmp(a.mailid,b.mailid)) + elif orderby == 'headhash': + for msginfo in l: + msg1 = msginfo.get() + msginfo.headhash = hex(hash(''.join(msg1.headers))) + l.sort(lambda a,b:cmp(a.headhash,b.headhash)) elif orderby == 'msghash': for msginfo in l: msg1 = msginfo.get() ! msginfo.msghash = hex(hash(self.msg_prepare_literal(msg1))) l.sort(lambda a,b:cmp(a.msghash,b.msghash)) elif orderby != 'none': *************** *** 455,459 **** mbx_file = self.config.get('mbx', None) assert mbx_file ! mbx = open(mbx_file).read() i = 0 for folder_name,mailbox_name in self.mailboxes: --- 656,660 ---- mbx_file = self.config.get('mbx', None) assert mbx_file ! mbx = open(mbx_file, 'rb').read() i = 0 for folder_name,mailbox_name in self.mailboxes: *************** *** 564,567 **** --- 765,773 ---- return webmail.settings.MailboxesListSetup.get_mailbox_by_name(self, name, self.mailbox_settings) + if hasattr(webmail.settings.MailboxesListSetup, 'get_outbox_by_name'): + def get_outbox_by_name(self, name): + log.debug("get_outbox_by_name(%s): mailbox_settings=%s", name, self.mailbox_settings) + return webmail.settings.MailboxesListSetup.get_outbox_by_name(self, name, self.mailbox_settings) + def get_mailbox(self, email, password): return webmail.settings.MailboxesListSetup.get_mailbox(self, email, password, self.mailbox_settings) |
From: Michael D. <du...@us...> - 2008-03-02 10:50:27
|
Update of /cvsroot/pywebmail/webmail In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20283 Modified Files: debug_parse.py Log Message: fine-tune logging Index: debug_parse.py =================================================================== RCS file: /cvsroot/pywebmail/webmail/debug_parse.py,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** debug_parse.py 15 Jun 2007 16:13:37 -0000 1.10 --- debug_parse.py 2 Mar 2008 10:50:26 -0000 1.11 *************** *** 137,144 **** --- 137,149 ---- ok = webmail.utils.xgetopt.Setup.setup_logging(self) if ok: + webmail.utils.xlogging.logConfig("webmail.server.XSocketServer.get_request", verbose=self.verbose-2) + webmail.utils.xlogging.logConfig("webmail.client.config.parse.action.xdebug", verbose=self.verbose-2) webmail.utils.xlogging.logConfig("webmail.client.config.parse", verbose=self.verbose-2) webmail.utils.xlogging.logConfig("webmail.utils.xhttp", verbose=self.verbose-1) webmail.utils.xlogging.logConfig("webmail.utils.xhttp.result", verbose=self.verbose-2) + webmail.utils.xlogging.logConfig("webmail.utils.xhttp.utils", verbose=self.verbose-2) webmail.utils.xlogging.logConfig("webmail.utils", verbose=self.verbose-1) + webmail.utils.xlogging.logConfig("cookielib", verbose=self.verbose-1) + webmail.utils.xlogging.logConfig("webmail.utils.POP3Server", verbose=self.verbose) return ok |