From python-checkins at python.org Mon May 1 05:03:10 2006 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 May 2006 05:03:10 +0200 (CEST) Subject: [Python-checkins] r45830 - in python/trunk/Lib: email/_parseaddr.py email/test/test_email.py email/test/test_email_renamed.py rfc822.py test/test_rfc822.py Message-ID: <20060501030310.767DB1E4011@bag.python.org> Author: barry.warsaw Date: Mon May 1 05:03:02 2006 New Revision: 45830 Modified: python/trunk/Lib/email/_parseaddr.py python/trunk/Lib/email/test/test_email.py python/trunk/Lib/email/test/test_email_renamed.py python/trunk/Lib/rfc822.py python/trunk/Lib/test/test_rfc822.py Log: Port forward from 2.4 branch: Patch #1464708 from William McVey: fixed handling of nested comments in mail addresses. E.g. "Foo ((Foo Bar)) " Fixes for both rfc822.py and email package. This patch needs to be back ported to Python 2.3 for email 2.5. Modified: python/trunk/Lib/email/_parseaddr.py ============================================================================== --- python/trunk/Lib/email/_parseaddr.py (original) +++ python/trunk/Lib/email/_parseaddr.py Mon May 1 05:03:02 2006 @@ -367,6 +367,7 @@ break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = True else: Modified: python/trunk/Lib/email/test/test_email.py ============================================================================== --- python/trunk/Lib/email/test/test_email.py (original) +++ python/trunk/Lib/email/test/test_email.py Mon May 1 05:03:02 2006 @@ -2215,6 +2215,12 @@ ['foo: ;', '"Jason R. Mastaler" ']), [('', ''), ('Jason R. Mastaler', 'jason at dom.ain')]) + def test_getaddresses_embedded_comment(self): + """Test proper handling of a nested comment""" + eq = self.assertEqual + addrs = Utils.getaddresses(['User ((nested comment)) ']) + eq(addrs[0][1], 'foo at bar.com') + def test_utils_quote_unquote(self): eq = self.assertEqual msg = Message() Modified: python/trunk/Lib/email/test/test_email_renamed.py ============================================================================== --- python/trunk/Lib/email/test/test_email_renamed.py (original) +++ python/trunk/Lib/email/test/test_email_renamed.py Mon May 1 05:03:02 2006 @@ -2221,6 +2221,12 @@ ['foo: ;', '"Jason R. Mastaler" ']), [('', ''), ('Jason R. Mastaler', 'jason at dom.ain')]) + def test_getaddresses_embedded_comment(self): + """Test proper handling of a nested comment""" + eq = self.assertEqual + addrs = utils.getaddresses(['User ((nested comment)) ']) + eq(addrs[0][1], 'foo at bar.com') + def test_utils_quote_unquote(self): eq = self.assertEqual msg = Message() Modified: python/trunk/Lib/rfc822.py ============================================================================== --- python/trunk/Lib/rfc822.py (original) +++ python/trunk/Lib/rfc822.py Mon May 1 05:03:02 2006 @@ -700,6 +700,7 @@ break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = 1 else: Modified: python/trunk/Lib/test/test_rfc822.py ============================================================================== --- python/trunk/Lib/test/test_rfc822.py (original) +++ python/trunk/Lib/test/test_rfc822.py Mon May 1 05:03:02 2006 @@ -45,6 +45,10 @@ print 'extra parsed address:', repr(n), repr(a) continue i = i + 1 + self.assertEqual(mn, n, + "Un-expected name: %s != %s" % (`mn`, `n`)) + self.assertEqual(ma, a, + "Un-expected address: %s != %s" % (`ma`, `a`)) if mn == n and ma == a: pass else: @@ -129,6 +133,12 @@ 'To: person at dom.ain (User J. Person)\n\n', [('User J. Person', 'person at dom.ain')]) + def test_doublecomment(self): + # The RFC allows comments within comments in an email addr + self.check( + 'To: person at dom.ain ((User J. Person)), John Doe \n\n', + [('User J. Person', 'person at dom.ain'), ('John Doe', 'foo at bar.com')]) + def test_twisted(self): # This one is just twisted. I don't know what the proper # result should be, but it shouldn't be to infloop, which is From python-checkins at python.org Mon May 1 05:21:31 2006 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 May 2006 05:21:31 +0200 (CEST) Subject: [Python-checkins] r45831 - in python/branches/release23-maint/Lib: email/_parseaddr.py email/test/test_email.py rfc822.py test/test_rfc822.py Message-ID: <20060501032131.8E6181E4009@bag.python.org> Author: barry.warsaw Date: Mon May 1 05:21:25 2006 New Revision: 45831 Modified: python/branches/release23-maint/Lib/email/_parseaddr.py python/branches/release23-maint/Lib/email/test/test_email.py python/branches/release23-maint/Lib/rfc822.py python/branches/release23-maint/Lib/test/test_rfc822.py Log: Back port from 2.4 branch: Patch #1464708 from William McVey: fixed handling of nested comments in mail addresses. E.g. "Foo ((Foo Bar)) " Fixes for both rfc822.py and email package. Modified: python/branches/release23-maint/Lib/email/_parseaddr.py ============================================================================== --- python/branches/release23-maint/Lib/email/_parseaddr.py (original) +++ python/branches/release23-maint/Lib/email/_parseaddr.py Mon May 1 05:21:25 2006 @@ -365,6 +365,7 @@ break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = True else: Modified: python/branches/release23-maint/Lib/email/test/test_email.py ============================================================================== --- python/branches/release23-maint/Lib/email/test/test_email.py (original) +++ python/branches/release23-maint/Lib/email/test/test_email.py Mon May 1 05:21:25 2006 @@ -2064,6 +2064,12 @@ ['foo: ;', '"Jason R. Mastaler" ']), [('', ''), ('Jason R. Mastaler', 'jason at dom.ain')]) + def test_getaddresses_embedded_comment(self): + """Test proper handling of a nested comment""" + eq = self.assertEqual + addrs = Utils.getaddresses(['User ((nested comment)) ']) + eq(addrs[0][1], 'foo at bar.com') + def test_utils_quote_unquote(self): eq = self.assertEqual msg = Message() Modified: python/branches/release23-maint/Lib/rfc822.py ============================================================================== --- python/branches/release23-maint/Lib/rfc822.py (original) +++ python/branches/release23-maint/Lib/rfc822.py Mon May 1 05:21:25 2006 @@ -712,6 +712,7 @@ break elif allowcomments and self.field[self.pos] == '(': slist.append(self.getcomment()) + continue # have already advanced pos from getcomment elif self.field[self.pos] == '\\': quote = 1 else: Modified: python/branches/release23-maint/Lib/test/test_rfc822.py ============================================================================== --- python/branches/release23-maint/Lib/test/test_rfc822.py (original) +++ python/branches/release23-maint/Lib/test/test_rfc822.py Mon May 1 05:21:25 2006 @@ -45,6 +45,10 @@ print 'extra parsed address:', repr(n), repr(a) continue i = i + 1 + self.assertEqual(mn, n, + "Un-expected name: %s != %s" % (`mn`, `n`)) + self.assertEqual(ma, a, + "Un-expected address: %s != %s" % (`ma`, `a`)) if mn == n and ma == a: pass else: @@ -129,6 +133,12 @@ 'To: person at dom.ain (User J. Person)\n\n', [('User J. Person', 'person at dom.ain')]) + def test_doublecomment(self): + # The RFC allows comments within comments in an email addr + self.check( + 'To: person at dom.ain ((User J. Person)), John Doe \n\n', + [('User J. Person', 'person at dom.ain'), ('John Doe', 'foo at bar.com')]) + def test_twisted(self): # This one is just twisted. I don't know what the proper # result should be, but it shouldn't be to infloop, which is From buildbot at python.org Mon May 1 05:51:25 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 03:51:25 +0000 Subject: [Python-checkins] buildbot warnings in alpha Tru64 5.1 trunk Message-ID: <20060501035125.836E91E400E@bag.python.org> The Buildbot has detected a new failure of alpha Tru64 5.1 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Tru64%25205.1%2520trunk/builds/395 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: barry.warsaw Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Mon May 1 08:26:00 2006 From: python-checkins at python.org (fred.drake) Date: Mon, 1 May 2006 08:26:00 +0200 (CEST) Subject: [Python-checkins] r45832 - python/trunk/Doc/lib/libsqlite3.tex Message-ID: <20060501062600.58AD61E400E@bag.python.org> Author: fred.drake Date: Mon May 1 08:25:58 2006 New Revision: 45832 Modified: python/trunk/Doc/lib/libsqlite3.tex Log: - minor clarification in section title - markup adjustments (there is clearly much to be done in this section) Modified: python/trunk/Doc/lib/libsqlite3.tex ============================================================================== --- python/trunk/Doc/lib/libsqlite3.tex (original) +++ python/trunk/Doc/lib/libsqlite3.tex Mon May 1 08:25:58 2006 @@ -2,7 +2,7 @@ DB-API 2.0 interface for SQLite databases} \declaremodule{builtin}{sqlite3} -\modulesynopsis{A DB-API 2.0 interface based on SQLite 3.x.} +\modulesynopsis{A DB-API 2.0 implementation using SQLite 3.x.} @@ -20,7 +20,6 @@ \begin{datadesc}{PARSE_COLNAMES} - Setting this makes pysqlite parse the column name for each column it returns. It will look for a string formed [mytype] in there, and then decide that 'mytype' is the type of the column. It will try to find an entry of 'mytype' in @@ -67,7 +66,6 @@ \end{funcdesc} \begin{funcdesc}{register_converter}{typename, callable} - Registers a callable to convert a bytestring from the database into a custom Python type. The callable will be invoked for all database values that are of the type \var{typename}. Confer the parameter **detect_types** of the @@ -83,23 +81,19 @@ \end{funcdesc} - - - - -\subsection{Connection Objects \label{Connection-Objects}} +\subsection{Connection Objects \label{sqlite3-Connection-Objects}} A \class{Connection} instance has the following attributes and methods: -\member{isolation_level} - Get or set the current isolation level. None for autocommit mode or one - of "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See `5. Controlling - Transactions`_ for a more detailed explanation. +\begin{memberdesc}{isolation_level} + Get or set the current isolation level. None for autocommit mode or one + of "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See `5. Controlling + Transactions`_ for a more detailed explanation. +\end{memberdesc} \begin{methoddesc}{cursor}{\optional{cursorClass}} - The cursor method accepts a single optional parameter \var{cursorClass}. - This is a custom cursor class which must extend sqlite3.Cursor. + The cursor method accepts a single optional parameter \var{cursorClass}. + This is a custom cursor class which must extend \class{sqlite3.Cursor}. \end{methoddesc} TODO: execute* - From python-checkins at python.org Mon May 1 08:28:02 2006 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 1 May 2006 08:28:02 +0200 (CEST) Subject: [Python-checkins] r45833 - in python/trunk: Misc/NEWS Modules/_tkinter.c Message-ID: <20060501062802.DC0241E400E@bag.python.org> Author: martin.v.loewis Date: Mon May 1 08:28:01 2006 New Revision: 45833 Modified: python/trunk/Misc/NEWS python/trunk/Modules/_tkinter.c Log: Work around deadlock risk. Will backport. Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon May 1 08:28:01 2006 @@ -63,6 +63,9 @@ Extension Modules ----------------- +- Calling Tk_Init twice is refused if the first call failed as that + may deadlock. + - Patch #1191065: Fix preprocessor problems on systems where recvfrom is a macro. Modified: python/trunk/Modules/_tkinter.c ============================================================================== --- python/trunk/Modules/_tkinter.c (original) +++ python/trunk/Modules/_tkinter.c Mon May 1 08:28:01 2006 @@ -2619,21 +2619,32 @@ static PyObject * Tkapp_TkInit(PyObject *self, PyObject *args) { + static int has_failed; Tcl_Interp *interp = Tkapp_Interp(self); Tk_Window main_window; const char * _tk_exists = NULL; - PyObject *res = NULL; int err; main_window = Tk_MainWindow(interp); + /* In all current versions of Tk (including 8.4.13), Tk_Init + deadlocks on the second call when the first call failed. + To avoid the deadlock, we just refuse the second call through + a static variable. */ + if (has_failed) { + PyErr_SetString(Tkinter_TclError, + "Calling Tk_Init again after a previous call failed might deadlock"); + return NULL; + } + /* We want to guard against calling Tk_Init() multiple times */ CHECK_TCL_APPARTMENT; ENTER_TCL err = Tcl_Eval(Tkapp_Interp(self), "info exists tk_version"); ENTER_OVERLAP if (err == TCL_ERROR) { - /* XXX: shouldn't we do something with res? */ - res = Tkinter_Error(self); + /* This sets an exception, but we cannot return right + away because we need to exit the overlap first. */ + Tkinter_Error(self); } else { _tk_exists = Tkapp_Result(self); } @@ -2644,6 +2655,7 @@ if (_tk_exists == NULL || strcmp(_tk_exists, "1") != 0) { if (Tk_Init(interp) == TCL_ERROR) { PyErr_SetString(Tkinter_TclError, Tcl_GetStringResult(Tkapp_Interp(self))); + has_failed = 1; return NULL; } } From python-checkins at python.org Mon May 1 08:29:07 2006 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 1 May 2006 08:29:07 +0200 (CEST) Subject: [Python-checkins] r45834 - in python/branches/release24-maint: Misc/NEWS Modules/_tkinter.c Message-ID: <20060501062907.D773B1E400E@bag.python.org> Author: martin.v.loewis Date: Mon May 1 08:29:06 2006 New Revision: 45834 Modified: python/branches/release24-maint/Misc/NEWS python/branches/release24-maint/Modules/_tkinter.c Log: Work around deadlock risk. Modified: python/branches/release24-maint/Misc/NEWS ============================================================================== --- python/branches/release24-maint/Misc/NEWS (original) +++ python/branches/release24-maint/Misc/NEWS Mon May 1 08:29:06 2006 @@ -15,6 +15,9 @@ Extension Modules ----------------- +- Calling Tk_Init twice is refused if the first call failed as that + may deadlock. + - Patch #1191065: Fix preprocessor problems on systems where recvfrom is a macro. Modified: python/branches/release24-maint/Modules/_tkinter.c ============================================================================== --- python/branches/release24-maint/Modules/_tkinter.c (original) +++ python/branches/release24-maint/Modules/_tkinter.c Mon May 1 08:29:06 2006 @@ -2609,20 +2609,32 @@ static PyObject * Tkapp_TkInit(PyObject *self, PyObject *args) { + static int has_failed; Tcl_Interp *interp = Tkapp_Interp(self); Tk_Window main_window; const char * _tk_exists = NULL; - PyObject *res = NULL; int err; main_window = Tk_MainWindow(interp); + /* In all current versions of Tk (including 8.4.13), Tk_Init + deadlocks on the second call when the first call failed. + To avoid the deadlock, we just refuse the second call through + a static variable. */ + if (has_failed) { + PyErr_SetString(Tkinter_TclError, + "Calling Tk_Init again after a previous call failed might deadlock"); + return NULL; + } + /* We want to guard against calling Tk_Init() multiple times */ CHECK_TCL_APPARTMENT; ENTER_TCL err = Tcl_Eval(Tkapp_Interp(self), "info exists tk_version"); ENTER_OVERLAP if (err == TCL_ERROR) { - res = Tkinter_Error(self); + /* This sets an exception, but we cannot return right + away because we need to exit the overlap first. */ + Tkinter_Error(self); } else { _tk_exists = Tkapp_Result(self); } @@ -2633,6 +2645,7 @@ if (_tk_exists == NULL || strcmp(_tk_exists, "1") != 0) { if (Tk_Init(interp) == TCL_ERROR) { PyErr_SetString(Tkinter_TclError, Tcl_GetStringResult(Tkapp_Interp(self))); + has_failed = 1; return NULL; } } From fdrake at acm.org Mon May 1 08:34:09 2006 From: fdrake at acm.org (Fred L. Drake, Jr.) Date: Mon, 1 May 2006 02:34:09 -0400 Subject: [Python-checkins] r45810 - in python/trunk/Doc: Makefile.deps lib/lib.tex lib/libsqlite3.tex In-Reply-To: References: <20060429231242.6CAEC1E400D@bag.python.org> Message-ID: <200605010234.10000.fdrake@acm.org> On Sunday 30 April 2006 01:00, Georg Brandl wrote: > > +\declaremodule{builtin}{sqlite3} > > +\modulesynopsis{A DB-API 2.0 interface based on SQLite 3.x.} > > I find that confusing -- isn't it a DB-API interface to SQLite? I've adjusted that description; hopefully that's more clear now. The state of that section of the documentation is very sad. Hopefully someone in the know can at least add a link to the original documentation in a comment at the top of that file; if there's a related issue on SF, or if one of the volunteer LaTeXifers is already on it, that would be good to note as well. In the current state, I don't know where to look for documentation on the module, or whether I should even attempt to work on it any myself. -Fred -- Fred L. Drake, Jr. From buildbot at python.org Mon May 1 11:20:15 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 09:20:15 +0000 Subject: [Python-checkins] buildbot warnings in alpha Debian 2.4 Message-ID: <20060501092015.BD8781E4012@bag.python.org> The Buildbot has detected a new failure of alpha Debian 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Debian%25202.4/builds/12 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Mon May 1 11:40:49 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 09:40:49 +0000 Subject: [Python-checkins] buildbot failure in sparc Ubuntu dapper 2.4 Message-ID: <20060501094049.B177D1E4015@bag.python.org> The Buildbot has detected a new failure of sparc Ubuntu dapper 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/sparc%2520Ubuntu%2520dapper%25202.4/builds/46 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From python-checkins at python.org Mon May 1 13:18:19 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 13:18:19 +0200 (CEST) Subject: [Python-checkins] r45835 - peps/trunk/pep-0000.txt peps/trunk/pep-0314.txt peps/trunk/pep-0356.txt Message-ID: <20060501111819.3360D1E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 13:18:18 2006 New Revision: 45835 Modified: peps/trunk/pep-0000.txt peps/trunk/pep-0314.txt peps/trunk/pep-0356.txt Log: Mark PEP 314 as final Modified: peps/trunk/pep-0000.txt ============================================================================== --- peps/trunk/pep-0000.txt (original) +++ peps/trunk/pep-0000.txt Mon May 1 13:18:18 2006 @@ -86,7 +86,6 @@ I 287 reStructuredText Docstring Format Goodger S 297 Support for System Upgrades Lemburg S 302 New Import Hooks JvR, Moore - S 314 Metadata for Python Software Packages v1.1 Kuchling, Jones S 323 Copyable Iterators Martelli S 331 Locale-Independent Float/String Conversions Reis S 334 Simple Coroutines via SuspendIteration Evans @@ -155,6 +154,7 @@ SF 308 Conditional Expressions GvR, Hettinger SF 309 Partial Function Application Harris SF 311 Simplified GIL Acquisition for Extensions Hammond + SF 314 Metadata for Python Software Packages v1.1 Kuchling, Jones SF 318 Decorators for Functions and Methods Smith, et al IF 320 Python 2.4 Release Schedule Warsaw, et al SF 322 Reverse Iteration Hettinger @@ -374,7 +374,7 @@ SF 311 Simplified GIL Acquisition for Extensions Hammond SD 312 Simple Implicit Lambda Suzi, Martelli SR 313 Adding Roman Numeral Literals to Python Meyer - S 314 Metadata for Python Software Packages v1.1 Kuchling, Jones + SF 314 Metadata for Python Software Packages v1.1 Kuchling, Jones SD 315 Enhanced While Loop Carroll, Hettinger SD 316 Programming by Contract for Python Way SR 317 Eliminate Implicit Exception Instantiation Taschuk Modified: peps/trunk/pep-0314.txt ============================================================================== --- peps/trunk/pep-0314.txt (original) +++ peps/trunk/pep-0314.txt Mon May 1 13:18:18 2006 @@ -3,7 +3,7 @@ Version: $Revision$ Last-Modified: $Date$ Author: A.M. Kuchling , Richard Jones -Status: Draft +Status: Final Type: Standards Track Content-type: text/plain Created: 12-Apr-2003 Modified: peps/trunk/pep-0356.txt ============================================================================== --- peps/trunk/pep-0356.txt (original) +++ peps/trunk/pep-0356.txt Mon May 1 13:18:18 2006 @@ -52,7 +52,6 @@ PEP 308: Conditional Expressions PEP 309: Partial Function Application PEP 314: Metadata for Python Software Packages v1.1 - (should PEP 314 be marked final?) PEP 328: Absolute/Relative Imports PEP 338: Executing Modules as Scripts PEP 341: Unified try-except/try-finally to try-except-finally From python-checkins at python.org Mon May 1 14:45:03 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 14:45:03 +0200 (CEST) Subject: [Python-checkins] r45836 - python/trunk/Doc/whatsnew/whatsnew25.tex Message-ID: <20060501124503.A0FBC1E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 14:45:02 2006 New Revision: 45836 Modified: python/trunk/Doc/whatsnew/whatsnew25.tex Log: Some ElementTree fixes: import from xml, not xmlcore; fix case of module name; mention list() instead of getchildren() Modified: python/trunk/Doc/whatsnew/whatsnew25.tex ============================================================================== --- python/trunk/Doc/whatsnew/whatsnew25.tex (original) +++ python/trunk/Doc/whatsnew/whatsnew25.tex Mon May 1 14:45:02 2006 @@ -1633,7 +1633,7 @@ \subsection{The ElementTree package\label{module-etree}} A subset of Fredrik Lundh's ElementTree library for processing XML has -been added to the standard library as \module{xmlcore.etree}. The +been added to the standard library as \module{xml.etree}. The available modules are \module{ElementTree}, \module{ElementPath}, and \module{ElementInclude} from ElementTree 1.2.6. @@ -1655,7 +1655,7 @@ object and returns an \class{ElementTree} instance: \begin{verbatim} -from xmlcore.etree import ElementTree as ET +from xml.etree import ElementTree as ET tree = ET.parse('ex-1.xml') @@ -1673,7 +1673,7 @@ approaching the convenience of an XML literal: \begin{verbatim} -svg = et.XML(""" +svg = ET.XML(""" """) svg.set('height', '320px') svg.append(elem1) @@ -1687,7 +1687,7 @@ \lineii{elem[n]}{Returns n'th child element.} \lineii{elem[m:n]}{Returns list of m'th through n'th child elements.} \lineii{len(elem)}{Returns number of child elements.} - \lineii{elem.getchildren()}{Returns list of child elements.} + \lineii{list(elem)}{Returns list of child elements.} \lineii{elem.append(elem2)}{Adds \var{elem2} as a child.} \lineii{elem.insert(index, elem2)}{Inserts \var{elem2} at the specified location.} \lineii{del elem[n]}{Deletes n'th child element.} @@ -2096,7 +2096,7 @@ The author would like to thank the following people for offering suggestions, corrections and assistance with various drafts of this -article: Phillip J. Eby, Kent Johnson, Martin von~L\"owis, Gustavo -Niemeyer, James Pryor, Mike Rovner, Thomas Wouters. +article: Phillip J. Eby, Kent Johnson, Martin von~L\"owis, Fredrik Lundh, +Gustavo Niemeyer, James Pryor, Mike Rovner, Thomas Wouters. \end{document} From jimjjewett at gmail.com Mon May 1 15:19:49 2006 From: jimjjewett at gmail.com (Jim Jewett) Date: Mon, 1 May 2006 09:19:49 -0400 Subject: [Python-checkins] r45794 - peps/trunk/pep-3099.txt In-Reply-To: <20060428200600.27E9E1E400F@bag.python.org> References: <20060428200600.27E9E1E400F@bag.python.org> Message-ID: I assume this doesn't really mean a separate ASCII-String type, or even using bytes; just that everything except comments and string literals is restricted to the code points that appear in ASCII. -jJ On 4/28/06, guido.van.rossum wrote: > Author: guido.van.rossum > Date: Fri Apr 28 22:05:59 2006 > New Revision: 45794 > > Modified: > peps/trunk/pep-3099.txt > Log: > No Unicode for operators or names. > > > Modified: peps/trunk/pep-3099.txt > ============================================================================== > --- peps/trunk/pep-3099.txt (original) > +++ peps/trunk/pep-3099.txt Fri Apr 28 22:05:59 2006 > @@ -47,6 +47,12 @@ > Thread: "Adding sorting to generator comprehension", > http://mail.python.org/pipermail/python-3000/2006-April/001295.html > > +* Python won't use Unicode characters for anything except string > + literals or comments. > + > + Thread: sets in P3K? > + http://mail.python.org/pipermail/python-3000/2006-April/01474.html > + > > Builtins > ======== > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From python-checkins at python.org Mon May 1 17:14:50 2006 From: python-checkins at python.org (gerhard.haering) Date: Mon, 1 May 2006 17:14:50 +0200 (CEST) Subject: [Python-checkins] r45837 - in python/trunk/Doc/lib: libsqlite3.tex sqlite3 sqlite3/adapter_datetime.py sqlite3/adapter_point_1.py sqlite3/adapter_point_2.py sqlite3/collation_reverse.py sqlite3/complete_statement.py sqlite3/connect_db_1.py sqlite3/connect_db_2.py sqlite3/converter_point.py sqlite3/countcursors.py sqlite3/createdb.py sqlite3/execsql_fetchonerow.py sqlite3/execsql_printall_1.py sqlite3/execute_1.py sqlite3/execute_2.py sqlite3/execute_3.py sqlite3/executemany_1.py sqlite3/executemany_2.py sqlite3/executescript.py sqlite3/insert_more_people.py sqlite3/md5func.py sqlite3/mysumaggr.py sqlite3/parse_colnames.py sqlite3/pysqlite_datetime.py sqlite3/row_factory.py sqlite3/rowclass.py sqlite3/shared_cache.py sqlite3/shortcut_methods.py sqlite3/simple_tableprinter.py sqlite3/text_factory.py Message-ID: <20060501151450.4E2811E4010@bag.python.org> Author: gerhard.haering Date: Mon May 1 17:14:48 2006 New Revision: 45837 Added: python/trunk/Doc/lib/sqlite3/ python/trunk/Doc/lib/sqlite3/adapter_datetime.py python/trunk/Doc/lib/sqlite3/adapter_point_1.py python/trunk/Doc/lib/sqlite3/adapter_point_2.py python/trunk/Doc/lib/sqlite3/collation_reverse.py python/trunk/Doc/lib/sqlite3/complete_statement.py python/trunk/Doc/lib/sqlite3/connect_db_1.py python/trunk/Doc/lib/sqlite3/connect_db_2.py python/trunk/Doc/lib/sqlite3/converter_point.py python/trunk/Doc/lib/sqlite3/countcursors.py python/trunk/Doc/lib/sqlite3/createdb.py python/trunk/Doc/lib/sqlite3/execsql_fetchonerow.py python/trunk/Doc/lib/sqlite3/execsql_printall_1.py python/trunk/Doc/lib/sqlite3/execute_1.py python/trunk/Doc/lib/sqlite3/execute_2.py python/trunk/Doc/lib/sqlite3/execute_3.py python/trunk/Doc/lib/sqlite3/executemany_1.py python/trunk/Doc/lib/sqlite3/executemany_2.py python/trunk/Doc/lib/sqlite3/executescript.py python/trunk/Doc/lib/sqlite3/insert_more_people.py python/trunk/Doc/lib/sqlite3/md5func.py python/trunk/Doc/lib/sqlite3/mysumaggr.py python/trunk/Doc/lib/sqlite3/parse_colnames.py python/trunk/Doc/lib/sqlite3/pysqlite_datetime.py python/trunk/Doc/lib/sqlite3/row_factory.py python/trunk/Doc/lib/sqlite3/rowclass.py python/trunk/Doc/lib/sqlite3/shared_cache.py python/trunk/Doc/lib/sqlite3/shortcut_methods.py python/trunk/Doc/lib/sqlite3/simple_tableprinter.py python/trunk/Doc/lib/sqlite3/text_factory.py Modified: python/trunk/Doc/lib/libsqlite3.tex Log: Further integration of the documentation for the sqlite3 module. There's still quite some content to move over from the pysqlite manual, but it's a start now. Modified: python/trunk/Doc/lib/libsqlite3.tex ============================================================================== --- python/trunk/Doc/lib/libsqlite3.tex (original) +++ python/trunk/Doc/lib/libsqlite3.tex Mon May 1 17:14:48 2006 @@ -86,8 +86,8 @@ A \class{Connection} instance has the following attributes and methods: \begin{memberdesc}{isolation_level} - Get or set the current isolation level. None for autocommit mode or one - of "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See `5. Controlling + Get or set the current isolation level. None for autocommit mode or one + of "DEFERRED", "IMMEDIATE" or "EXLUSIVE". See `5. Controlling Transactions`_ for a more detailed explanation. \end{memberdesc} @@ -96,4 +96,136 @@ This is a custom cursor class which must extend \class{sqlite3.Cursor}. \end{methoddesc} -TODO: execute* +\begin{methoddesc}{execute}{sql, \optional{parameters}} +This is a nonstandard shortcut that creates an intermediate cursor object by +calling the cursor method, then calls the cursor's execute method with the +parameters given. +\end{methoddesc} + +\begin{methoddesc}{executemany}{sql, \optional{parameters}} +This is a nonstandard shortcut that creates an intermediate cursor object by +calling the cursor method, then calls the cursor's executemany method with the +parameters given. +\end{methoddesc} + +\begin{methoddesc}{executescript}{sql_script} +This is a nonstandard shortcut that creates an intermediate cursor object by +calling the cursor method, then calls the cursor's executescript method with the +parameters given. +\end{methoddesc} + +\begin{memberdesc}{row_factory} + You can change this attribute to a callable that accepts the cursor and + the original row as tuple and will return the real result row. This + way, you can implement more advanced ways of returning results, like + ones that can also access columns by name. + + Example: + + \verbatiminput{sqlite3/row_factory.py} + + If the standard tuple types don't suffice for you, and you want name-based + access to columns, you should consider setting \member{row_factory} to the + highly-optimized pysqlite2.dbapi2.Row type. It provides both + index-based and case-insensitive name-based access to columns with almost + no memory overhead. Much better than your own custom dictionary-based + approach or even a db_row based solution. +\end{memberdesc} + +\begin{memberdesc}{text_factory} + Using this attribute you can control what objects pysqlite returns for the + TEXT data type. By default, this attribute is set to ``unicode`` and + pysqlite will return Unicode objects for TEXT. If you want to return + bytestrings instead, you can set it to ``str``. + + For efficiency reasons, there's also a way to return Unicode objects only + for non-ASCII data, and bytestrings otherwise. To activate it, set this + attribute to ``pysqlite2.dbapi2.OptimizedUnicode``. + + You can also set it to any other callable that accepts a single bytestring + parameter and returns the result object. + + See the following example code for illustration: + + \verbatiminput{sqlite3/text_factory.py} +\end{memberdesc} + +\begin{memberdesc}{total_changes} + Returns the total number of database rows that have be modified, inserted, + or deleted since the database connection was opened. +\end{memberdesc} + + + + + +\subsection{Cursor Objects \label{Cursor-Objects}} + +A \class{Cursor} instance has the following attributes and methods: + +\begin{methoddesc}{execute}{sql, \optional{parameters}} + +Executes a SQL statement. The SQL statement may be parametrized (i. e. +placeholders instead of SQL literals). The sqlite3 module supports two kinds of +placeholders: question marks (qmark style) and named placeholders (named +style). + +This example shows how to use parameters with qmark style: + + \verbatiminput{sqlite3/execute_1.py} + +This example shows how to use the named style: + + \verbatiminput{sqlite3/execute_2.py} + + \method{execute} will only execute a single SQL statement. If you try to + execute more than one statement with it, it will raise a Warning. Use + \method{executescript} if want to execute multiple SQL statements with one + call. +\end{methoddesc} + + +\begin{methoddesc}{executemany}{sql, seq_of_parameters} +Executes a SQL command against all parameter sequences or mappings found in the +sequence \var{sql}. The \module{sqlite3} module also allows +to use an iterator yielding parameters instead of a sequence. + +\verbatiminput{sqlite3/executemany_1.py} + +Here's a shorter example using a generator: + +\verbatiminput{sqlite3/executemany_2.py} +\end{methoddesc} + +\begin{methoddesc}{executescript}{sql_script} + +This is a nonstandard convenience method for executing multiple SQL statements +at once. It issues a COMMIT statement before, then executes the SQL script it +gets as a parameter. + +\var{sql_script} can be a bytestring or a Unicode string. + +Example: + +\verbatiminput{sqlite3/executescript.py} +\end{methoddesc} + +\begin{memberdesc}{rowcount} + Although the Cursors of the \module{sqlite3} module implement this + attribute, the database engine's own support for the determination of "rows + affected"/"rows selected" is quirky. + + For \code{SELECT} statements, \member{rowcount} is always None because we cannot + determine the number of rows a query produced until all rows were fetched. + + For \code{DELETE} statements, SQLite reports \member{rowcount} as 0 if you make a + \code{DELETE FROM table} without any condition. + + For \method{executemany} statements, pysqlite sums up the number of + modifications into \member{rowcount}. + + As required by the Python DB API Spec, the \member{rowcount} attribute "is -1 + in case no executeXX() has been performed on the cursor or the rowcount + of the last operation is not determinable by the interface". +\end{memberdesc} + Added: python/trunk/Doc/lib/sqlite3/adapter_datetime.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/adapter_datetime.py Mon May 1 17:14:48 2006 @@ -0,0 +1,14 @@ +import sqlite3 +import datetime, time + +def adapt_datetime(ts): + return time.mktime(ts.timetuple()) + +sqlite3.register_adapter(datetime.datetime, adapt_datetime) + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +now = datetime.datetime.now() +cur.execute("select ?", (now,)) +print cur.fetchone()[0] Added: python/trunk/Doc/lib/sqlite3/adapter_point_1.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/adapter_point_1.py Mon May 1 17:14:48 2006 @@ -0,0 +1,17 @@ +import sqlite3 + +class Point(object): + def __init__(self, x, y): + self.x, self.y = x, y + + def __conform__(self, protocol): + if protocol is sqlite3.PrepareProtocol: + return "%f;%f" % (self.x, self.y) + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +p = Point(4.0, -3.2) +cur.execute("select ?", (p,)) +print cur.fetchone()[0] + Added: python/trunk/Doc/lib/sqlite3/adapter_point_2.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/adapter_point_2.py Mon May 1 17:14:48 2006 @@ -0,0 +1,18 @@ +import sqlite3 + +class Point(object): + def __init__(self, x, y): + self.x, self.y = x, y + +def adapt_point(point): + return "%f;%f" % (point.x, point.y) + +sqlite3.register_adapter(Point, adapt_point) + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +p = Point(4.0, -3.2) +cur.execute("select ?", (p,)) +print cur.fetchone()[0] + Added: python/trunk/Doc/lib/sqlite3/collation_reverse.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/collation_reverse.py Mon May 1 17:14:48 2006 @@ -0,0 +1,15 @@ +import sqlite3 + +def collate_reverse(string1, string2): + return -cmp(string1, string2) + +con = sqlite3.connect(":memory:") +con.create_collation("reverse", collate_reverse) + +cur = con.cursor() +cur.execute("create table test(x)") +cur.executemany("insert into test(x) values (?)", [("a",), ("b",)]) +cur.execute("select x from test order by x collate reverse") +for row in cur: + print row +con.close() Added: python/trunk/Doc/lib/sqlite3/complete_statement.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/complete_statement.py Mon May 1 17:14:48 2006 @@ -0,0 +1,30 @@ +# A minimal SQLite shell for experiments + +import sqlite3 + +con = sqlite3.connect(":memory:") +con.isolation_level = None +cur = con.cursor() + +buffer = "" + +print "Enter your SQL commands to execute in sqlite3." +print "Enter a blank line to exit." + +while True: + line = raw_input() + if line == "": + break + buffer += line + if sqlite3.complete_statement(buffer): + try: + buffer = buffer.strip() + cur.execute(buffer) + + if buffer.lstrip().upper().startswith("SELECT"): + print cur.fetchall() + except sqlite3.Error, e: + print "An error occured:", e.args[0] + buffer = "" + +con.close() Added: python/trunk/Doc/lib/sqlite3/connect_db_1.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/connect_db_1.py Mon May 1 17:14:48 2006 @@ -0,0 +1,3 @@ +import sqlite3 + +con = sqlite3.connect("mydb") Added: python/trunk/Doc/lib/sqlite3/connect_db_2.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/connect_db_2.py Mon May 1 17:14:48 2006 @@ -0,0 +1,3 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") Added: python/trunk/Doc/lib/sqlite3/converter_point.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/converter_point.py Mon May 1 17:14:48 2006 @@ -0,0 +1,47 @@ +import sqlite3 + +class Point(object): + def __init__(self, x, y): + self.x, self.y = x, y + + def __repr__(self): + return "(%f;%f)" % (self.x, self.y) + +def adapt_point(point): + return "%f;%f" % (point.x, point.y) + +def convert_point(s): + x, y = map(float, s.split(";")) + return Point(x, y) + +# Register the adapter +sqlite3.register_adapter(Point, adapt_point) + +# Register the converter +sqlite3.register_converter("point", convert_point) + +p = Point(4.0, -3.2) + +######################### +# 1) Using declared types +con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES) +cur = con.cursor() +cur.execute("create table test(p point)") + +cur.execute("insert into test(p) values (?)", (p,)) +cur.execute("select p from test") +print "with declared types:", cur.fetchone()[0] +cur.close() +con.close() + +####################### +# 1) Using column names +con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) +cur = con.cursor() +cur.execute("create table test(p)") + +cur.execute("insert into test(p) values (?)", (p,)) +cur.execute('select p as "p [point]" from test') +print "with column names:", cur.fetchone()[0] +cur.close() +con.close() Added: python/trunk/Doc/lib/sqlite3/countcursors.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/countcursors.py Mon May 1 17:14:48 2006 @@ -0,0 +1,15 @@ +import sqlite3 + +class CountCursorsConnection(sqlite3.Connection): + def __init__(self, *args, **kwargs): + sqlite3.Connection.__init__(self, *args, **kwargs) + self.numcursors = 0 + + def cursor(self, *args, **kwargs): + self.numcursors += 1 + return sqlite3.Connection.cursor(self, *args, **kwargs) + +con = sqlite3.connect(":memory:", factory=CountCursorsConnection) +cur1 = con.cursor() +cur2 = con.cursor() +print con.numcursors Added: python/trunk/Doc/lib/sqlite3/createdb.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/createdb.py Mon May 1 17:14:48 2006 @@ -0,0 +1,28 @@ +# Not referenced from the documentation, but builds the database file the other +# code snippets expect. + +import sqlite3 +import os + +DB_FILE = "mydb" + +if os.path.exists(DB_FILE): + os.remove(DB_FILE) + +con = sqlite3.connect(DB_FILE) +cur = con.cursor() +cur.execute(""" + create table people + ( + name_last varchar(20), + age integer + ) + """) + +cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)") +cur.execute("insert into people (name_last, age) values ('Putin', 51)") + +con.commit() + +cur.close() +con.close() Added: python/trunk/Doc/lib/sqlite3/execsql_fetchonerow.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/execsql_fetchonerow.py Mon May 1 17:14:48 2006 @@ -0,0 +1,17 @@ +import sqlite3 + +con = sqlite3.connect("mydb") + +cur = con.cursor() +SELECT = "select name_last, age from people order by age, name_last" + +# 1. Iterate over the rows available from the cursor, unpacking the +# resulting sequences to yield their elements (name_last, age): +cur.execute(SELECT) +for (name_last, age) in cur: + print '%s is %d years old.' % (name_last, age) + +# 2. Equivalently: +cur.execute(SELECT) +for row in cur: + print '%s is %d years old.' % (row[0], row[1]) Added: python/trunk/Doc/lib/sqlite3/execsql_printall_1.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/execsql_printall_1.py Mon May 1 17:14:48 2006 @@ -0,0 +1,13 @@ +import sqlite3 + +# Create a connection to the database file "mydb": +con = sqlite3.connect("mydb") + +# Get a Cursor object that operates in the context of Connection con: +cur = con.cursor() + +# Execute the SELECT statement: +cur.execute("select * from people order by age") + +# Retrieve all rows as a sequence and print that sequence: +print cur.fetchall() Added: python/trunk/Doc/lib/sqlite3/execute_1.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/execute_1.py Mon May 1 17:14:48 2006 @@ -0,0 +1,11 @@ +import sqlite3 + +con = sqlite3.connect("mydb") + +cur = con.cursor() + +who = "Yeltsin" +age = 72 + +cur.execute("select name_last, age from people where name_last=? and age=?", (who, age)) +print cur.fetchone() Added: python/trunk/Doc/lib/sqlite3/execute_2.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/execute_2.py Mon May 1 17:14:48 2006 @@ -0,0 +1,13 @@ +import sqlite3 + +con = sqlite3.connect("mydb") + +cur = con.cursor() + +who = "Yeltsin" +age = 72 + +cur.execute("select name_last, age from people where name_last=:who and age=:age", + {"who": who, "age": age}) +print cur.fetchone() + Added: python/trunk/Doc/lib/sqlite3/execute_3.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/execute_3.py Mon May 1 17:14:48 2006 @@ -0,0 +1,14 @@ +import sqlite3 + +con = sqlite3.connect("mydb") + +cur = con.cursor() + +who = "Yeltsin" +age = 72 + +cur.execute("select name_last, age from people where name_last=:who and age=:age", + locals()) +print cur.fetchone() + + Added: python/trunk/Doc/lib/sqlite3/executemany_1.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/executemany_1.py Mon May 1 17:14:48 2006 @@ -0,0 +1,24 @@ +import sqlite3 + +class IterChars: + def __init__(self): + self.count = ord('a') + + def __iter__(self): + return self + + def next(self): + if self.count > ord('z'): + raise StopIteration + self.count += 1 + return (chr(self.count - 1),) # this is a 1-tuple + +con = sqlite3.connect(":memory:") +cur = con.cursor() +cur.execute("create table characters(c)") + +theIter = IterChars() +cur.executemany("insert into characters(c) values (?)", theIter) + +cur.execute("select c from characters") +print cur.fetchall() Added: python/trunk/Doc/lib/sqlite3/executemany_2.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/executemany_2.py Mon May 1 17:14:48 2006 @@ -0,0 +1,15 @@ +import sqlite3 + +def char_generator(): + import string + for c in string.letters[:26]: + yield (c,) + +con = sqlite3.connect(":memory:") +cur = con.cursor() +cur.execute("create table characters(c)") + +cur.executemany("insert into characters(c) values (?)", char_generator()) + +cur.execute("select c from characters") +print cur.fetchall() Added: python/trunk/Doc/lib/sqlite3/executescript.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/executescript.py Mon May 1 17:14:48 2006 @@ -0,0 +1,24 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") +cur = con.cursor() +cur.executescript(""" + create table person( + firstname, + lastname, + age + ); + + create table book( + title, + author, + published + ); + + insert into book(title, author, published) + values ( + 'Dirk Gently''s Holistic Detective Agency + 'Douglas Adams', + 1987 + ); + """) Added: python/trunk/Doc/lib/sqlite3/insert_more_people.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/insert_more_people.py Mon May 1 17:14:48 2006 @@ -0,0 +1,17 @@ +import sqlite3 + +con = sqlite3.connect("mydb") + +cur = con.cursor() + +newPeople = ( + ('Lebed' , 53), + ('Zhirinovsky' , 57), + ) + +for person in newPeople: + cur.execute("insert into people (name_last, age) values (?, ?)", person) + +# The changes will not be saved unless the transaction is committed explicitly: +con.commit() + Added: python/trunk/Doc/lib/sqlite3/md5func.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/md5func.py Mon May 1 17:14:48 2006 @@ -0,0 +1,11 @@ +import sqlite3 +import md5 + +def md5sum(t): + return md5.md5(t).hexdigest() + +con = sqlite3.connect(":memory:") +con.create_function("md5", 1, md5sum) +cur = con.cursor() +cur.execute("select md5(?)", ("foo",)) +print cur.fetchone()[0] Added: python/trunk/Doc/lib/sqlite3/mysumaggr.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/mysumaggr.py Mon May 1 17:14:48 2006 @@ -0,0 +1,20 @@ +import sqlite3 + +class MySum: + def __init__(self): + self.count = 0 + + def step(self, value): + self.count += value + + def finalize(self): + return self.count + +con = sqlite3.connect(":memory:") +con.create_aggregate("mysum", 1, MySum) +cur = con.cursor() +cur.execute("create table test(i)") +cur.execute("insert into test(i) values (1)") +cur.execute("insert into test(i) values (2)") +cur.execute("select mysum(i) from test") +print cur.fetchone()[0] Added: python/trunk/Doc/lib/sqlite3/parse_colnames.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/parse_colnames.py Mon May 1 17:14:48 2006 @@ -0,0 +1,8 @@ +import sqlite3 +import datetime + +con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) +cur = con.cursor() +cur.execute('select ? as "x [timestamp]"', (datetime.datetime.now(),)) +dt = cur.fetchone()[0] +print dt, type(dt) Added: python/trunk/Doc/lib/sqlite3/pysqlite_datetime.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/pysqlite_datetime.py Mon May 1 17:14:48 2006 @@ -0,0 +1,20 @@ +import sqlite3 +import datetime + +con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES) +cur = con.cursor() +cur.execute("create table test(d date, ts timestamp)") + +today = datetime.date.today() +now = datetime.datetime.now() + +cur.execute("insert into test(d, ts) values (?, ?)", (today, now)) +cur.execute("select d, ts from test") +row = cur.fetchone() +print today, "=>", row[0], type(row[0]) +print now, "=>", row[1], type(row[1]) + +cur.execute('select current_date as "d [date]", current_timestamp as "ts [timestamp]"') +row = cur.fetchone() +print "current_date", row[0], type(row[0]) +print "current_timestamp", row[1], type(row[1]) Added: python/trunk/Doc/lib/sqlite3/row_factory.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/row_factory.py Mon May 1 17:14:48 2006 @@ -0,0 +1,13 @@ +import sqlite3 + +def dict_factory(cursor, row): + d = {} + for idx, col in enumerate(cursor.description): + d[col[0]] = row[idx] + return d + +con = sqlite3.connect(":memory:") +con.row_factory = dict_factory +cur = con.cursor() +cur.execute("select 1 as a") +print cur.fetchone()["a"] Added: python/trunk/Doc/lib/sqlite3/rowclass.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/rowclass.py Mon May 1 17:14:48 2006 @@ -0,0 +1,12 @@ +import sqlite3 + +con = sqlite3.connect("mydb") +con.row_factory = sqlite3.Row + +cur = con.cursor() +cur.execute("select name_last, age from people") +for row in cur: + assert row[0] == row["name_last"] + assert row["name_last"] == row["nAmE_lAsT"] + assert row[1] == row["age"] + assert row[1] == row["AgE"] Added: python/trunk/Doc/lib/sqlite3/shared_cache.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/shared_cache.py Mon May 1 17:14:48 2006 @@ -0,0 +1,6 @@ +import sqlite3 + +# The shared cache is only available in SQLite versions 3.3.3 or later +# See the SQLite documentaton for details. + +sqlite3.enable_shared_cache(True) Added: python/trunk/Doc/lib/sqlite3/shortcut_methods.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/shortcut_methods.py Mon May 1 17:14:48 2006 @@ -0,0 +1,22 @@ +import sqlite3 + +persons = [ + ("Hugo", "Boss"), + ("Calvin", "Klein") + ] + +con = sqlite3.connect(":memory:") + +# Create the table +con.execute("create table person(firstname, lastname)") + +# Fill the table +con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) + +# Print the table contents +for row in con.execute("select firstname, lastname from person"): + print row + +# Using a dummy WHERE clause to not let SQLite take the shortcut table deletes. +print "I just deleted", con.execute("delete from person where 1=1").rowcount, "rows" + Added: python/trunk/Doc/lib/sqlite3/simple_tableprinter.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/simple_tableprinter.py Mon May 1 17:14:48 2006 @@ -0,0 +1,26 @@ +import sqlite3 + +FIELD_MAX_WIDTH = 20 +TABLE_NAME = 'people' +SELECT = 'select * from %s order by age, name_last' % TABLE_NAME + +con = sqlite3.connect("mydb") + +cur = con.cursor() +cur.execute(SELECT) + +# Print a header. +for fieldDesc in cur.description: + print fieldDesc[0].ljust(FIELD_MAX_WIDTH) , +print # Finish the header with a newline. +print '-' * 78 + +# For each row, print the value of each field left-justified within +# the maximum possible width of that field. +fieldIndices = range(len(cur.description)) +for row in cur: + for fieldIndex in fieldIndices: + fieldValue = str(row[fieldIndex]) + print fieldValue.ljust(FIELD_MAX_WIDTH) , + + print # Finish the row with a newline. Added: python/trunk/Doc/lib/sqlite3/text_factory.py ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/sqlite3/text_factory.py Mon May 1 17:14:48 2006 @@ -0,0 +1,43 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +# Create the table +con.execute("create table person(lastname, firstname)") + +AUSTRIA = u"\xd6sterreich" + +# by default, rows are returned as Unicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert row[0] == AUSTRIA + +# but we can make pysqlite always return bytestrings ... +con.text_factory = str +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == str +# the bytestrings will be encoded in UTF-8, unless you stored garbage in the +# database ... +assert row[0] == AUSTRIA.encode("utf-8") + +# we can also implement a custom text_factory ... +# here we implement one that will ignore Unicode characters that cannot be +# decoded from UTF-8 +con.text_factory = lambda x: unicode(x, "utf-8", "ignore") +cur.execute("select ?", ("this is latin1 and would normally create errors" + u"\xe4\xf6\xfc".encode("latin1"),)) +row = cur.fetchone() +assert type(row[0]) == unicode + +# pysqlite offers a builtin optimized text_factory that will return bytestring +# objects, if the data is in ASCII only, and otherwise return unicode objects +con.text_factory = sqlite3.OptimizedUnicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == unicode + +cur.execute("select ?", ("Germany",)) +row = cur.fetchone() +assert type(row[0]) == str + From anthony at interlink.com.au Mon May 1 17:28:43 2006 From: anthony at interlink.com.au (Anthony Baxter) Date: Tue, 2 May 2006 01:28:43 +1000 Subject: [Python-checkins] r45837 - in python/trunk/Doc/lib: libsqlite3.tex sqlite3 sqlite3/adapter_datetime.py sqlite3/adapter_point_1.py sqlite3/adapter_point_2.py sqlite3/collation_reverse.py sqlite3/complete_statement.py sqlite3/connect_db_1.py sq In-Reply-To: <20060501151450.4E2811E4010@bag.python.org> References: <20060501151450.4E2811E4010@bag.python.org> Message-ID: <200605020128.46791.anthony@interlink.com.au> On Tuesday 02 May 2006 01:14, gerhard.haering wrote: > Author: gerhard.haering > Date: Mon May 1 17:14:48 2006 > New Revision: 45837 The example code in this should go into a directory in Demo/, surely, rather than in the standard library? -- Anthony Baxter It's never too late to have a happy childhood. From gh at ghaering.de Mon May 1 17:55:26 2006 From: gh at ghaering.de (=?ISO-8859-1?Q?Gerhard_H=E4ring?=) Date: Mon, 01 May 2006 17:55:26 +0200 Subject: [Python-checkins] r45837 - in python/trunk/Doc/lib: libsqlite3.tex sqlite3 sqlite3/adapter_datetime.py sqlite3/adapter_point_1.py sqlite3/adapter_point_2.py sqlite3/collation_reverse.py sqlite3/complete_statement.py sqlite3/connect_db_1.py sq In-Reply-To: <200605020128.46791.anthony@interlink.com.au> References: <20060501151450.4E2811E4010@bag.python.org> <200605020128.46791.anthony@interlink.com.au> Message-ID: <44562F6E.9020908@ghaering.de> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Anthony Baxter wrote: > On Tuesday 02 May 2006 01:14, gerhard.haering wrote: > >>Author: gerhard.haering >>Date: Mon May 1 17:14:48 2006 >>New Revision: 45837 > > The example code in this should go into a directory in Demo/, surely, > rather than in the standard library? I checked it in in a subdirectory of Docs/lib because it is referenced from the module documentation. Moving everything into Demo/ is another possibility. As you can see, it's a currently a kind of "porting" of the pysqlite docs. I'm of course open to other and better approaches (but I like examples in documentation. And the reason for moving the examples to external .py files in pysqlite was so that they can be tested if they actually work). - -- Gerhard -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFEVi9udIO4ozGCH14RAngeAJ9Kf7D/si6S9gDMFjbaJm0fDVFZUwCdHIcc Qoz6ccJ/TLZsZgHoKJNVFSk= =NTxj -----END PGP SIGNATURE----- From python-checkins at python.org Mon May 1 17:56:05 2006 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 1 May 2006 17:56:05 +0200 (CEST) Subject: [Python-checkins] r45838 - python/trunk/Lib/msilib/text.py python/trunk/Lib/msilib/uisample.py Message-ID: <20060501155605.8B1861E4014@bag.python.org> Author: martin.v.loewis Date: Mon May 1 17:56:03 2006 New Revision: 45838 Added: python/trunk/Lib/msilib/text.py - copied, changed from r45823, python/trunk/Lib/msilib/uisample.py Removed: python/trunk/Lib/msilib/uisample.py Log: Rename uisample to text, drop all non-text tables. Copied: python/trunk/Lib/msilib/text.py (from r45823, python/trunk/Lib/msilib/uisample.py) ============================================================================== --- python/trunk/Lib/msilib/uisample.py (original) +++ python/trunk/Lib/msilib/text.py Mon May 1 17:56:03 2006 @@ -1,398 +1,4 @@ import msilib,os;dirname=os.path.dirname(__file__) -AdminExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'InstallFiles', None, 4000), -(u'InstallAdminPackage', None, 3900), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -] - -AdminUISequence = [ -(u'AdminWelcomeDlg', None, 1230), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'ExecuteAction', None, 1300), -(u'ExitDialog', None, -1), -(u'FatalError', None, -3), -(u'PrepareDlg', None, 140), -(u'ProgressDlg', None, 1280), -(u'UserExit', None, -2), -] - -AdvtExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'CreateShortcuts', None, 4500), -(u'PublishComponents', None, 6200), -(u'PublishFeatures', None, 6300), -(u'PublishProduct', None, 6400), -(u'RegisterClassInfo', None, 4600), -(u'RegisterExtensionInfo', None, 4700), -(u'RegisterMIMEInfo', None, 4900), -(u'RegisterProgIdInfo', None, 4800), -] - -BBControl = [ -] - -Billboard = [ -] - -Binary = [ -(u'bannrbmp', msilib.Binary(os.path.join(dirname,"bannrbmp.bin"))), -(u'completi', msilib.Binary(os.path.join(dirname,"completi.bin"))), -(u'custicon', msilib.Binary(os.path.join(dirname,"custicon.bin"))), -(u'dlgbmp', msilib.Binary(os.path.join(dirname,"dlgbmp.bin"))), -(u'exclamic', msilib.Binary(os.path.join(dirname,"exclamic.bin"))), -(u'info', msilib.Binary(os.path.join(dirname,"info.bin"))), -(u'insticon', msilib.Binary(os.path.join(dirname,"insticon.bin"))), -(u'New', msilib.Binary(os.path.join(dirname,"New.bin"))), -(u'removico', msilib.Binary(os.path.join(dirname,"removico.bin"))), -(u'repairic', msilib.Binary(os.path.join(dirname,"repairic.bin"))), -(u'Up', msilib.Binary(os.path.join(dirname,"Up.bin"))), -] - -CheckBox = [ -] - -Property = [ -(u'BannerBitmap', u'bannrbmp'), -(u'IAgree', u'No'), -(u'ProductID', u'none'), -(u'ARPHELPLINK', u'http://www.microsoft.com/management'), -(u'ButtonText_Back', u'< &Back'), -(u'ButtonText_Browse', u'Br&owse'), -(u'ButtonText_Cancel', u'Cancel'), -(u'ButtonText_Exit', u'&Exit'), -(u'ButtonText_Finish', u'&Finish'), -(u'ButtonText_Ignore', u'&Ignore'), -(u'ButtonText_Install', u'&Install'), -(u'ButtonText_Next', u'&Next >'), -(u'ButtonText_No', u'&No'), -(u'ButtonText_OK', u'OK'), -(u'ButtonText_Remove', u'&Remove'), -(u'ButtonText_Repair', u'&Repair'), -(u'ButtonText_Reset', u'&Reset'), -(u'ButtonText_Resume', u'&Resume'), -(u'ButtonText_Retry', u'&Retry'), -(u'ButtonText_Return', u'&Return'), -(u'ButtonText_Yes', u'&Yes'), -(u'CompleteSetupIcon', u'completi'), -(u'ComponentDownload', u'ftp://anonymous at microsoft.com/components/'), -(u'CustomSetupIcon', u'custicon'), -(u'DefaultUIFont', u'DlgFont8'), -(u'DialogBitmap', u'dlgbmp'), -(u'DlgTitleFont', u'{&DlgFontBold8}'), -(u'ErrorDialog', u'ErrorDlg'), -(u'ExclamationIcon', u'exclamic'), -(u'InfoIcon', u'info'), -(u'InstallerIcon', u'insticon'), -(u'INSTALLLEVEL', u'3'), -(u'InstallMode', u'Typical'), -(u'PIDTemplate', u'12345<###-%%%%%%%>@@@@@'), -#(u'ProductLanguage', u'1033'), -(u'Progress1', u'Installing'), -(u'Progress2', u'installs'), -(u'PROMPTROLLBACKCOST', u'P'), -(u'RemoveIcon', u'removico'), -(u'RepairIcon', u'repairic'), -(u'Setup', u'Setup'), -(u'ShowUserRegistrationDlg', u'1'), -(u'Wizard', u'Setup Wizard'), -] - -ComboBox = [ -] - -Control = [ -(u'AdminWelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'AdminWelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminWelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'AdminWelcomeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'AdminWelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'AdminWelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminWelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'ExitDialog', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'ExitDialog', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ExitDialog', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'ExitDialog', u'Description', u'Text', 135, 70, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'ExitDialog', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Completing the [ProductName] [Wizard]', None, None), -(u'ExitDialog', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'ExitDialog', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'FatalError', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'FatalError', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'FatalError', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'FatalError', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}[ProductName] [Wizard] ended prematurely', None, None), -(u'FatalError', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'FatalError', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'FatalError', u'Description1', u'Text', 135, 70, 220, 40, 196611, None, u'[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.', None, None), -(u'FatalError', u'Description2', u'Text', 135, 115, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'PrepareDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Cancel', None), -(u'PrepareDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'PrepareDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'PrepareDlg', u'Description', u'Text', 135, 70, 220, 20, 196611, None, u'Please wait while the [Wizard] prepares to guide you through the installation.', None, None), -(u'PrepareDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'PrepareDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', None, None), -(u'PrepareDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', None, None), -(u'PrepareDlg', u'ActionData', u'Text', 135, 125, 220, 30, 196611, None, None, None, None), -(u'PrepareDlg', u'ActionText', u'Text', 135, 100, 220, 20, 196611, None, None, None, None), -(u'ProgressDlg', u'Text', u'Text', 35, 65, 300, 20, 3, None, u'Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes.', None, None), -(u'ProgressDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'ProgressDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'ProgressDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ProgressDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'ProgressDlg', u'Title', u'Text', 20, 15, 200, 15, 196611, None, u'[DlgTitleFont][Progress1] [ProductName]', None, None), -(u'ProgressDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'ProgressDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'ProgressDlg', u'ActionText', u'Text', 70, 100, 265, 10, 3, None, None, None, None), -(u'ProgressDlg', u'ProgressBar', u'ProgressBar', 35, 115, 300, 10, 65537, None, u'Progress done', None, None), -(u'ProgressDlg', u'StatusLabel', u'Text', 35, 100, 35, 10, 3, None, u'Status:', None, None), -(u'UserExit', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'UserExit', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'UserExit', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'UserExit', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}[ProductName] [Wizard] was interrupted', None, None), -(u'UserExit', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'UserExit', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'UserExit', u'Description1', u'Text', 135, 70, 220, 40, 196611, None, u'[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.', None, None), -(u'UserExit', u'Description2', u'Text', 135, 115, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'AdminBrowseDlg', u'Up', u'PushButton', 298, 55, 19, 19, 3670019, None, u'Up', u'NewFolder', u'Up One Level|'), -(u'AdminBrowseDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'PathEdit', None), -(u'AdminBrowseDlg', u'PathEdit', u'PathEdit', 84, 202, 261, 17, 3, u'TARGETDIR', None, u'OK', None), -(u'AdminBrowseDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminBrowseDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminBrowseDlg', u'Cancel', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'ComboLabel', None), -(u'AdminBrowseDlg', u'ComboLabel', u'Text', 25, 58, 44, 10, 3, None, u'&Look in:', u'DirectoryCombo', None), -(u'AdminBrowseDlg', u'DirectoryCombo', u'DirectoryCombo', 70, 55, 220, 80, 458755, u'TARGETDIR', None, u'Up', None), -(u'AdminBrowseDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Browse to the destination folder', None, None), -(u'AdminBrowseDlg', u'DirectoryList', u'DirectoryList', 25, 83, 320, 110, 7, u'TARGETDIR', None, u'PathLabel', None), -(u'AdminBrowseDlg', u'PathLabel', u'Text', 25, 205, 59, 10, 3, None, u'&Folder name:', u'BannerBitmap', None), -(u'AdminBrowseDlg', u'NewFolder', u'PushButton', 325, 55, 19, 19, 3670019, None, u'New', u'DirectoryList', u'Create A New Folder|'), -(u'AdminBrowseDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'Cancel', None), -(u'AdminBrowseDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Change current destination folder', None, None), -(u'AdminInstallPointDlg', u'Text', u'Text', 25, 80, 320, 10, 3, None, u'&Enter a new network location or click Browse to browse to one.', u'PathEdit', None), -(u'AdminInstallPointDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Text', None), -(u'AdminInstallPointDlg', u'PathEdit', u'PathEdit', 25, 93, 320, 18, 3, u'TARGETDIR', None, u'Browse', None), -(u'AdminInstallPointDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminInstallPointDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminInstallPointDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'AdminInstallPointDlg', u'Description', u'Text', 25, 20, 280, 20, 196611, None, u'Please specify a network location for the server image of [ProductName] product', None, None), -(u'AdminInstallPointDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Network Location', None, None), -(u'AdminInstallPointDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminInstallPointDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'AdminInstallPointDlg', u'Browse', u'PushButton', 289, 119, 56, 17, 3, None, u'[ButtonText_Browse]', u'Back', None), -(u'AdminRegistrationDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OrganizationLabel', None), -(u'AdminRegistrationDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminRegistrationDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminRegistrationDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'AdminRegistrationDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please enter your company information', None, None), -(u'AdminRegistrationDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Company Information', None, None), -(u'AdminRegistrationDlg', u'Back', u'PushButton', 180, 243, 56, 17, 65539, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminRegistrationDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'AdminRegistrationDlg', u'OrganizationLabel', u'Text', 45, 71, 285, 30, 3, None, u'&Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]:', u'OrganizationEdit', None), -(u'AdminRegistrationDlg', u'CDKeyEdit', u'MaskedEdit', 45, 143, 250, 16, 3, u'PIDKEY', u'[PIDTemplate]', u'Back', None), -(u'AdminRegistrationDlg', u'CDKeyLabel', u'Text', 45, 130, 50, 10, 3, None, u'CD &Key:', u'CDKeyEdit', None), -(u'AdminRegistrationDlg', u'OrganizationEdit', u'Edit', 45, 105, 220, 18, 3, u'COMPANYNAME', u'{80}', u'CDKeyLabel', None), -(u'BrowseDlg', u'Up', u'PushButton', 298, 55, 19, 19, 3670019, None, u'Up', u'NewFolder', u'Up One Level|'), -(u'BrowseDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'PathEdit', None), -(u'BrowseDlg', u'PathEdit', u'PathEdit', 84, 202, 261, 18, 11, u'_BrowseProperty', None, u'OK', None), -(u'BrowseDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'BrowseDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'BrowseDlg', u'Cancel', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'ComboLabel', None), -(u'BrowseDlg', u'ComboLabel', u'Text', 25, 58, 44, 10, 3, None, u'&Look in:', u'DirectoryCombo', None), -(u'BrowseDlg', u'DirectoryCombo', u'DirectoryCombo', 70, 55, 220, 80, 393227, u'_BrowseProperty', None, u'Up', None), -(u'BrowseDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Browse to the destination folder', None, None), -(u'BrowseDlg', u'DirectoryList', u'DirectoryList', 25, 83, 320, 110, 15, u'_BrowseProperty', None, u'PathLabel', None), -(u'BrowseDlg', u'PathLabel', u'Text', 25, 205, 59, 10, 3, None, u'&Folder name:', u'BannerBitmap', None), -(u'BrowseDlg', u'NewFolder', u'PushButton', 325, 55, 19, 19, 3670019, None, u'New', u'DirectoryList', u'Create A New Folder|'), -(u'BrowseDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'Cancel', None), -(u'BrowseDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Change current destination folder', None, None), -(u'CancelDlg', u'Text', u'Text', 48, 15, 194, 30, 3, None, u'Are you sure you want to cancel [ProductName] installation?', None, None), -(u'CancelDlg', u'Icon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[InfoIcon]', None, u'Information icon|'), -(u'CancelDlg', u'No', u'PushButton', 132, 57, 56, 17, 3, None, u'[ButtonText_No]', u'Yes', None), -(u'CancelDlg', u'Yes', u'PushButton', 72, 57, 56, 17, 3, None, u'[ButtonText_Yes]', u'No', None), -(u'CustomizeDlg', u'Text', u'Text', 25, 55, 320, 20, 3, None, u'Click on the icons in the tree below to change the way features will be installed.', None, None), -(u'CustomizeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Tree', None), -(u'CustomizeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'CustomizeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'CustomizeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'CustomizeDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Select the way you want features to be installed.', None, None), -(u'CustomizeDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Custom Setup', None, None), -(u'CustomizeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'CustomizeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'CustomizeDlg', u'Browse', u'PushButton', 304, 200, 56, 17, 3, None, u'[ButtonText_Browse]', u'Reset', None), -(u'CustomizeDlg', u'Tree', u'SelectionTree', 25, 85, 175, 95, 7, u'_BrowseProperty', u'Tree of selections', u'Browse', None), -(u'CustomizeDlg', u'Box', u'GroupBox', 210, 81, 140, 98, 1, None, None, None, None), -(u'CustomizeDlg', u'Reset', u'PushButton', 42, 243, 56, 17, 3, None, u'[ButtonText_Reset]', u'DiskCost', None), -(u'CustomizeDlg', u'DiskCost', u'PushButton', 111, 243, 56, 17, 3, None, u'Disk &Usage', u'Back', None), -(u'CustomizeDlg', u'ItemDescription', u'Text', 215, 90, 131, 30, 3, None, u'Multiline description of the currently selected item.', None, None), -(u'CustomizeDlg', u'ItemSize', u'Text', 215, 130, 131, 45, 3, None, u'The size of the currently selected item.', None, None), -(u'CustomizeDlg', u'Location', u'Text', 75, 200, 215, 20, 3, None, u"", None, None), -(u'CustomizeDlg', u'LocationLabel', u'Text', 25, 200, 50, 10, 3, None, u'Location:', None, None), -(u'DiskCostDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'DiskCostDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OK', None), -(u'DiskCostDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'DiskCostDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'DiskCostDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'The disk space required for the installation of the selected features.', None, None), -(u'DiskCostDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'BannerBitmap', None), -(u'DiskCostDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Disk Space Requirements', None, None), -(u'DiskCostDlg', u'VolumeList', u'VolumeCostList', 20, 100, 330, 120, 393223, None, u'{120}{70}{70}{70}{70}', None, None), -(u'ErrorDlg', u'Y', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Yes]', None, None), -(u'ErrorDlg', u'A', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Cancel]', None, None), -(u'ErrorDlg', u'C', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Cancel]', None, None), -(u'ErrorDlg', u'ErrorIcon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[InfoIcon]', None, u'Information icon|'), -(u'ErrorDlg', u'ErrorText', u'Text', 48, 15, 205, 60, 3, None, u'Information text', None, None), -(u'ErrorDlg', u'I', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Ignore]', None, None), -(u'ErrorDlg', u'N', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_No]', None, None), -(u'ErrorDlg', u'O', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_OK]', None, None), -(u'ErrorDlg', u'R', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Retry]', None, None), -(u'FilesInUse', u'Text', u'Text', 20, 55, 330, 30, 3, None, u'The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.', None, None), -(u'FilesInUse', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Retry', None), -(u'FilesInUse', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'FilesInUse', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'FilesInUse', u'Description', u'Text', 20, 23, 280, 20, 196611, None, u'Some files that need to be updated are currently in use.', None, None), -(u'FilesInUse', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Files in Use', None, None), -(u'FilesInUse', u'Retry', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Retry]', u'Ignore', None), -(u'FilesInUse', u'Exit', u'PushButton', 166, 243, 56, 17, 3, None, u'[ButtonText_Exit]', u'BannerBitmap', None), -(u'FilesInUse', u'Ignore', u'PushButton', 235, 243, 56, 17, 3, None, u'[ButtonText_Ignore]', u'Exit', None), -(u'FilesInUse', u'List', u'ListBox', 20, 87, 330, 130, 7, u'FileInUseProcess', None, None, None), -(u'LicenseAgreementDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'AgreementText', None), -(u'LicenseAgreementDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'LicenseAgreementDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'LicenseAgreementDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'LicenseAgreementDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please read the following license agreement carefully', None, None), -(u'LicenseAgreementDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]End-User License Agreement', None, None), -(u'LicenseAgreementDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'LicenseAgreementDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'LicenseAgreementDlg', u'AgreementText', u'ScrollableText', 20, 60, 330, 120, 7, None, u'{\\rtf1\\ansi\\ansicpg1252\\deff0\\deftab720{\\fonttbl{\\f0\\froman\\fprq2 Times New Roman;}}{\\colortbl\\red0\\green0\\blue0;} \\deflang1033\\horzdoc{\\*\\fchars }{\\*\\lchars }\\pard\\plain\\f0\\fs20 \\par }', u'Buttons', None), -(u'LicenseAgreementDlg', u'Buttons', u'RadioButtonGroup', 20, 187, 330, 40, 3, u'IAgree', None, u'Back', None), -(u'MaintenanceTypeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'ChangeLabel', None), -(u'MaintenanceTypeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'MaintenanceTypeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'MaintenanceTypeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'MaintenanceTypeDlg', u'Description', u'Text', 25, 23, 280, 20, 196611, None, u'Select the operation you wish to perform.', None, None), -(u'MaintenanceTypeDlg', u'Title', u'Text', 15, 6, 240, 15, 196611, None, u'[DlgTitleFont]Modify, Repair or Remove installation', None, None), -(u'MaintenanceTypeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'MaintenanceTypeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'MaintenanceTypeDlg', u'ChangeLabel', u'Text', 105, 65, 100, 10, 3, None, u'[DlgTitleFont]&Modify', u'ChangeButton', None), -(u'MaintenanceTypeDlg', u'ChangeButton', u'PushButton', 50, 65, 38, 38, 5767171, None, u'[CustomSetupIcon]', u'RepairLabel', u'Modify Installation|'), -(u'MaintenanceTypeDlg', u'RepairLabel', u'Text', 105, 114, 100, 10, 3, None, u'[DlgTitleFont]Re&pair', u'RepairButton', None), -(u'MaintenanceTypeDlg', u'ChangeText', u'Text', 105, 78, 230, 20, 3, None, u'Allows users to change the way features are installed.', None, None), -(u'MaintenanceTypeDlg', u'RemoveButton', u'PushButton', 50, 163, 38, 38, 5767171, None, u'[RemoveIcon]', u'Back', u'Remove Installation|'), -(u'MaintenanceTypeDlg', u'RemoveLabel', u'Text', 105, 163, 100, 10, 3, None, u'[DlgTitleFont]&Remove', u'RemoveButton', None), -(u'MaintenanceTypeDlg', u'RemoveText', u'Text', 105, 176, 230, 20, 3, None, u'Removes [ProductName] from your computer.', None, None), -(u'MaintenanceTypeDlg', u'RepairButton', u'PushButton', 50, 114, 38, 38, 5767171, None, u'[RepairIcon]', u'RemoveLabel', u'Repair Installation|'), -(u'MaintenanceTypeDlg', u'RepairText', u'Text', 105, 127, 230, 30, 3, None, u'Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.', None, None), -(u'MaintenanceWelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'MaintenanceWelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'MaintenanceWelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'MaintenanceWelcomeDlg', u'Description', u'Text', 135, 70, 220, 60, 196611, None, u'The [Wizard] will allow you to change the way [ProductName] features are installed on your computer or even to remove [ProductName] from your computer. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'MaintenanceWelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'MaintenanceWelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'MaintenanceWelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'OutOfDiskDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'OutOfDiskDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OK', None), -(u'OutOfDiskDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'OutOfDiskDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'OutOfDiskDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'Disk space required for the installation exceeds available disk space.', None, None), -(u'OutOfDiskDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'BannerBitmap', None), -(u'OutOfDiskDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Out of Disk Space', None, None), -(u'OutOfDiskDlg', u'VolumeList', u'VolumeCostList', 20, 100, 330, 120, 393223, None, u'{120}{70}{70}{70}{70}', None, None), -(u'OutOfRbDiskDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'OutOfRbDiskDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'No', None), -(u'OutOfRbDiskDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'OutOfRbDiskDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'OutOfRbDiskDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'Disk space required for the installation exceeds available disk space.', None, None), -(u'OutOfRbDiskDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Out of Disk Space', None, None), -(u'OutOfRbDiskDlg', u'No', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_No]', u'Yes', None), -(u'OutOfRbDiskDlg', u'Yes', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Yes]', u'BannerBitmap', None), -(u'OutOfRbDiskDlg', u'VolumeList', u'VolumeCostList', 20, 140, 330, 80, 4587527, None, u'{120}{70}{70}{70}{70}', None, None), -(u'OutOfRbDiskDlg', u'Text2', u'Text', 20, 94, 330, 40, 3, None, u"Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.", None, None), -(u'ResumeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'ResumeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ResumeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'ResumeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard].', None, None), -(u'ResumeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Resuming the [ProductName] [Wizard]', None, None), -(u'ResumeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Install', None), -(u'ResumeDlg', u'Install', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Install]', u'Cancel', None), -(u'SetupTypeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'TypicalLabel', None), -(u'SetupTypeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'SetupTypeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'SetupTypeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'SetupTypeDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Choose the setup type that best suits your needs', None, None), -(u'SetupTypeDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Choose Setup Type', None, None), -(u'SetupTypeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'SetupTypeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'SetupTypeDlg', u'TypicalLabel', u'Text', 105, 65, 100, 10, 3, None, u'[DlgTitleFont]&Typical', u'TypicalButton', None), -(u'SetupTypeDlg', u'CompleteButton', u'PushButton', 50, 171, 38, 38, 5767171, None, u'[CompleteSetupIcon]', u'Back', u'Complete Installation|'), -(u'SetupTypeDlg', u'CompleteLabel', u'Text', 105, 171, 100, 10, 3, None, u'[DlgTitleFont]C&omplete', u'CompleteButton', None), -(u'SetupTypeDlg', u'CompleteText', u'Text', 105, 184, 230, 20, 3, None, u'All program features will be installed. (Requires most disk space)', None, None), -(u'SetupTypeDlg', u'CustomButton', u'PushButton', 50, 118, 38, 38, 5767171, None, u'[CustomSetupIcon]', u'CompleteLabel', u'Custom Installation|'), -(u'SetupTypeDlg', u'CustomLabel', u'Text', 105, 118, 100, 10, 3, None, u'[DlgTitleFont]C&ustom', u'CustomButton', None), -(u'SetupTypeDlg', u'CustomText', u'Text', 105, 131, 230, 30, 3, None, u'Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users.', None, None), -(u'SetupTypeDlg', u'TypicalButton', u'PushButton', 50, 65, 38, 38, 5767171, None, u'[InstallerIcon]', u'CustomLabel', u'Typical Installation|'), -(u'SetupTypeDlg', u'TypicalText', u'Text', 105, 78, 230, 20, 3, None, u'Installs the most common program features. Recommended for most users.', None, None), -(u'UserRegistrationDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'NameLabel', None), -(u'UserRegistrationDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'UserRegistrationDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'UserRegistrationDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'UserRegistrationDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please enter your customer information', None, None), -(u'UserRegistrationDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Customer Information', None, None), -(u'UserRegistrationDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'UserRegistrationDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'UserRegistrationDlg', u'OrganizationLabel', u'Text', 45, 110, 100, 15, 3, None, u'&Organization:', u'OrganizationEdit', None), -(u'UserRegistrationDlg', u'CDKeyEdit', u'MaskedEdit', 45, 159, 250, 16, 3, u'PIDKEY', u'[PIDTemplate]', u'Back', None), -(u'UserRegistrationDlg', u'CDKeyLabel', u'Text', 45, 147, 50, 10, 3, None, u'CD &Key:', u'CDKeyEdit', None), -(u'UserRegistrationDlg', u'OrganizationEdit', u'Edit', 45, 122, 220, 18, 3, u'COMPANYNAME', u'{80}', u'CDKeyLabel', None), -(u'UserRegistrationDlg', u'NameLabel', u'Text', 45, 73, 100, 15, 3, None, u'&User Name:', u'NameEdit', None), -(u'UserRegistrationDlg', u'NameEdit', u'Edit', 45, 85, 220, 18, 3, u'USERNAME', u'{80}', u'OrganizationLabel', None), -(u'VerifyReadyDlg', u'Text', u'Text', 25, 70, 320, 20, 3, None, u'Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyReadyDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyReadyDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyReadyDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyReadyDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyReadyDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'The [Wizard] is ready to begin the [InstallMode] installation', None, None), -(u'VerifyReadyDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Ready to Install', None, None), -(u'VerifyReadyDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Install', None), -(u'VerifyReadyDlg', u'Install', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Install]', u'Cancel', None), -(u'VerifyRemoveDlg', u'Text', u'Text', 25, 70, 320, 30, 3, None, u'Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyRemoveDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyRemoveDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyRemoveDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyRemoveDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyRemoveDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'You have chosen to remove the program from your computer.', None, None), -(u'VerifyRemoveDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Remove [ProductName]', None, None), -(u'VerifyRemoveDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Remove', None), -(u'VerifyRemoveDlg', u'Remove', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Remove]', u'Cancel', None), -(u'VerifyRepairDlg', u'Text', u'Text', 25, 70, 320, 30, 3, None, u'Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyRepairDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyRepairDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyRepairDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyRepairDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyRepairDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'The [Wizard] is ready to begin the repair of [ProductName].', None, None), -(u'VerifyRepairDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Repair [ProductName]', None, None), -(u'VerifyRepairDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Repair', None), -(u'VerifyRepairDlg', u'Repair', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Repair]', u'Cancel', None), -(u'WaitForCostingDlg', u'Text', u'Text', 48, 15, 194, 30, 3, None, u'Please wait while the installer finishes determining your disk space requirements.', None, None), -(u'WaitForCostingDlg', u'Icon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[ExclamationIcon]', None, u'Exclamation icon|'), -(u'WaitForCostingDlg', u'Return', u'PushButton', 102, 57, 56, 17, 3, None, u'[ButtonText_Return]', None, None), -(u'WelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'WelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'WelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'WelcomeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'WelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'WelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'WelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -] - -ListBox = [ -] ActionText = [ (u'InstallValidate', u'Validating install', None), @@ -467,294 +73,6 @@ (u'UnpublishProduct', u'Unpublishing product information', None), ] -ControlCondition = [ -(u'CustomizeDlg', u'Browse', u'Hide', u'Installed'), -(u'CustomizeDlg', u'Location', u'Hide', u'Installed'), -(u'CustomizeDlg', u'LocationLabel', u'Hide', u'Installed'), -(u'LicenseAgreementDlg', u'Next', u'Disable', u'IAgree <> "Yes"'), -(u'LicenseAgreementDlg', u'Next', u'Enable', u'IAgree = "Yes"'), -] - -ControlEvent = [ -(u'AdminWelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminWelcomeDlg', u'Next', u'NewDialog', u'AdminRegistrationDlg', u'1', 2), -(u'AdminWelcomeDlg', u'Next', u'[InstallMode]', u'Server Image', u'1', 1), -(u'ExitDialog', u'Finish', u'EndDialog', u'Return', u'1', None), -(u'FatalError', u'Finish', u'EndDialog', u'Exit', u'1', None), -(u'PrepareDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'ProgressDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'UserExit', u'Finish', u'EndDialog', u'Exit', u'1', None), -(u'AdminBrowseDlg', u'Up', u'DirectoryListUp', u'0', u'1', None), -(u'AdminBrowseDlg', u'Cancel', u'Reset', u'0', u'1', 1), -(u'AdminBrowseDlg', u'Cancel', u'EndDialog', u'Return', u'1', 2), -(u'AdminBrowseDlg', u'NewFolder', u'DirectoryListNew', u'0', u'1', None), -(u'AdminBrowseDlg', u'OK', u'EndDialog', u'Return', u'1', 2), -(u'AdminBrowseDlg', u'OK', u'SetTargetPath', u'TARGETDIR', u'1', 1), -(u'AdminInstallPointDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminInstallPointDlg', u'Back', u'NewDialog', u'AdminRegistrationDlg', u'1', None), -(u'AdminInstallPointDlg', u'Next', u'SetTargetPath', u'TARGETDIR', u'1', 1), -(u'AdminInstallPointDlg', u'Next', u'NewDialog', u'VerifyReadyDlg', u'1', 2), -(u'AdminInstallPointDlg', u'Browse', u'SpawnDialog', u'AdminBrowseDlg', u'1', None), -(u'AdminRegistrationDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminRegistrationDlg', u'Back', u'NewDialog', u'AdminWelcomeDlg', u'1', None), -(u'AdminRegistrationDlg', u'Next', u'NewDialog', u'AdminInstallPointDlg', u'ProductID', 2), -(u'AdminRegistrationDlg', u'Next', u'ValidateProductID', u'0', u'0', 1), -(u'BrowseDlg', u'Up', u'DirectoryListUp', u'0', u'1', None), -(u'BrowseDlg', u'Cancel', u'Reset', u'0', u'1', 1), -(u'BrowseDlg', u'Cancel', u'EndDialog', u'Return', u'1', 2), -(u'BrowseDlg', u'NewFolder', u'DirectoryListNew', u'0', u'1', None), -(u'BrowseDlg', u'OK', u'EndDialog', u'Return', u'1', 2), -(u'BrowseDlg', u'OK', u'SetTargetPath', u'[_BrowseProperty]', u'1', 1), -(u'CancelDlg', u'No', u'EndDialog', u'Return', u'1', None), -(u'CancelDlg', u'Yes', u'EndDialog', u'Exit', u'1', None), -(u'CustomizeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'CustomizeDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'InstallMode = "Change"', None), -(u'CustomizeDlg', u'Back', u'NewDialog', u'SetupTypeDlg', u'InstallMode = "Custom"', None), -(u'CustomizeDlg', u'Next', u'NewDialog', u'VerifyReadyDlg', u'1', None), -(u'CustomizeDlg', u'Browse', u'SelectionBrowse', u'BrowseDlg', u'1', None), -(u'CustomizeDlg', u'Reset', u'Reset', u'0', u'1', None), -(u'CustomizeDlg', u'DiskCost', u'SpawnDialog', u'DiskCostDlg', u'1', 2), -(u'DiskCostDlg', u'OK', u'EndDialog', u'Return', u'1', None), -(u'ErrorDlg', u'Y', u'EndDialog', u'ErrorYes', u'1', None), -(u'ErrorDlg', u'A', u'EndDialog', u'ErrorAbort', u'1', None), -(u'ErrorDlg', u'C', u'EndDialog', u'ErrorCancel', u'1', None), -(u'ErrorDlg', u'I', u'EndDialog', u'ErrorIgnore', u'1', None), -(u'ErrorDlg', u'N', u'EndDialog', u'ErrorNo', u'1', None), -(u'ErrorDlg', u'O', u'EndDialog', u'ErrorOk', u'1', None), -(u'ErrorDlg', u'R', u'EndDialog', u'ErrorRetry', u'1', None), -(u'FilesInUse', u'Retry', u'EndDialog', u'Retry', u'1', None), -(u'FilesInUse', u'Exit', u'EndDialog', u'Exit', u'1', None), -(u'FilesInUse', u'Ignore', u'EndDialog', u'Ignore', u'1', None), -(u'LicenseAgreementDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'LicenseAgreementDlg', u'Back', u'NewDialog', u'WelcomeDlg', u'1', None), -(u'LicenseAgreementDlg', u'Next', u'NewDialog', u'SetupTypeDlg', u'IAgree = "Yes" AND ShowUserRegistrationDlg <> 1', 3), -(u'LicenseAgreementDlg', u'Next', u'NewDialog', u'UserRegistrationDlg', u'IAgree = "Yes" AND ShowUserRegistrationDlg = 1', 1), -(u'LicenseAgreementDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 2), -(u'MaintenanceTypeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'MaintenanceTypeDlg', u'Back', u'NewDialog', u'MaintenanceWelcomeDlg', u'1', None), -(u'MaintenanceTypeDlg', u'ChangeButton', u'NewDialog', u'CustomizeDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[InstallMode]', u'Change', u'1', 1), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[Progress1]', u'Changing', u'1', 2), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[Progress2]', u'changes', u'1', 3), -(u'MaintenanceTypeDlg', u'RemoveButton', u'NewDialog', u'VerifyRemoveDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[InstallMode]', u'Remove', u'1', 1), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[Progress1]', u'Removing', u'1', 2), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[Progress2]', u'removes', u'1', 3), -(u'MaintenanceTypeDlg', u'RepairButton', u'NewDialog', u'VerifyRepairDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'RepairButton', u'[InstallMode]', u'Repair', u'1', 1), -(u'MaintenanceTypeDlg', u'RepairButton', u'[Progress1]', u'Repairing', u'1', 2), -(u'MaintenanceTypeDlg', u'RepairButton', u'[Progress2]', u'repairs', u'1', 3), -(u'MaintenanceWelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'MaintenanceWelcomeDlg', u'Next', u'NewDialog', u'MaintenanceTypeDlg', u'1', 2), -(u'MaintenanceWelcomeDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 1), -(u'OutOfDiskDlg', u'OK', u'EndDialog', u'Return', u'1', None), -(u'OutOfRbDiskDlg', u'No', u'EndDialog', u'Return', u'1', None), -(u'OutOfRbDiskDlg', u'Yes', u'EndDialog', u'Return', u'1', 2), -(u'OutOfRbDiskDlg', u'Yes', u'EnableRollback', u'False', u'1', 1), -(u'ResumeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'ResumeDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'ResumeDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 2), -(u'ResumeDlg', u'Install', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 6), -(u'ResumeDlg', u'Install', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 3), -(u'ResumeDlg', u'Install', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 1), -(u'ResumeDlg', u'Install', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'SetupTypeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'SetupTypeDlg', u'Back', u'NewDialog', u'LicenseAgreementDlg', u'ShowUserRegistrationDlg <> 1', None), -(u'SetupTypeDlg', u'Back', u'NewDialog', u'UserRegistrationDlg', u'ShowUserRegistrationDlg = 1', None), -(u'SetupTypeDlg', u'CompleteButton', u'NewDialog', u'VerifyReadyDlg', u'1', 3), -(u'SetupTypeDlg', u'CompleteButton', u'[InstallMode]', u'Complete', u'1', 1), -(u'SetupTypeDlg', u'CompleteButton', u'SetInstallLevel', u'1000', u'1', 2), -(u'SetupTypeDlg', u'CustomButton', u'NewDialog', u'CustomizeDlg', u'1', 2), -(u'SetupTypeDlg', u'CustomButton', u'[InstallMode]', u'Custom', u'1', 1), -(u'SetupTypeDlg', u'TypicalButton', u'NewDialog', u'VerifyReadyDlg', u'1', 3), -(u'SetupTypeDlg', u'TypicalButton', u'[InstallMode]', u'Typical', u'1', 1), -(u'SetupTypeDlg', u'TypicalButton', u'SetInstallLevel', u'3', u'1', 2), -(u'UserRegistrationDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'UserRegistrationDlg', u'Back', u'NewDialog', u'LicenseAgreementDlg', u'1', None), -(u'UserRegistrationDlg', u'Next', u'NewDialog', u'SetupTypeDlg', u'ProductID', 3), -(u'UserRegistrationDlg', u'Next', u'ValidateProductID', u'0', u'0', 1), -(u'UserRegistrationDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 2), -(u'VerifyReadyDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'AdminInstallPointDlg', u'InstallMode = "Server Image"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'CustomizeDlg', u'InstallMode = "Custom" OR InstallMode = "Change"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'InstallMode = "Repair"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'SetupTypeDlg', u'InstallMode = "Typical" OR InstallMode = "Complete"', None), -(u'VerifyReadyDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 3), -(u'VerifyReadyDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 1), -(u'VerifyReadyDlg', u'Install', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 5), -(u'VerifyReadyDlg', u'Install', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 2), -(u'VerifyReadyDlg', u'Install', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'VerifyRemoveDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyRemoveDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'1', None), -(u'VerifyRemoveDlg', u'Remove', u'Remove', u'All', u'OutOfDiskSpace <> 1', 1), -(u'VerifyRemoveDlg', u'Remove', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'VerifyRemoveDlg', u'Remove', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 2), -(u'VerifyRemoveDlg', u'Remove', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 6), -(u'VerifyRemoveDlg', u'Remove', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 3), -(u'VerifyRemoveDlg', u'Remove', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'VerifyRepairDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyRepairDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'1', None), -(u'VerifyRepairDlg', u'Repair', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'VerifyRepairDlg', u'Repair', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 3), -(u'VerifyRepairDlg', u'Repair', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 7), -(u'VerifyRepairDlg', u'Repair', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 4), -(u'VerifyRepairDlg', u'Repair', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 6), -(u'VerifyRepairDlg', u'Repair', u'Reinstall', u'All', u'OutOfDiskSpace <> 1', 2), -(u'VerifyRepairDlg', u'Repair', u'ReinstallMode', u'ecmus', u'OutOfDiskSpace <> 1', 1), -(u'WaitForCostingDlg', u'Return', u'EndDialog', u'Exit', u'1', None), -(u'WelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'WelcomeDlg', u'Next', u'NewDialog', u'LicenseAgreementDlg', u'1', None), -] - -Dialog = [ -(u'AdminWelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -(u'ExitDialog', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'FatalError', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'PrepareDlg', 50, 50, 370, 270, 1, u'[ProductName] [Setup]', u'Cancel', u'Cancel', u'Cancel'), -(u'ProgressDlg', 50, 50, 370, 270, 1, u'[ProductName] [Setup]', u'Cancel', u'Cancel', u'Cancel'), -(u'UserExit', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'AdminBrowseDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'PathEdit', u'OK', u'Cancel'), -(u'AdminInstallPointDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Text', u'Next', u'Cancel'), -(u'AdminRegistrationDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OrganizationLabel', u'Next', u'Cancel'), -(u'BrowseDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'PathEdit', u'OK', u'Cancel'), -(u'CancelDlg', 50, 10, 260, 85, 3, u'[ProductName] [Setup]', u'No', u'No', u'No'), -(u'CustomizeDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Tree', u'Next', u'Cancel'), -(u'DiskCostDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OK', u'OK', u'OK'), -(u'ErrorDlg', 50, 10, 270, 105, 65539, u'Installer Information', u'ErrorText', None, None), -(u'FilesInUse', 50, 50, 370, 270, 19, u'[ProductName] [Setup]', u'Retry', u'Retry', u'Retry'), -(u'LicenseAgreementDlg', 50, 50, 370, 270, 3, u'[ProductName] License Agreement', u'Buttons', u'Next', u'Cancel'), -(u'MaintenanceTypeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'ChangeLabel', u'ChangeButton', u'Cancel'), -(u'MaintenanceWelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -(u'OutOfDiskDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OK', u'OK', u'OK'), -(u'OutOfRbDiskDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'No', u'No', u'No'), -(u'ResumeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Install', u'Install', u'Cancel'), -(u'SetupTypeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'TypicalLabel', u'TypicalButton', u'Cancel'), -(u'UserRegistrationDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'NameLabel', u'Next', u'Cancel'), -(u'VerifyReadyDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Install', u'Install', u'Cancel'), -(u'VerifyRemoveDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Back', u'Back', u'Cancel'), -(u'VerifyRepairDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Repair', u'Repair', u'Cancel'), -(u'WaitForCostingDlg', 50, 10, 260, 85, 3, u'[ProductName] [Setup]', u'Return', u'Return', u'Return'), -(u'WelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -] - -EventMapping = [ -(u'PrepareDlg', u'ActionData', u'ActionData', u'Text'), -(u'PrepareDlg', u'ActionText', u'ActionText', u'Text'), -(u'ProgressDlg', u'ActionText', u'ActionText', u'Text'), -(u'ProgressDlg', u'ProgressBar', u'SetProgress', u'Progress'), -(u'AdminBrowseDlg', u'DirectoryCombo', u'IgnoreChange', u'IgnoreChange'), -(u'BrowseDlg', u'DirectoryCombo', u'IgnoreChange', u'IgnoreChange'), -(u'CustomizeDlg', u'Next', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'Reset', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'DiskCost', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'ItemDescription', u'SelectionDescription', u'Text'), -(u'CustomizeDlg', u'ItemSize', u'SelectionSize', u'Text'), -(u'CustomizeDlg', u'Location', u'SelectionPath', u'Text'), -(u'CustomizeDlg', u'Location', u'SelectionPathOn', u'Visible'), -(u'CustomizeDlg', u'LocationLabel', u'SelectionPathOn', u'Visible'), -] - -InstallExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'InstallFiles', None, 4000), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'CreateShortcuts', None, 4500), -(u'PublishComponents', None, 6200), -(u'PublishFeatures', None, 6300), -(u'PublishProduct', None, 6400), -(u'RegisterClassInfo', None, 4600), -(u'RegisterExtensionInfo', None, 4700), -(u'RegisterMIMEInfo', None, 4900), -(u'RegisterProgIdInfo', None, 4800), -(u'ValidateProductID', None, 700), -(u'AllocateRegistrySpace', u'NOT Installed', 1550), -(u'AppSearch', None, 400), -(u'BindImage', None, 4300), -(u'CCPSearch', u'NOT Installed', 500), -(u'CreateFolders', None, 3700), -(u'DeleteServices', u'VersionNT', 2000), -(u'DuplicateFiles', None, 4210), -(u'FindRelatedProducts', None, 200), -(u'InstallODBC', None, 5400), -(u'InstallServices', u'VersionNT', 5800), -(u'LaunchConditions', None, 100), -(u'MigrateFeatureStates', None, 1200), -(u'MoveFiles', None, 3800), -(u'PatchFiles', None, 4090), -(u'ProcessComponents', None, 1600), -(u'RegisterComPlus', None, 5700), -(u'RegisterFonts', None, 5300), -(u'RegisterProduct', None, 6100), -(u'RegisterTypeLibraries', None, 5500), -(u'RegisterUser', None, 6000), -(u'RemoveDuplicateFiles', None, 3400), -(u'RemoveEnvironmentStrings', None, 3300), -(u'RemoveExistingProducts', None, 6700), -(u'RemoveFiles', None, 3500), -(u'RemoveFolders', None, 3600), -(u'RemoveIniValues', None, 3100), -(u'RemoveODBC', None, 2400), -(u'RemoveRegistryValues', None, 2600), -(u'RemoveShortcuts', None, 3200), -(u'RMCCPSearch', u'NOT Installed', 600), -(u'SelfRegModules', None, 5600), -(u'SelfUnregModules', None, 2200), -(u'SetODBCFolders', None, 1100), -(u'StartServices', u'VersionNT', 5900), -(u'StopServices', u'VersionNT', 1900), -(u'UnpublishComponents', None, 1700), -(u'UnpublishFeatures', None, 1800), -(u'UnregisterClassInfo', None, 2700), -(u'UnregisterComPlus', None, 2100), -(u'UnregisterExtensionInfo', None, 2800), -(u'UnregisterFonts', None, 2500), -(u'UnregisterMIMEInfo', None, 3000), -(u'UnregisterProgIdInfo', None, 2900), -(u'UnregisterTypeLibraries', None, 2300), -(u'WriteEnvironmentStrings', None, 5200), -(u'WriteIniValues', None, 5100), -(u'WriteRegistryValues', None, 5000), -] - -InstallUISequence = [ -#(u'FileCost', None, 900), -#(u'CostInitialize', None, 800), -#(u'CostFinalize', None, 1000), -#(u'ExecuteAction', None, 1300), -#(u'ExitDialog', None, -1), -#(u'FatalError', None, -3), -(u'PrepareDlg', None, 140), -(u'ProgressDlg', None, 1280), -#(u'UserExit', None, -2), -(u'MaintenanceWelcomeDlg', u'Installed AND NOT RESUME AND NOT Preselected', 1250), -(u'ResumeDlg', u'Installed AND (RESUME OR Preselected)', 1240), -(u'WelcomeDlg', u'NOT Installed', 1230), -#(u'AppSearch', None, 400), -#(u'CCPSearch', u'NOT Installed', 500), -#(u'FindRelatedProducts', None, 200), -#(u'LaunchConditions', None, 100), -#(u'MigrateFeatureStates', None, 1200), -#(u'RMCCPSearch', u'NOT Installed', 600), -] - -ListView = [ -] - -RadioButton = [ -(u'IAgree', 1, u'Yes', 5, 0, 250, 15, u'{\\DlgFont8}I &accept the terms in the License Agreement', None), -(u'IAgree', 2, u'No', 5, 20, 250, 15, u'{\\DlgFont8}I &do not accept the terms in the License Agreement', None), -] - -TextStyle = [ -(u'DlgFont8', u'Tahoma', 8, None, 0), -(u'DlgFontBold8', u'Tahoma', 8, None, 1), -(u'VerdanaBold13', u'Verdana', 13, None, 1), -] - UIText = [ (u'AbsentPath', None), (u'bytes', u'bytes'), @@ -808,592 +126,4 @@ (u'VolumeCostVolume', u'Volume'), ] -_Validation = [ -(u'AdminExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdminExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdminExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AdminUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdminUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdminUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'Condition', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Expression evaluated to determine if Level in the Feature table is to change.'), -(u'Condition', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Reference to a Feature entry in Feature table.'), -(u'Condition', u'Level', u'N', 0, 32767, None, None, None, None, u'New selection Level to set in Feature table if Condition evaluates to TRUE.'), -(u'AdvtExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdvtExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdvtExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'BBControl', u'Type', u'N', None, None, None, None, u'Identifier', None, u'The type of the control.'), -(u'BBControl', u'BBControl', u'N', None, None, None, None, u'Identifier', None, u'Name of the control. This name must be unique within a billboard, but can repeat on different billboard.'), -(u'BBControl', u'Billboard_', u'N', None, None, u'Billboard', 1, u'Identifier', None, u'External key to the Billboard table, name of the billboard.'), -(u'BBControl', u'X', u'N', 0, 32767, None, None, None, None, u'Horizontal coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'BBControl', u'Y', u'N', 0, 32767, None, None, None, None, u'Vertical coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'BBControl', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the control.'), -(u'BBControl', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the control.'), -(u'BBControl', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this control.'), -(u'BBControl', u'Text', u'Y', None, None, None, None, u'Text', None, u'A string used to set the initial text contained within a control (if appropriate).'), -(u'Billboard', u'Action', u'Y', None, None, None, None, u'Identifier', None, u'The name of an action. The billboard is displayed during the progress messages received from this action.'), -(u'Billboard', u'Billboard', u'N', None, None, None, None, u'Identifier', None, u'Name of the billboard.'), -(u'Billboard', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'An external key to the Feature Table. The billboard is shown only if this feature is being installed.'), -(u'Billboard', u'Ordering', u'Y', 0, 32767, None, None, None, None, u'A positive integer. If there is more than one billboard corresponding to an action they will be shown in the order defined by this column.'), -(u'Binary', u'Name', u'N', None, None, None, None, u'Identifier', None, u'Unique key identifying the binary data.'), -(u'Binary', u'Data', u'N', None, None, None, None, u'Binary', None, u'The unformatted binary data.'), -(u'CheckBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to the item.'), -(u'CheckBox', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value string associated with the item.'), -(u'Property', u'Property', u'N', None, None, None, None, u'Identifier', None, u'Name of property, uppercase if settable by launcher or loader.'), -(u'Property', u'Value', u'N', None, None, None, None, u'Text', None, u'String value for property. Never null or empty.'), -(u'ComboBox', u'Text', u'Y', None, None, None, None, u'Formatted', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ComboBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same combobox.'), -(u'ComboBox', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ComboBox', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list.\tThe integers do not have to be consecutive.'), -(u'Control', u'Type', u'N', None, None, None, None, u'Identifier', None, u'The type of the control.'), -(u'Control', u'X', u'N', 0, 32767, None, None, None, None, u'Horizontal coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'Control', u'Y', u'N', 0, 32767, None, None, None, None, u'Vertical coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'Control', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the control.'), -(u'Control', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the control.'), -(u'Control', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this control.'), -(u'Control', u'Text', u'Y', None, None, None, None, u'Formatted', None, u'A string used to set the initial text contained within a control (if appropriate).'), -(u'Control', u'Property', u'Y', None, None, None, None, u'Identifier', None, u'The name of a defined property to be linked to this control. '), -(u'Control', u'Control', u'N', None, None, None, None, u'Identifier', None, u'Name of the control. This name must be unique within a dialog, but can repeat on different dialogs. '), -(u'Control', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'External key to the Dialog table, name of the dialog.'), -(u'Control', u'Control_Next', u'Y', None, None, u'Control', 2, u'Identifier', None, u'The name of an other control on the same dialog. This link defines the tab order of the controls. The links have to form one or more cycles!'), -(u'Control', u'Help', u'Y', None, None, None, None, u'Text', None, u'The help strings used with the button. The text is optional. '), -(u'Icon', u'Name', u'N', None, None, None, None, u'Identifier', None, u'Primary key. Name of the icon file.'), -(u'Icon', u'Data', u'N', None, None, None, None, u'Binary', None, u'Binary stream. The binary icon data in PE (.DLL or .EXE) or icon (.ICO) format.'), -(u'ListBox', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ListBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same listbox.'), -(u'ListBox', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ListBox', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'ActionText', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to be described.'), -(u'ActionText', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description displayed in progress dialog and log when action is executing.'), -(u'ActionText', u'Template', u'Y', None, None, None, None, u'Template', None, u'Optional localized format template used to format action data records for display during action execution.'), -(u'ControlCondition', u'Action', u'N', None, None, None, None, None, u'Default;Disable;Enable;Hide;Show', u'The desired action to be taken on the specified control.'), -(u'ControlCondition', u'Condition', u'N', None, None, None, None, u'Condition', None, u'A standard conditional statement that specifies under which conditions the action should be triggered.'), -(u'ControlCondition', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the dialog.'), -(u'ControlCondition', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control.'), -(u'ControlEvent', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'A standard conditional statement that specifies under which conditions an event should be triggered.'), -(u'ControlEvent', u'Ordering', u'Y', 0, 2147483647, None, None, None, None, u'An integer used to order several events tied to the same control. Can be left blank.'), -(u'ControlEvent', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the dialog.'), -(u'ControlEvent', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control'), -(u'ControlEvent', u'Event', u'N', None, None, None, None, u'Formatted', None, u'An identifier that specifies the type of the event that should take place when the user interacts with control specified by the first two entries.'), -(u'ControlEvent', u'Argument', u'N', None, None, None, None, u'Formatted', None, u'A value to be used as a modifier when triggering a particular event.'), -(u'Dialog', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the dialog.'), -(u'Dialog', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the dialog.'), -(u'Dialog', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this dialog.'), -(u'Dialog', u'Title', u'Y', None, None, None, None, u'Formatted', None, u"A text string specifying the title to be displayed in the title bar of the dialog's window."), -(u'Dialog', u'Dialog', u'N', None, None, None, None, u'Identifier', None, u'Name of the dialog.'), -(u'Dialog', u'HCentering', u'N', 0, 100, None, None, None, None, u'Horizontal position of the dialog on a 0-100 scale. 0 means left end, 100 means right end of the screen, 50 center.'), -(u'Dialog', u'VCentering', u'N', 0, 100, None, None, None, None, u'Vertical position of the dialog on a 0-100 scale. 0 means top end, 100 means bottom end of the screen, 50 center.'), -(u'Dialog', u'Control_First', u'N', None, None, u'Control', 2, u'Identifier', None, u'Defines the control that has the focus when the dialog is created.'), -(u'Dialog', u'Control_Default', u'Y', None, None, u'Control', 2, u'Identifier', None, u'Defines the default control. Hitting return is equivalent to pushing this button.'), -(u'Dialog', u'Control_Cancel', u'Y', None, None, u'Control', 2, u'Identifier', None, u'Defines the cancel control. Hitting escape or clicking on the close icon on the dialog is equivalent to pushing this button.'), -(u'EventMapping', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the Dialog.'), -(u'EventMapping', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control.'), -(u'EventMapping', u'Event', u'N', None, None, None, None, u'Identifier', None, u'An identifier that specifies the type of the event that the control subscribes to.'), -(u'EventMapping', u'Attribute', u'N', None, None, None, None, u'Identifier', None, u'The name of the control attribute, that is set when this event is received.'), -(u'InstallExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'InstallExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'InstallExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AppSearch', u'Property', u'N', None, None, None, None, u'Identifier', None, u'The property associated with a Signature'), -(u'AppSearch', u'Signature_', u'N', None, None, u'Signature;RegLocator;IniLocator;DrLocator;CompLocator', 1, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables.'), -(u'BindImage', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'The index into the File table. This must be an executable file.'), -(u'BindImage', u'Path', u'Y', None, None, None, None, u'Paths', None, u'A list of ; delimited paths that represent the paths to be searched for the import DLLS. The list is usually a list of properties each enclosed within square brackets [] .'), -(u'CCPSearch', u'Signature_', u'N', None, None, u'Signature;RegLocator;IniLocator;DrLocator;CompLocator', 1, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables.'), -(u'InstallUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'InstallUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'InstallUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'ListView', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ListView', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same listview.'), -(u'ListView', u'Value', u'N', None, None, None, None, u'Identifier', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ListView', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'ListView', u'Binary_', u'Y', None, None, u'Binary', 1, u'Identifier', None, u'The name of the icon to be displayed with the icon. The binary information is looked up from the Binary Table.'), -(u'RadioButton', u'X', u'N', 0, 32767, None, None, None, None, u'The horizontal coordinate of the upper left corner of the bounding rectangle of the radio button.'), -(u'RadioButton', u'Y', u'N', 0, 32767, None, None, None, None, u'The vertical coordinate of the upper left corner of the bounding rectangle of the radio button.'), -(u'RadioButton', u'Width', u'N', 0, 32767, None, None, None, None, u'The width of the button.'), -(u'RadioButton', u'Height', u'N', 0, 32767, None, None, None, None, u'The height of the button.'), -(u'RadioButton', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible title to be assigned to the radio button.'), -(u'RadioButton', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this radio button. All the buttons tied to the same property become part of the same group.'), -(u'RadioButton', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this button. Selecting the button will set the associated property to this value.'), -(u'RadioButton', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'RadioButton', u'Help', u'Y', None, None, None, None, u'Text', None, u'The help strings used with the button. The text is optional.'), -(u'TextStyle', u'TextStyle', u'N', None, None, None, None, u'Identifier', None, u'Name of the style. The primary key of this table. This name is embedded in the texts to indicate a style change.'), -(u'TextStyle', u'FaceName', u'N', None, None, None, None, u'Text', None, u'A string indicating the name of the font used. Required. The string must be at most 31 characters long.'), -(u'TextStyle', u'Size', u'N', 0, 32767, None, None, None, None, u'The size of the font used. This size is given in our units (1/12 of the system font height). Assuming that the system font is set to 12 point size, this is equivalent to the point size.'), -(u'TextStyle', u'Color', u'Y', 0, 16777215, None, None, None, None, u'A long integer indicating the color of the string in the RGB format (Red, Green, Blue each 0-255, RGB = R + 256*G + 256^2*B).'), -(u'TextStyle', u'StyleBits', u'Y', 0, 15, None, None, None, None, u'A combination of style bits.'), -(u'UIText', u'Text', u'Y', None, None, None, None, u'Text', None, u'The localized version of the string.'), -(u'UIText', u'Key', u'N', None, None, None, None, u'Identifier', None, u'A unique key that identifies the particular string.'), -(u'_Validation', u'Table', u'N', None, None, None, None, u'Identifier', None, u'Name of table'), -(u'_Validation', u'Description', u'Y', None, None, None, None, u'Text', None, u'Description of column'), -(u'_Validation', u'Column', u'N', None, None, None, None, u'Identifier', None, u'Name of column'), -(u'_Validation', u'Nullable', u'N', None, None, None, None, None, u'Y;N;@', u'Whether the column is nullable'), -(u'_Validation', u'MinValue', u'Y', -2147483647, 2147483647, None, None, None, None, u'Minimum value allowed'), -(u'_Validation', u'MaxValue', u'Y', -2147483647, 2147483647, None, None, None, None, u'Maximum value allowed'), -(u'_Validation', u'KeyTable', u'Y', None, None, None, None, u'Identifier', None, u'For foreign key, Name of table to which data must link'), -(u'_Validation', u'KeyColumn', u'Y', 1, 32, None, None, None, None, u'Column to which foreign key connects'), -(u'_Validation', u'Category', u'Y', None, None, None, None, None, u'Text;Formatted;Template;Condition;Guid;Path;Version;Language;Identifier;Binary;UpperCase;LowerCase;Filename;Paths;AnyPath;WildCardFilename;RegPath;KeyFormatted;CustomSource;Property;Cabinet;Shortcut;URL', u'String category'), -(u'_Validation', u'Set', u'Y', None, None, None, None, u'Text', None, u'Set of values that are permitted'), -(u'AdvtUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdvtUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdvtUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AppId', u'AppId', u'N', None, None, None, None, u'Guid', None, None), -(u'AppId', u'ActivateAtStorage', u'Y', 0, 1, None, None, None, None, None), -(u'AppId', u'DllSurrogate', u'Y', None, None, None, None, u'Text', None, None), -(u'AppId', u'LocalService', u'Y', None, None, None, None, u'Text', None, None), -(u'AppId', u'RemoteServerName', u'Y', None, None, None, None, u'Formatted', None, None), -(u'AppId', u'RunAsInteractiveUser', u'Y', 0, 1, None, None, None, None, None), -(u'AppId', u'ServiceParameters', u'Y', None, None, None, None, u'Text', None, None), -(u'Feature', u'Attributes', u'N', None, None, None, None, None, u'0;1;2;4;5;6;8;9;10;16;17;18;20;21;22;24;25;26;32;33;34;36;37;38;48;49;50;52;53;54', u'Feature attributes'), -(u'Feature', u'Description', u'Y', None, None, None, None, u'Text', None, u'Longer descriptive text describing a visible feature item.'), -(u'Feature', u'Title', u'Y', None, None, None, None, u'Text', None, u'Short text identifying a visible feature item.'), -(u'Feature', u'Feature', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular feature record.'), -(u'Feature', u'Directory_', u'Y', None, None, u'Directory', 1, u'UpperCase', None, u'The name of the Directory that can be configured by the UI. A non-null value will enable the browse button.'), -(u'Feature', u'Level', u'N', 0, 32767, None, None, None, None, u'The install level at which record will be initially selected. An install level of 0 will disable an item and prevent its display.'), -(u'Feature', u'Display', u'Y', 0, 32767, None, None, None, None, u'Numeric sort order, used to force a specific display ordering.'), -(u'Feature', u'Feature_Parent', u'Y', None, None, u'Feature', 1, u'Identifier', None, u'Optional key of a parent record in the same table. If the parent is not selected, then the record will not be installed. Null indicates a root item.'), -(u'File', u'Sequence', u'N', 1, 32767, None, None, None, None, u'Sequence with respect to the media images; order must track cabinet order.'), -(u'File', u'Attributes', u'Y', 0, 32767, None, None, None, None, u'Integer containing bit flags representing file attributes (with the decimal value of each bit position in parentheses)'), -(u'File', u'File', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token, must match identifier in cabinet. For uncompressed files, this field is ignored.'), -(u'File', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the file.'), -(u'File', u'FileName', u'N', None, None, None, None, u'Filename', None, u'File name used for installation, may be localized. This may contain a "short name|long name" pair.'), -(u'File', u'FileSize', u'N', 0, 2147483647, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'File', u'Language', u'Y', None, None, None, None, u'Language', None, u'List of decimal language Ids, comma-separated if more than one.'), -(u'File', u'Version', u'Y', None, None, u'File', 1, u'Version', None, u'Version string for versioned files; Blank for unversioned files.'), -(u'Class', u'Attributes', u'Y', None, 32767, None, None, None, None, u'Class registration attributes.'), -(u'Class', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational.'), -(u'Class', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description for the Class.'), -(u'Class', u'Argument', u'Y', None, None, None, None, u'Formatted', None, u'optional argument for LocalServers.'), -(u'Class', u'AppId_', u'Y', None, None, u'AppId', 1, u'Guid', None, u'Optional AppID containing DCOM information for associated application (string GUID).'), -(u'Class', u'CLSID', u'N', None, None, None, None, u'Guid', None, u'The CLSID of an OLE factory.'), -(u'Class', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'Class', u'Context', u'N', None, None, None, None, u'Identifier', None, u'The numeric server context for this server. CLSCTX_xxxx'), -(u'Class', u'DefInprocHandler', u'Y', None, None, None, None, u'Filename', u'1;2;3', u'Optional default inproc handler. Only optionally provided if Context=CLSCTX_LOCAL_SERVER. Typically "ole32.dll" or "mapi32.dll"'), -(u'Class', u'FileTypeMask', u'Y', None, None, None, None, u'Text', None, u'Optional string containing information for the HKCRthis CLSID) key. If multiple patterns exist, they must be delimited by a semicolon, and numeric subkeys will be generated: 0,1,2...'), -(u'Class', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Optional foreign key into the Icon Table, specifying the icon file associated with this CLSID. Will be written under the DefaultIcon key.'), -(u'Class', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'Optional icon index.'), -(u'Class', u'ProgId_Default', u'Y', None, None, u'ProgId', 1, u'Text', None, u'Optional ProgId associated with this CLSID.'), -(u'Component', u'Condition', u'Y', None, None, None, None, u'Condition', None, u"A conditional statement that will disable this component if the specified condition evaluates to the 'True' state. If a component is disabled, it will not be installed, regardless of the 'Action' state associated with the component."), -(u'Component', u'Attributes', u'N', None, None, None, None, None, None, u'Remote execution option, one of irsEnum'), -(u'Component', u'Component', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular component record.'), -(u'Component', u'ComponentId', u'Y', None, None, None, None, u'Guid', None, u'A string GUID unique to this component, version, and language.'), -(u'Component', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Required key of a Directory table record. This is actually a property name whose value contains the actual path, set either by the AppSearch action or with the default setting obtained from the Directory table.'), -(u'Component', u'KeyPath', u'Y', None, None, u'File;Registry;ODBCDataSource', 1, u'Identifier', None, u'Either the primary key into the File table, Registry table, or ODBCDataSource table. This extract path is stored when the component is installed, and is used to detect the presence of the component and to return the path to it.'), -(u'ProgId', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description for the Program identifier.'), -(u'ProgId', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Optional foreign key into the Icon Table, specifying the icon file associated with this ProgId. Will be written under the DefaultIcon key.'), -(u'ProgId', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'Optional icon index.'), -(u'ProgId', u'ProgId', u'N', None, None, None, None, u'Text', None, u'The Program Identifier. Primary key.'), -(u'ProgId', u'Class_', u'Y', None, None, u'Class', 1, u'Guid', None, u'The CLSID of an OLE factory corresponding to the ProgId.'), -(u'ProgId', u'ProgId_Parent', u'Y', None, None, u'ProgId', 1, u'Text', None, u'The Parent Program Identifier. If specified, the ProgId column becomes a version independent prog id.'), -(u'CompLocator', u'Type', u'Y', 0, 1, None, None, None, None, u'A boolean value that determines if the registry value is a filename or a directory location.'), -(u'CompLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'CompLocator', u'ComponentId', u'N', None, None, None, None, u'Guid', None, u'A string GUID unique to this component, version, and language.'), -(u'Complus', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the ComPlus component.'), -(u'Complus', u'ExpType', u'Y', 0, 32767, None, None, None, None, u'ComPlus component attributes.'), -(u'Directory', u'Directory', u'N', None, None, None, None, u'Identifier', None, u'Unique identifier for directory entry, primary key. If a property by this name is defined, it contains the full path to the directory.'), -(u'Directory', u'DefaultDir', u'N', None, None, None, None, u'DefaultDir', None, u"The default sub-path under parent's path."), -(u'Directory', u'Directory_Parent', u'Y', None, None, u'Directory', 1, u'Identifier', None, u'Reference to the entry in this table specifying the default parent directory. A record parented to itself or with a Null parent represents a root of the install tree.'), -(u'CreateFolder', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table.'), -(u'CreateFolder', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Primary key, could be foreign key into the Directory table.'), -(u'CustomAction', u'Type', u'N', 1, 16383, None, None, None, None, u'The numeric custom action type, consisting of source location, code type, entry, option flags.'), -(u'CustomAction', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Primary key, name of action, normally appears in sequence table unless private use.'), -(u'CustomAction', u'Source', u'Y', None, None, None, None, u'CustomSource', None, u'The table reference of the source of the code.'), -(u'CustomAction', u'Target', u'Y', None, None, None, None, u'Formatted', None, u'Excecution parameter, depends on the type of custom action'), -(u'DrLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'DrLocator', u'Path', u'Y', None, None, None, None, u'AnyPath', None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.'), -(u'DrLocator', u'Depth', u'Y', 0, 32767, None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.'), -(u'DrLocator', u'Parent', u'Y', None, None, None, None, u'Identifier', None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.'), -(u'DuplicateFile', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Foreign key referencing the source file to be duplicated.'), -(u'DuplicateFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the duplicate file.'), -(u'DuplicateFile', u'DestFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full pathname to a destination folder.'), -(u'DuplicateFile', u'DestName', u'Y', None, None, None, None, u'Filename', None, u'Filename to be given to the duplicate file.'), -(u'DuplicateFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular file entry'), -(u'Environment', u'Name', u'N', None, None, None, None, u'Text', None, u'The name of the environmental value.'), -(u'Environment', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value to set in the environmental settings.'), -(u'Environment', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the environmental value.'), -(u'Environment', u'Environment', u'N', None, None, None, None, u'Identifier', None, u'Unique identifier for the environmental variable setting'), -(u'Error', u'Error', u'N', 0, 32767, None, None, None, None, u'Integer error number, obtained from header file IError(...) macros.'), -(u'Error', u'Message', u'Y', None, None, None, None, u'Template', None, u'Error formatting template, obtained from user ed. or localizers.'), -(u'Extension', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational.'), -(u'Extension', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'Extension', u'Extension', u'N', None, None, None, None, u'Text', None, u'The extension associated with the table row.'), -(u'Extension', u'MIME_', u'Y', None, None, u'MIME', 1, u'Text', None, u'Optional Context identifier, typically "type/format" associated with the extension'), -(u'Extension', u'ProgId_', u'Y', None, None, u'ProgId', 1, u'Text', None, u'Optional ProgId associated with this extension.'), -(u'MIME', u'CLSID', u'Y', None, None, None, None, u'Guid', None, u'Optional associated CLSID.'), -(u'MIME', u'ContentType', u'N', None, None, None, None, u'Text', None, u'Primary key. Context identifier, typically "type/format".'), -(u'MIME', u'Extension_', u'N', None, None, u'Extension', 1, u'Text', None, u'Optional associated extension (without dot)'), -(u'FeatureComponents', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into Feature table.'), -(u'FeatureComponents', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'FileSFPCatalog', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'File associated with the catalog'), -(u'FileSFPCatalog', u'SFPCatalog_', u'N', None, None, u'SFPCatalog', 1, u'Filename', None, u'Catalog associated with the file'), -(u'SFPCatalog', u'SFPCatalog', u'N', None, None, None, None, u'Filename', None, u'File name for the catalog.'), -(u'SFPCatalog', u'Catalog', u'N', None, None, None, None, u'Binary', None, u'SFP Catalog'), -(u'SFPCatalog', u'Dependency', u'Y', None, None, None, None, u'Formatted', None, u'Parent catalog - only used by SFP'), -(u'Font', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Primary key, foreign key into File table referencing font file.'), -(u'Font', u'FontTitle', u'Y', None, None, None, None, u'Text', None, u'Font name.'), -(u'IniFile', u'Action', u'N', None, None, None, None, None, u'0;1;3', u'The type of modification to be made, one of iifEnum'), -(u'IniFile', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value to be written.'), -(u'IniFile', u'Key', u'N', None, None, None, None, u'Formatted', None, u'The .INI file key below Section.'), -(u'IniFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the .INI value.'), -(u'IniFile', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name in which to write the information'), -(u'IniFile', u'IniFile', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'IniFile', u'DirProperty', u'Y', None, None, None, None, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the .INI file is.'), -(u'IniFile', u'Section', u'N', None, None, None, None, u'Formatted', None, u'The .INI file Section.'), -(u'IniLocator', u'Type', u'Y', 0, 2, None, None, None, None, u'An integer value that determines if the .INI value read is a filename or a directory location or to be used as is w/o interpretation.'), -(u'IniLocator', u'Key', u'N', None, None, None, None, u'Text', None, u'Key value (followed by an equals sign in INI file).'), -(u'IniLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'IniLocator', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name.'), -(u'IniLocator', u'Section', u'N', None, None, None, None, u'Text', None, u'Section name within in file (within square brackets in INI file).'), -(u'IniLocator', u'Field', u'Y', 0, 32767, None, None, None, None, u'The field in the .INI line. If Field is null or 0 the entire line is read.'), -(u'IsolatedComponent', u'Component_Application', u'N', None, None, u'Component', 1, u'Identifier', None, u'Key to Component table item for application'), -(u'IsolatedComponent', u'Component_Shared', u'N', None, None, u'Component', 1, u'Identifier', None, u'Key to Component table item to be isolated'), -(u'LaunchCondition', u'Condition', u'N', None, None, None, None, u'Condition', None, u'Expression which must evaluate to TRUE in order for install to commence.'), -(u'LaunchCondition', u'Description', u'N', None, None, None, None, u'Formatted', None, u'Localizable text to display when condition fails and install must abort.'), -(u'LockPermissions', u'Table', u'N', None, None, None, None, u'Identifier', u'Directory;File;Registry', u'Reference to another table name'), -(u'LockPermissions', u'Domain', u'Y', None, None, None, None, u'Formatted', None, u'Domain name for user whose permissions are being set. (usually a property)'), -(u'LockPermissions', u'LockObject', u'N', None, None, None, None, u'Identifier', None, u'Foreign key into Registry or File table'), -(u'LockPermissions', u'Permission', u'Y', -2147483647, 2147483647, None, None, None, None, u'Permission Access mask. Full Control = 268435456 (GENERIC_ALL = 0x10000000)'), -(u'LockPermissions', u'User', u'N', None, None, None, None, u'Formatted', None, u'User for permissions to be set. (usually a property)'), -(u'Media', u'Source', u'Y', None, None, None, None, u'Property', None, u'The property defining the location of the cabinet file.'), -(u'Media', u'Cabinet', u'Y', None, None, None, None, u'Cabinet', None, u'If some or all of the files stored on the media are compressed in a cabinet, the name of that cabinet.'), -(u'Media', u'DiskId', u'N', 1, 32767, None, None, None, None, u'Primary key, integer to determine sort order for table.'), -(u'Media', u'DiskPrompt', u'Y', None, None, None, None, u'Text', None, u'Disk name: the visible text actually printed on the disk. This will be used to prompt the user when this disk needs to be inserted.'), -(u'Media', u'LastSequence', u'N', 0, 32767, None, None, None, None, u'File sequence number for the last file for this media.'), -(u'Media', u'VolumeLabel', u'Y', None, None, None, None, u'Text', None, u'The label attributed to the volume.'), -(u'ModuleComponents', u'Component', u'N', None, None, u'Component', 1, u'Identifier', None, u'Component contained in the module.'), -(u'ModuleComponents', u'Language', u'N', None, None, u'ModuleSignature', 2, None, None, u'Default language ID for module (may be changed by transform).'), -(u'ModuleComponents', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'Module containing the component.'), -(u'ModuleSignature', u'Language', u'N', None, None, None, None, None, None, u'Default decimal language of module.'), -(u'ModuleSignature', u'Version', u'N', None, None, None, None, u'Version', None, u'Version of the module.'), -(u'ModuleSignature', u'ModuleID', u'N', None, None, None, None, u'Identifier', None, u'Module identifier (String.GUID).'), -(u'ModuleDependency', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'Module requiring the dependency.'), -(u'ModuleDependency', u'ModuleLanguage', u'N', None, None, u'ModuleSignature', 2, None, None, u'Language of module requiring the dependency.'), -(u'ModuleDependency', u'RequiredID', u'N', None, None, None, None, None, None, u'String.GUID of required module.'), -(u'ModuleDependency', u'RequiredLanguage', u'N', None, None, None, None, None, None, u'LanguageID of the required module.'), -(u'ModuleDependency', u'RequiredVersion', u'Y', None, None, None, None, u'Version', None, u'Version of the required version.'), -(u'ModuleExclusion', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'String.GUID of module with exclusion requirement.'), -(u'ModuleExclusion', u'ModuleLanguage', u'N', None, None, u'ModuleSignature', 2, None, None, u'LanguageID of module with exclusion requirement.'), -(u'ModuleExclusion', u'ExcludedID', u'N', None, None, None, None, None, None, u'String.GUID of excluded module.'), -(u'ModuleExclusion', u'ExcludedLanguage', u'N', None, None, None, None, None, None, u'Language of excluded module.'), -(u'ModuleExclusion', u'ExcludedMaxVersion', u'Y', None, None, None, None, u'Version', None, u'Maximum version of excluded module.'), -(u'ModuleExclusion', u'ExcludedMinVersion', u'Y', None, None, None, None, u'Version', None, u'Minimum version of excluded module.'), -(u'MoveFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'If this component is not "selected" for installation or removal, no action will be taken on the associated MoveFile entry'), -(u'MoveFile', u'DestFolder', u'N', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the destination directory'), -(u'MoveFile', u'DestName', u'Y', None, None, None, None, u'Filename', None, u'Name to be given to the original file after it is moved or copied. If blank, the destination file will be given the same name as the source file'), -(u'MoveFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key that uniquely identifies a particular MoveFile record'), -(u'MoveFile', u'Options', u'N', 0, 1, None, None, None, None, u'Integer value specifying the MoveFile operating mode, one of imfoEnum'), -(u'MoveFile', u'SourceFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the source directory'), -(u'MoveFile', u'SourceName', u'Y', None, None, None, None, u'Text', None, u"Name of the source file(s) to be moved or copied. Can contain the '*' or '?' wildcards."), -(u'MsiAssembly', u'Attributes', u'Y', None, None, None, None, None, None, u'Assembly attributes'), -(u'MsiAssembly', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into Feature table.'), -(u'MsiAssembly', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'MsiAssembly', u'File_Application', u'Y', None, None, u'File', 1, u'Identifier', None, u'Foreign key into File table, denoting the application context for private assemblies. Null for global assemblies.'), -(u'MsiAssembly', u'File_Manifest', u'Y', None, None, u'File', 1, u'Identifier', None, u'Foreign key into the File table denoting the manifest file for the assembly.'), -(u'MsiAssemblyName', u'Name', u'N', None, None, None, None, u'Text', None, u'The name part of the name-value pairs for the assembly name.'), -(u'MsiAssemblyName', u'Value', u'N', None, None, None, None, u'Text', None, u'The value part of the name-value pairs for the assembly name.'), -(u'MsiAssemblyName', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'MsiDigitalCertificate', u'CertData', u'N', None, None, None, None, u'Binary', None, u'A certificate context blob for a signer certificate'), -(u'MsiDigitalCertificate', u'DigitalCertificate', u'N', None, None, None, None, u'Identifier', None, u'A unique identifier for the row'), -(u'MsiDigitalSignature', u'Table', u'N', None, None, None, None, None, u'Media', u'Reference to another table name (only Media table is supported)'), -(u'MsiDigitalSignature', u'DigitalCertificate_', u'N', None, None, u'MsiDigitalCertificate', 1, u'Identifier', None, u'Foreign key to MsiDigitalCertificate table identifying the signer certificate'), -(u'MsiDigitalSignature', u'Hash', u'Y', None, None, None, None, u'Binary', None, u'The encoded hash blob from the digital signature'), -(u'MsiDigitalSignature', u'SignObject', u'N', None, None, None, None, u'Text', None, u'Foreign key to Media table'), -(u'MsiFileHash', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Primary key, foreign key into File table referencing file with this hash'), -(u'MsiFileHash', u'Options', u'N', 0, 32767, None, None, None, None, u'Various options and attributes for this hash.'), -(u'MsiFileHash', u'HashPart1', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart2', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart3', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart4', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiPatchHeaders', u'StreamRef', u'N', None, None, None, None, u'Identifier', None, u'Primary key. A unique identifier for the row.'), -(u'MsiPatchHeaders', u'Header', u'N', None, None, None, None, u'Binary', None, u'Binary stream. The patch header, used for patch validation.'), -(u'ODBCAttribute', u'Value', u'Y', None, None, None, None, u'Text', None, u'Value for ODBC driver attribute'), -(u'ODBCAttribute', u'Attribute', u'N', None, None, None, None, u'Text', None, u'Name of ODBC driver attribute'), -(u'ODBCAttribute', u'Driver_', u'N', None, None, u'ODBCDriver', 1, u'Identifier', None, u'Reference to ODBC driver in ODBCDriver table'), -(u'ODBCDriver', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for driver, non-localized'), -(u'ODBCDriver', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Reference to key driver file'), -(u'ODBCDriver', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCDriver', u'Driver', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for driver'), -(u'ODBCDriver', u'File_Setup', u'Y', None, None, u'File', 1, u'Identifier', None, u'Optional reference to key driver setup DLL'), -(u'ODBCDataSource', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for data source'), -(u'ODBCDataSource', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCDataSource', u'DataSource', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for data source'), -(u'ODBCDataSource', u'DriverDescription', u'N', None, None, None, None, u'Text', None, u'Reference to driver description, may be existing driver'), -(u'ODBCDataSource', u'Registration', u'N', 0, 1, None, None, None, None, u'Registration option: 0=machine, 1=user, others t.b.d.'), -(u'ODBCSourceAttribute', u'Value', u'Y', None, None, None, None, u'Text', None, u'Value for ODBC data source attribute'), -(u'ODBCSourceAttribute', u'Attribute', u'N', None, None, None, None, u'Text', None, u'Name of ODBC data source attribute'), -(u'ODBCSourceAttribute', u'DataSource_', u'N', None, None, u'ODBCDataSource', 1, u'Identifier', None, u'Reference to ODBC data source in ODBCDataSource table'), -(u'ODBCTranslator', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for translator'), -(u'ODBCTranslator', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Reference to key translator file'), -(u'ODBCTranslator', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCTranslator', u'File_Setup', u'Y', None, None, u'File', 1, u'Identifier', None, u'Optional reference to key translator setup DLL'), -(u'ODBCTranslator', u'Translator', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for translator'), -(u'Patch', u'Sequence', u'N', 0, 32767, None, None, None, None, u'Primary key, sequence with respect to the media images; order must track cabinet order.'), -(u'Patch', u'Attributes', u'N', 0, 32767, None, None, None, None, u'Integer containing bit flags representing patch attributes'), -(u'Patch', u'File_', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token, foreign key to File table, must match identifier in cabinet.'), -(u'Patch', u'Header', u'Y', None, None, None, None, u'Binary', None, u'Binary stream. The patch header, used for patch validation.'), -(u'Patch', u'PatchSize', u'N', 0, 2147483647, None, None, None, None, u'Size of patch in bytes (long integer).'), -(u'Patch', u'StreamRef_', u'Y', None, None, None, None, u'Identifier', None, u'Identifier. Foreign key to the StreamRef column of the MsiPatchHeaders table.'), -(u'PatchPackage', u'Media_', u'N', 0, 32767, None, None, None, None, u'Foreign key to DiskId column of Media table. Indicates the disk containing the patch package.'), -(u'PatchPackage', u'PatchId', u'N', None, None, None, None, u'Guid', None, u'A unique string GUID representing this patch.'), -(u'PublishComponent', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into the Feature table.'), -(u'PublishComponent', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table.'), -(u'PublishComponent', u'ComponentId', u'N', None, None, None, None, u'Guid', None, u'A string GUID that represents the component id that will be requested by the alien product.'), -(u'PublishComponent', u'AppData', u'Y', None, None, None, None, u'Text', None, u'This is localisable Application specific data that can be associated with a Qualified Component.'), -(u'PublishComponent', u'Qualifier', u'N', None, None, None, None, u'Text', None, u'This is defined only when the ComponentId column is an Qualified Component Id. This is the Qualifier for ProvideComponentIndirect.'), -(u'Registry', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'Registry', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The registry value.'), -(u'Registry', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'Registry', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the registry value.'), -(u'Registry', u'Registry', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'Registry', u'Root', u'N', -1, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum.'), -(u'RegLocator', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'RegLocator', u'Type', u'Y', 0, 18, None, None, None, None, u'An integer value that determines if the registry value is a filename or a directory location or to be used as is w/o interpretation.'), -(u'RegLocator', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'RegLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table. If the type is 0, the registry values refers a directory, and _Signature is not a foreign key.'), -(u'RegLocator', u'Root', u'N', 0, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum.'), -(u'RemoveFile', u'InstallMode', u'N', None, None, None, None, None, u'1;2;3', u'Installation option, one of iimEnum.'), -(u'RemoveFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the file to be removed.'), -(u'RemoveFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular file entry'), -(u'RemoveFile', u'FileName', u'Y', None, None, None, None, u'WildCardFilename', None, u'Name of the file to be removed.'), -(u'RemoveFile', u'DirProperty', u'N', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full pathname to the folder of the file to be removed.'), -(u'RemoveIniFile', u'Action', u'N', None, None, None, None, None, u'2;4', u'The type of modification to be made, one of iifEnum.'), -(u'RemoveIniFile', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value to be deleted. The value is required when Action is iifIniRemoveTag'), -(u'RemoveIniFile', u'Key', u'N', None, None, None, None, u'Formatted', None, u'The .INI file key below Section.'), -(u'RemoveIniFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the deletion of the .INI value.'), -(u'RemoveIniFile', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name in which to delete the information'), -(u'RemoveIniFile', u'DirProperty', u'Y', None, None, None, None, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the .INI file is.'), -(u'RemoveIniFile', u'Section', u'N', None, None, None, None, u'Formatted', None, u'The .INI file Section.'), -(u'RemoveIniFile', u'RemoveIniFile', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'RemoveRegistry', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'RemoveRegistry', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'RemoveRegistry', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the deletion of the registry value.'), -(u'RemoveRegistry', u'Root', u'N', -1, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum'), -(u'RemoveRegistry', u'RemoveRegistry', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ReserveCost', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reserve a specified amount of space if this component is to be installed.'), -(u'ReserveCost', u'ReserveFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the destination directory'), -(u'ReserveCost', u'ReserveKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key that uniquely identifies a particular ReserveCost record'), -(u'ReserveCost', u'ReserveLocal', u'N', 0, 2147483647, None, None, None, None, u'Disk space to reserve if linked component is installed locally.'), -(u'ReserveCost', u'ReserveSource', u'N', 0, 2147483647, None, None, None, None, u'Disk space to reserve if linked component is installed to run from the source location.'), -(u'SelfReg', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Foreign key into the File table denoting the module that needs to be registered.'), -(u'SelfReg', u'Cost', u'Y', 0, 32767, None, None, None, None, u'The cost of registering the module.'), -(u'ServiceControl', u'Name', u'N', None, None, None, None, u'Formatted', None, u'Name of a service. /, \\, comma and space are invalid'), -(u'ServiceControl', u'Event', u'N', 0, 187, None, None, None, None, u'Bit field: Install: 0x1 = Start, 0x2 = Stop, 0x8 = Delete, Uninstall: 0x10 = Start, 0x20 = Stop, 0x80 = Delete'), -(u'ServiceControl', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table that controls the startup of the service'), -(u'ServiceControl', u'ServiceControl', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ServiceControl', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'Arguments for the service. Separate by [~].'), -(u'ServiceControl', u'Wait', u'Y', 0, 1, None, None, None, None, u'Boolean for whether to wait for the service to fully start'), -(u'ServiceInstall', u'Name', u'N', None, None, None, None, u'Formatted', None, u'Internal Name of the Service'), -(u'ServiceInstall', u'Description', u'Y', None, None, None, None, u'Text', None, u'Description of service.'), -(u'ServiceInstall', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table that controls the startup of the service'), -(u'ServiceInstall', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'Arguments to include in every start of the service, passed to WinMain'), -(u'ServiceInstall', u'ServiceInstall', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ServiceInstall', u'Dependencies', u'Y', None, None, None, None, u'Formatted', None, u'Other services this depends on to start. Separate by [~], and end with [~][~]'), -(u'ServiceInstall', u'DisplayName', u'Y', None, None, None, None, u'Formatted', None, u'External Name of the Service'), -(u'ServiceInstall', u'ErrorControl', u'N', -2147483647, 2147483647, None, None, None, None, u'Severity of error if service fails to start'), -(u'ServiceInstall', u'LoadOrderGroup', u'Y', None, None, None, None, u'Formatted', None, u'LoadOrderGroup'), -(u'ServiceInstall', u'Password', u'Y', None, None, None, None, u'Formatted', None, u'password to run service with. (with StartName)'), -(u'ServiceInstall', u'ServiceType', u'N', -2147483647, 2147483647, None, None, None, None, u'Type of the service'), -(u'ServiceInstall', u'StartName', u'Y', None, None, None, None, u'Formatted', None, u'User or object name to run service as'), -(u'ServiceInstall', u'StartType', u'N', 0, 4, None, None, None, None, u'Type of the service'), -(u'Shortcut', u'Name', u'N', None, None, None, None, u'Filename', None, u'The name of the shortcut to be created.'), -(u'Shortcut', u'Description', u'Y', None, None, None, None, u'Text', None, u'The description for the shortcut.'), -(u'Shortcut', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table denoting the component whose selection gates the the shortcut creation/deletion.'), -(u'Shortcut', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Foreign key into the File table denoting the external icon file for the shortcut.'), -(u'Shortcut', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'The icon index for the shortcut.'), -(u'Shortcut', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the shortcut file is created.'), -(u'Shortcut', u'Target', u'N', None, None, None, None, u'Shortcut', None, u'The shortcut target. This is usually a property that is expanded to a file or a folder that the shortcut points to.'), -(u'Shortcut', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'The command-line arguments for the shortcut.'), -(u'Shortcut', u'Shortcut', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'Shortcut', u'Hotkey', u'Y', 0, 32767, None, None, None, None, u'The hotkey for the shortcut. It has the virtual-key code for the key in the low-order byte, and the modifier flags in the high-order byte. '), -(u'Shortcut', u'ShowCmd', u'Y', None, None, None, None, None, u'1;3;7', u'The show command for the application window.The following values may be used.'), -(u'Shortcut', u'WkDir', u'Y', None, None, None, None, u'Identifier', None, u'Name of property defining location of working directory.'), -(u'Signature', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The name of the file. This may contain a "short name|long name" pair.'), -(u'Signature', u'Signature', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature represents a unique file signature.'), -(u'Signature', u'Languages', u'Y', None, None, None, None, u'Language', None, u'The languages supported by the file.'), -(u'Signature', u'MaxDate', u'Y', 0, 2147483647, None, None, None, None, u'The maximum creation date of the file.'), -(u'Signature', u'MaxSize', u'Y', 0, 2147483647, None, None, None, None, u'The maximum size of the file. '), -(u'Signature', u'MaxVersion', u'Y', None, None, None, None, u'Text', None, u'The maximum version of the file.'), -(u'Signature', u'MinDate', u'Y', 0, 2147483647, None, None, None, None, u'The minimum creation date of the file.'), -(u'Signature', u'MinSize', u'Y', 0, 2147483647, None, None, None, None, u'The minimum size of the file.'), -(u'Signature', u'MinVersion', u'Y', None, None, None, None, u'Text', None, u'The minimum version of the file.'), -(u'TypeLib', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the type library to be operational.'), -(u'TypeLib', u'Description', u'Y', None, None, None, None, u'Text', None, None), -(u'TypeLib', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'TypeLib', u'Directory_', u'Y', None, None, u'Directory', 1, u'Identifier', None, u'Optional. The foreign key into the Directory table denoting the path to the help file for the type library.'), -(u'TypeLib', u'Language', u'N', 0, 32767, None, None, None, None, u'The language of the library.'), -(u'TypeLib', u'Version', u'Y', 0, 16777215, None, None, None, None, u'The version of the library. The minor version is in the lower 8 bits of the integer. The major version is in the next 16 bits. '), -(u'TypeLib', u'Cost', u'Y', 0, 2147483647, None, None, None, None, u'The cost associated with the registration of the typelib. This column is currently optional.'), -(u'TypeLib', u'LibID', u'N', None, None, None, None, u'Guid', None, u'The GUID that represents the library.'), -(u'Upgrade', u'Attributes', u'N', 0, 2147483647, None, None, None, None, u'The attributes of this product set.'), -(u'Upgrade', u'Remove', u'Y', None, None, None, None, u'Formatted', None, u'The list of features to remove when uninstalling a product from this set. The default is "ALL".'), -(u'Upgrade', u'Language', u'Y', None, None, None, None, u'Language', None, u'A comma-separated list of languages for either products in this set or products not in this set.'), -(u'Upgrade', u'ActionProperty', u'N', None, None, None, None, u'UpperCase', None, u'The property to set when a product in this set is found.'), -(u'Upgrade', u'UpgradeCode', u'N', None, None, None, None, u'Guid', None, u'The UpgradeCode GUID belonging to the products in this set.'), -(u'Upgrade', u'VersionMax', u'Y', None, None, None, None, u'Text', None, u'The maximum ProductVersion of the products in this set. The set may or may not include products with this particular version.'), -(u'Upgrade', u'VersionMin', u'Y', None, None, None, None, u'Text', None, u'The minimum ProductVersion of the products in this set. The set may or may not include products with this particular version.'), -(u'Verb', u'Sequence', u'Y', 0, 32767, None, None, None, None, u'Order within the verbs for a particular extension. Also used simply to specify the default verb.'), -(u'Verb', u'Argument', u'Y', None, None, None, None, u'Formatted', None, u'Optional value for the command arguments.'), -(u'Verb', u'Extension_', u'N', None, None, u'Extension', 1, u'Text', None, u'The extension associated with the table row.'), -(u'Verb', u'Verb', u'N', None, None, None, None, u'Text', None, u'The verb for the command.'), -(u'Verb', u'Command', u'Y', None, None, None, None, u'Formatted', None, u'The command text.'), -] - -Error = [ -(0, u'{{Fatal error: }}'), -(1, u'{{Error [1]. }}'), -(2, u'Warning [1]. '), -(3, None), -(4, u'Info [1]. '), -(5, u'The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}'), -(6, None), -(7, u'{{Disk full: }}'), -(8, u'Action [Time]: [1]. [2]'), -(9, u'[ProductName]'), -(10, u'{[2]}{, [3]}{, [4]}'), -(11, u'Message type: [1], Argument: [2]'), -(12, u'=== Logging started: [Date] [Time] ==='), -(13, u'=== Logging stopped: [Date] [Time] ==='), -(14, u'Action start [Time]: [1].'), -(15, u'Action ended [Time]: [1]. Return value [2].'), -(16, u'Time remaining: {[1] minutes }{[2] seconds}'), -(17, u'Out of memory. Shut down other applications before retrying.'), -(18, u'Installer is no longer responding.'), -(19, u'Installer stopped prematurely.'), -(20, u'Please wait while Windows configures [ProductName]'), -(21, u'Gathering required information...'), -(22, u'Removing older versions of this application...'), -(23, u'Preparing to remove older versions of this application...'), -(32, u'{[ProductName] }Setup completed successfully.'), -(33, u'{[ProductName] }Setup failed.'), -(1101, u'Error reading from file: [2]. {{ System error [3].}} Verify that the file exists and that you can access it.'), -(1301, u"Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location."), -(1302, u'Please insert the disk: [2]'), -(1303, u'The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.'), -(1304, u'Error writing to file: [2]. Verify that you have access to that directory.'), -(1305, u'Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.'), -(1306, u"Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry."), -(1307, u'There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.'), -(1308, u'Source file not found: [2]. Verify that the file exists and that you can access it.'), -(1309, u'Error reading from file: [3]. {{ System error [2].}} Verify that the file exists and that you can access it.'), -(1310, u'Error writing to file: [3]. {{ System error [2].}} Verify that you have access to that directory.'), -(1311, u'Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.'), -(1312, u"Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit."), -(1313, u'The volume [2] is currently unavailable. Please select another.'), -(1314, u"The specified path '[2]' is unavailable."), -(1315, u'Unable to write to the specified folder: [2].'), -(1316, u'A network error occurred while attempting to read from the file: [2]'), -(1317, u'An error occurred while attempting to create the directory: [2]'), -(1318, u'A network error occurred while attempting to create the directory: [2]'), -(1319, u'A network error occurred while attempting to open the source file cabinet: [2]'), -(1320, u'The specified path is too long: [2]'), -(1321, u'The Installer has insufficient privileges to modify this file: [2].'), -(1322, u"A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system."), -(1323, u"The folder path '[2]' contains words that are not valid in folder paths."), -(1324, u"The folder path '[2]' contains an invalid character."), -(1325, u"'[2]' is not a valid short file name."), -(1326, u'Error getting file security: [3] GetLastError: [2]'), -(1327, u'Invalid Drive: [2]'), -(1328, u'Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}'), -(1329, u'A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.'), -(1330, u'A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{ Error [3] was returned by WinVerifyTrust.}}'), -(1331, u'Failed to correctly copy [2] file: CRC error.'), -(1332, u'Failed to correctly move [2] file: CRC error.'), -(1333, u'Failed to correctly patch [2] file: CRC error.'), -(1334, u"The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package."), -(1335, u"The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package."), -(1336, u'There was an error creating a temporary file that is needed to complete this installation.{{ Folder: [3]. System error code: [2]}}'), -(1401, u'Could not create key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1402, u'Could not open key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1403, u'Could not delete value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1404, u'Could not delete key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1405, u'Could not read value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1406, u'Could not write value [2] to key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1407, u'Could not get value names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1408, u'Could not get sub key names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1409, u'Could not read security information for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1410, u'Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.'), -(1500, u'Another installation is in progress. You must complete that installation before continuing this one.'), -(1501, u'Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.'), -(1502, u"User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue."), -(1503, u"User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product."), -(1601, u"Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry."), -(1602, u'Are you sure you want to cancel?'), -(1603, u"The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry."), -(1604, u"The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible."), -(1605, u"There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation."), -(1606, u'Could not access network location [2].'), -(1607, u'The following applications should be closed before continuing the install:'), -(1608, u'Could not find any previously installed compliant products on the machine for installing this product.'), -(1609, u"An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}"), -(1701, u'The key [2] is not valid. Verify that you entered the correct key.'), -(1702, u'The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.'), -(1703, u'You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.'), -(1704, u'An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?'), -(1705, u'A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?'), -(1706, u"An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'."), -(1707, u'Installation completed successfully.'), -(1708, u'Installation failed.'), -(1709, u'Product: [2] -- [3]'), -(1710, u'You may either restore your computer to its previous state or continue the install later. Would you like to restore?'), -(1711, u'An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.'), -(1712, u'One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.'), -(1713, u'[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}}'), -(1714, u'The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}}'), -(1715, u'Installed [2]'), -(1716, u'Configured [2]'), -(1717, u'Removed [2]'), -(1718, u'File [2] was rejected by digital signature policy.'), -(1719, u'The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.'), -(1720, u'There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}'), -(1721, u'There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}'), -(1722, u'There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}'), -(1723, u'There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}'), -(1724, u'Removal completed successfully.'), -(1725, u'Removal failed.'), -(1726, u'Advertisement completed successfully.'), -(1727, u'Advertisement failed.'), -(1728, u'Configuration completed successfully.'), -(1729, u'Configuration failed.'), -(1730, u'You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.'), -(1801, u'The path [2] is not valid. Please specify a valid path.'), -(1802, u'Out of memory. Shut down other applications before retrying.'), -(1803, u'There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.'), -(1804, u'There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.'), -(1805, u'The folder [2] does not exist. Please enter a path to an existing folder.'), -(1806, u'You have insufficient privileges to read this folder.'), -(1807, u'A valid destination folder for the install could not be determined.'), -(1901, u'Error attempting to read from the source install database: [2].'), -(1902, u'Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.'), -(1903, u'Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.'), -(1904, u'Module [2] failed to register. HRESULT [3]. Contact your support personnel.'), -(1905, u'Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.'), -(1906, u'Failed to cache package [2]. Error: [3]. Contact your support personnel.'), -(1907, u'Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.'), -(1908, u'Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.'), -(1909, u'Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.'), -(1910, u'Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.'), -(1911, u'Could not register type library for file [2]. Contact your support personnel.'), -(1912, u'Could not unregister type library for file [2]. Contact your support personnel.'), -(1913, u'Could not update the ini file [2][3]. Verify that the file exists and that you can access it.'), -(1914, u'Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].'), -(1915, u'Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.'), -(1916, u'Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.'), -(1917, u'Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.'), -(1918, u'Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.'), -(1919, u'Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.'), -(1920, u"Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services."), -(1921, u"Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services."), -(1922, u"Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services."), -(1923, u"Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services."), -(1924, u"Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables."), -(1925, u'You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.'), -(1926, u"Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file."), -(1927, u'Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.'), -(1928, u'Error registering COM+ Application. Contact your support personnel for more information.'), -(1929, u'Error unregistering COM+ Application. Contact your support personnel for more information.'), -(1930, u"The description for service '[2]' ([3]) could not be changed."), -(1931, u'The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}'), -(1932, u'The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}'), -(1933, u'The Windows Installer service cannot update one or more protected Windows files. {{SFP Error: [2]. List of protected files:\\r\\n[3]}}'), -(1934, u'User installations are disabled via policy on the machine.'), -(1935, u'An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}'), -] - -tables=['AdminExecuteSequence', 'AdminUISequence', 'AdvtExecuteSequence', 'BBControl', 'Billboard', 'Binary', 'CheckBox', 'Property', 'ComboBox', 'Control', 'ListBox', 'ActionText', 'ControlCondition', 'ControlEvent', 'Dialog', 'EventMapping', 'InstallExecuteSequence', 'InstallUISequence', 'ListView', 'RadioButton', 'TextStyle', 'UIText', '_Validation', 'Error'] +tables=['ActionText', 'UIText'] Deleted: /python/trunk/Lib/msilib/uisample.py ============================================================================== --- /python/trunk/Lib/msilib/uisample.py Mon May 1 17:56:03 2006 +++ (empty file) @@ -1,1399 +0,0 @@ -import msilib,os;dirname=os.path.dirname(__file__) -AdminExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'InstallFiles', None, 4000), -(u'InstallAdminPackage', None, 3900), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -] - -AdminUISequence = [ -(u'AdminWelcomeDlg', None, 1230), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'ExecuteAction', None, 1300), -(u'ExitDialog', None, -1), -(u'FatalError', None, -3), -(u'PrepareDlg', None, 140), -(u'ProgressDlg', None, 1280), -(u'UserExit', None, -2), -] - -AdvtExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'CreateShortcuts', None, 4500), -(u'PublishComponents', None, 6200), -(u'PublishFeatures', None, 6300), -(u'PublishProduct', None, 6400), -(u'RegisterClassInfo', None, 4600), -(u'RegisterExtensionInfo', None, 4700), -(u'RegisterMIMEInfo', None, 4900), -(u'RegisterProgIdInfo', None, 4800), -] - -BBControl = [ -] - -Billboard = [ -] - -Binary = [ -(u'bannrbmp', msilib.Binary(os.path.join(dirname,"bannrbmp.bin"))), -(u'completi', msilib.Binary(os.path.join(dirname,"completi.bin"))), -(u'custicon', msilib.Binary(os.path.join(dirname,"custicon.bin"))), -(u'dlgbmp', msilib.Binary(os.path.join(dirname,"dlgbmp.bin"))), -(u'exclamic', msilib.Binary(os.path.join(dirname,"exclamic.bin"))), -(u'info', msilib.Binary(os.path.join(dirname,"info.bin"))), -(u'insticon', msilib.Binary(os.path.join(dirname,"insticon.bin"))), -(u'New', msilib.Binary(os.path.join(dirname,"New.bin"))), -(u'removico', msilib.Binary(os.path.join(dirname,"removico.bin"))), -(u'repairic', msilib.Binary(os.path.join(dirname,"repairic.bin"))), -(u'Up', msilib.Binary(os.path.join(dirname,"Up.bin"))), -] - -CheckBox = [ -] - -Property = [ -(u'BannerBitmap', u'bannrbmp'), -(u'IAgree', u'No'), -(u'ProductID', u'none'), -(u'ARPHELPLINK', u'http://www.microsoft.com/management'), -(u'ButtonText_Back', u'< &Back'), -(u'ButtonText_Browse', u'Br&owse'), -(u'ButtonText_Cancel', u'Cancel'), -(u'ButtonText_Exit', u'&Exit'), -(u'ButtonText_Finish', u'&Finish'), -(u'ButtonText_Ignore', u'&Ignore'), -(u'ButtonText_Install', u'&Install'), -(u'ButtonText_Next', u'&Next >'), -(u'ButtonText_No', u'&No'), -(u'ButtonText_OK', u'OK'), -(u'ButtonText_Remove', u'&Remove'), -(u'ButtonText_Repair', u'&Repair'), -(u'ButtonText_Reset', u'&Reset'), -(u'ButtonText_Resume', u'&Resume'), -(u'ButtonText_Retry', u'&Retry'), -(u'ButtonText_Return', u'&Return'), -(u'ButtonText_Yes', u'&Yes'), -(u'CompleteSetupIcon', u'completi'), -(u'ComponentDownload', u'ftp://anonymous at microsoft.com/components/'), -(u'CustomSetupIcon', u'custicon'), -(u'DefaultUIFont', u'DlgFont8'), -(u'DialogBitmap', u'dlgbmp'), -(u'DlgTitleFont', u'{&DlgFontBold8}'), -(u'ErrorDialog', u'ErrorDlg'), -(u'ExclamationIcon', u'exclamic'), -(u'InfoIcon', u'info'), -(u'InstallerIcon', u'insticon'), -(u'INSTALLLEVEL', u'3'), -(u'InstallMode', u'Typical'), -(u'PIDTemplate', u'12345<###-%%%%%%%>@@@@@'), -#(u'ProductLanguage', u'1033'), -(u'Progress1', u'Installing'), -(u'Progress2', u'installs'), -(u'PROMPTROLLBACKCOST', u'P'), -(u'RemoveIcon', u'removico'), -(u'RepairIcon', u'repairic'), -(u'Setup', u'Setup'), -(u'ShowUserRegistrationDlg', u'1'), -(u'Wizard', u'Setup Wizard'), -] - -ComboBox = [ -] - -Control = [ -(u'AdminWelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'AdminWelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminWelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'AdminWelcomeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will create a server image of [ProductName], at a specified network location. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'AdminWelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'AdminWelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminWelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'ExitDialog', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'ExitDialog', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ExitDialog', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'ExitDialog', u'Description', u'Text', 135, 70, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'ExitDialog', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Completing the [ProductName] [Wizard]', None, None), -(u'ExitDialog', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'ExitDialog', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'FatalError', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'FatalError', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'FatalError', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'FatalError', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}[ProductName] [Wizard] ended prematurely', None, None), -(u'FatalError', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'FatalError', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'FatalError', u'Description1', u'Text', 135, 70, 220, 40, 196611, None, u'[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.', None, None), -(u'FatalError', u'Description2', u'Text', 135, 115, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'PrepareDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Cancel', None), -(u'PrepareDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'PrepareDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'PrepareDlg', u'Description', u'Text', 135, 70, 220, 20, 196611, None, u'Please wait while the [Wizard] prepares to guide you through the installation.', None, None), -(u'PrepareDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'PrepareDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', None, None), -(u'PrepareDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', None, None), -(u'PrepareDlg', u'ActionData', u'Text', 135, 125, 220, 30, 196611, None, None, None, None), -(u'PrepareDlg', u'ActionText', u'Text', 135, 100, 220, 20, 196611, None, None, None, None), -(u'ProgressDlg', u'Text', u'Text', 35, 65, 300, 20, 3, None, u'Please wait while the [Wizard] [Progress2] [ProductName]. This may take several minutes.', None, None), -(u'ProgressDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'ProgressDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'ProgressDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ProgressDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'ProgressDlg', u'Title', u'Text', 20, 15, 200, 15, 196611, None, u'[DlgTitleFont][Progress1] [ProductName]', None, None), -(u'ProgressDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'ProgressDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'ProgressDlg', u'ActionText', u'Text', 70, 100, 265, 10, 3, None, None, None, None), -(u'ProgressDlg', u'ProgressBar', u'ProgressBar', 35, 115, 300, 10, 65537, None, u'Progress done', None, None), -(u'ProgressDlg', u'StatusLabel', u'Text', 35, 100, 35, 10, 3, None, u'Status:', None, None), -(u'UserExit', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'UserExit', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'UserExit', u'Cancel', u'PushButton', 304, 243, 56, 17, 1, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'UserExit', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}[ProductName] [Wizard] was interrupted', None, None), -(u'UserExit', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Finish', None), -(u'UserExit', u'Finish', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Finish]', u'Cancel', None), -(u'UserExit', u'Description1', u'Text', 135, 70, 220, 40, 196611, None, u'[ProductName] setup was interrupted. Your system has not been modified. To install this program at a later time, please run the installation again.', None, None), -(u'UserExit', u'Description2', u'Text', 135, 115, 220, 20, 196611, None, u'Click the Finish button to exit the [Wizard].', None, None), -(u'AdminBrowseDlg', u'Up', u'PushButton', 298, 55, 19, 19, 3670019, None, u'Up', u'NewFolder', u'Up One Level|'), -(u'AdminBrowseDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'PathEdit', None), -(u'AdminBrowseDlg', u'PathEdit', u'PathEdit', 84, 202, 261, 17, 3, u'TARGETDIR', None, u'OK', None), -(u'AdminBrowseDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminBrowseDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminBrowseDlg', u'Cancel', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'ComboLabel', None), -(u'AdminBrowseDlg', u'ComboLabel', u'Text', 25, 58, 44, 10, 3, None, u'&Look in:', u'DirectoryCombo', None), -(u'AdminBrowseDlg', u'DirectoryCombo', u'DirectoryCombo', 70, 55, 220, 80, 458755, u'TARGETDIR', None, u'Up', None), -(u'AdminBrowseDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Browse to the destination folder', None, None), -(u'AdminBrowseDlg', u'DirectoryList', u'DirectoryList', 25, 83, 320, 110, 7, u'TARGETDIR', None, u'PathLabel', None), -(u'AdminBrowseDlg', u'PathLabel', u'Text', 25, 205, 59, 10, 3, None, u'&Folder name:', u'BannerBitmap', None), -(u'AdminBrowseDlg', u'NewFolder', u'PushButton', 325, 55, 19, 19, 3670019, None, u'New', u'DirectoryList', u'Create A New Folder|'), -(u'AdminBrowseDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'Cancel', None), -(u'AdminBrowseDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Change current destination folder', None, None), -(u'AdminInstallPointDlg', u'Text', u'Text', 25, 80, 320, 10, 3, None, u'&Enter a new network location or click Browse to browse to one.', u'PathEdit', None), -(u'AdminInstallPointDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Text', None), -(u'AdminInstallPointDlg', u'PathEdit', u'PathEdit', 25, 93, 320, 18, 3, u'TARGETDIR', None, u'Browse', None), -(u'AdminInstallPointDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminInstallPointDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminInstallPointDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'AdminInstallPointDlg', u'Description', u'Text', 25, 20, 280, 20, 196611, None, u'Please specify a network location for the server image of [ProductName] product', None, None), -(u'AdminInstallPointDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Network Location', None, None), -(u'AdminInstallPointDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminInstallPointDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'AdminInstallPointDlg', u'Browse', u'PushButton', 289, 119, 56, 17, 3, None, u'[ButtonText_Browse]', u'Back', None), -(u'AdminRegistrationDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OrganizationLabel', None), -(u'AdminRegistrationDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'AdminRegistrationDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'AdminRegistrationDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'AdminRegistrationDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please enter your company information', None, None), -(u'AdminRegistrationDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Company Information', None, None), -(u'AdminRegistrationDlg', u'Back', u'PushButton', 180, 243, 56, 17, 65539, None, u'[ButtonText_Back]', u'Next', None), -(u'AdminRegistrationDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'AdminRegistrationDlg', u'OrganizationLabel', u'Text', 45, 71, 285, 30, 3, None, u'&Please enter the name of your organization in the box below. This will be used as default company name for subsequent installations of [ProductName]:', u'OrganizationEdit', None), -(u'AdminRegistrationDlg', u'CDKeyEdit', u'MaskedEdit', 45, 143, 250, 16, 3, u'PIDKEY', u'[PIDTemplate]', u'Back', None), -(u'AdminRegistrationDlg', u'CDKeyLabel', u'Text', 45, 130, 50, 10, 3, None, u'CD &Key:', u'CDKeyEdit', None), -(u'AdminRegistrationDlg', u'OrganizationEdit', u'Edit', 45, 105, 220, 18, 3, u'COMPANYNAME', u'{80}', u'CDKeyLabel', None), -(u'BrowseDlg', u'Up', u'PushButton', 298, 55, 19, 19, 3670019, None, u'Up', u'NewFolder', u'Up One Level|'), -(u'BrowseDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'PathEdit', None), -(u'BrowseDlg', u'PathEdit', u'PathEdit', 84, 202, 261, 18, 11, u'_BrowseProperty', None, u'OK', None), -(u'BrowseDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'BrowseDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'BrowseDlg', u'Cancel', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'ComboLabel', None), -(u'BrowseDlg', u'ComboLabel', u'Text', 25, 58, 44, 10, 3, None, u'&Look in:', u'DirectoryCombo', None), -(u'BrowseDlg', u'DirectoryCombo', u'DirectoryCombo', 70, 55, 220, 80, 393227, u'_BrowseProperty', None, u'Up', None), -(u'BrowseDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Browse to the destination folder', None, None), -(u'BrowseDlg', u'DirectoryList', u'DirectoryList', 25, 83, 320, 110, 15, u'_BrowseProperty', None, u'PathLabel', None), -(u'BrowseDlg', u'PathLabel', u'Text', 25, 205, 59, 10, 3, None, u'&Folder name:', u'BannerBitmap', None), -(u'BrowseDlg', u'NewFolder', u'PushButton', 325, 55, 19, 19, 3670019, None, u'New', u'DirectoryList', u'Create A New Folder|'), -(u'BrowseDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'Cancel', None), -(u'BrowseDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Change current destination folder', None, None), -(u'CancelDlg', u'Text', u'Text', 48, 15, 194, 30, 3, None, u'Are you sure you want to cancel [ProductName] installation?', None, None), -(u'CancelDlg', u'Icon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[InfoIcon]', None, u'Information icon|'), -(u'CancelDlg', u'No', u'PushButton', 132, 57, 56, 17, 3, None, u'[ButtonText_No]', u'Yes', None), -(u'CancelDlg', u'Yes', u'PushButton', 72, 57, 56, 17, 3, None, u'[ButtonText_Yes]', u'No', None), -(u'CustomizeDlg', u'Text', u'Text', 25, 55, 320, 20, 3, None, u'Click on the icons in the tree below to change the way features will be installed.', None, None), -(u'CustomizeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Tree', None), -(u'CustomizeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'CustomizeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'CustomizeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'CustomizeDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Select the way you want features to be installed.', None, None), -(u'CustomizeDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Custom Setup', None, None), -(u'CustomizeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'CustomizeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'CustomizeDlg', u'Browse', u'PushButton', 304, 200, 56, 17, 3, None, u'[ButtonText_Browse]', u'Reset', None), -(u'CustomizeDlg', u'Tree', u'SelectionTree', 25, 85, 175, 95, 7, u'_BrowseProperty', u'Tree of selections', u'Browse', None), -(u'CustomizeDlg', u'Box', u'GroupBox', 210, 81, 140, 98, 1, None, None, None, None), -(u'CustomizeDlg', u'Reset', u'PushButton', 42, 243, 56, 17, 3, None, u'[ButtonText_Reset]', u'DiskCost', None), -(u'CustomizeDlg', u'DiskCost', u'PushButton', 111, 243, 56, 17, 3, None, u'Disk &Usage', u'Back', None), -(u'CustomizeDlg', u'ItemDescription', u'Text', 215, 90, 131, 30, 3, None, u'Multiline description of the currently selected item.', None, None), -(u'CustomizeDlg', u'ItemSize', u'Text', 215, 130, 131, 45, 3, None, u'The size of the currently selected item.', None, None), -(u'CustomizeDlg', u'Location', u'Text', 75, 200, 215, 20, 3, None, u"", None, None), -(u'CustomizeDlg', u'LocationLabel', u'Text', 25, 200, 50, 10, 3, None, u'Location:', None, None), -(u'DiskCostDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes (if any) do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'DiskCostDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OK', None), -(u'DiskCostDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'DiskCostDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'DiskCostDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'The disk space required for the installation of the selected features.', None, None), -(u'DiskCostDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'BannerBitmap', None), -(u'DiskCostDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Disk Space Requirements', None, None), -(u'DiskCostDlg', u'VolumeList', u'VolumeCostList', 20, 100, 330, 120, 393223, None, u'{120}{70}{70}{70}{70}', None, None), -(u'ErrorDlg', u'Y', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Yes]', None, None), -(u'ErrorDlg', u'A', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Cancel]', None, None), -(u'ErrorDlg', u'C', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Cancel]', None, None), -(u'ErrorDlg', u'ErrorIcon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[InfoIcon]', None, u'Information icon|'), -(u'ErrorDlg', u'ErrorText', u'Text', 48, 15, 205, 60, 3, None, u'Information text', None, None), -(u'ErrorDlg', u'I', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Ignore]', None, None), -(u'ErrorDlg', u'N', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_No]', None, None), -(u'ErrorDlg', u'O', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_OK]', None, None), -(u'ErrorDlg', u'R', u'PushButton', 100, 80, 56, 17, 3, None, u'[ButtonText_Retry]', None, None), -(u'FilesInUse', u'Text', u'Text', 20, 55, 330, 30, 3, None, u'The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.', None, None), -(u'FilesInUse', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Retry', None), -(u'FilesInUse', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'FilesInUse', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'FilesInUse', u'Description', u'Text', 20, 23, 280, 20, 196611, None, u'Some files that need to be updated are currently in use.', None, None), -(u'FilesInUse', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Files in Use', None, None), -(u'FilesInUse', u'Retry', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Retry]', u'Ignore', None), -(u'FilesInUse', u'Exit', u'PushButton', 166, 243, 56, 17, 3, None, u'[ButtonText_Exit]', u'BannerBitmap', None), -(u'FilesInUse', u'Ignore', u'PushButton', 235, 243, 56, 17, 3, None, u'[ButtonText_Ignore]', u'Exit', None), -(u'FilesInUse', u'List', u'ListBox', 20, 87, 330, 130, 7, u'FileInUseProcess', None, None, None), -(u'LicenseAgreementDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'AgreementText', None), -(u'LicenseAgreementDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'LicenseAgreementDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'LicenseAgreementDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'LicenseAgreementDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please read the following license agreement carefully', None, None), -(u'LicenseAgreementDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]End-User License Agreement', None, None), -(u'LicenseAgreementDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'LicenseAgreementDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'LicenseAgreementDlg', u'AgreementText', u'ScrollableText', 20, 60, 330, 120, 7, None, u'{\\rtf1\\ansi\\ansicpg1252\\deff0\\deftab720{\\fonttbl{\\f0\\froman\\fprq2 Times New Roman;}}{\\colortbl\\red0\\green0\\blue0;} \\deflang1033\\horzdoc{\\*\\fchars }{\\*\\lchars }\\pard\\plain\\f0\\fs20 \\par }', u'Buttons', None), -(u'LicenseAgreementDlg', u'Buttons', u'RadioButtonGroup', 20, 187, 330, 40, 3, u'IAgree', None, u'Back', None), -(u'MaintenanceTypeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'ChangeLabel', None), -(u'MaintenanceTypeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'MaintenanceTypeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'MaintenanceTypeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'MaintenanceTypeDlg', u'Description', u'Text', 25, 23, 280, 20, 196611, None, u'Select the operation you wish to perform.', None, None), -(u'MaintenanceTypeDlg', u'Title', u'Text', 15, 6, 240, 15, 196611, None, u'[DlgTitleFont]Modify, Repair or Remove installation', None, None), -(u'MaintenanceTypeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'MaintenanceTypeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'MaintenanceTypeDlg', u'ChangeLabel', u'Text', 105, 65, 100, 10, 3, None, u'[DlgTitleFont]&Modify', u'ChangeButton', None), -(u'MaintenanceTypeDlg', u'ChangeButton', u'PushButton', 50, 65, 38, 38, 5767171, None, u'[CustomSetupIcon]', u'RepairLabel', u'Modify Installation|'), -(u'MaintenanceTypeDlg', u'RepairLabel', u'Text', 105, 114, 100, 10, 3, None, u'[DlgTitleFont]Re&pair', u'RepairButton', None), -(u'MaintenanceTypeDlg', u'ChangeText', u'Text', 105, 78, 230, 20, 3, None, u'Allows users to change the way features are installed.', None, None), -(u'MaintenanceTypeDlg', u'RemoveButton', u'PushButton', 50, 163, 38, 38, 5767171, None, u'[RemoveIcon]', u'Back', u'Remove Installation|'), -(u'MaintenanceTypeDlg', u'RemoveLabel', u'Text', 105, 163, 100, 10, 3, None, u'[DlgTitleFont]&Remove', u'RemoveButton', None), -(u'MaintenanceTypeDlg', u'RemoveText', u'Text', 105, 176, 230, 20, 3, None, u'Removes [ProductName] from your computer.', None, None), -(u'MaintenanceTypeDlg', u'RepairButton', u'PushButton', 50, 114, 38, 38, 5767171, None, u'[RepairIcon]', u'RemoveLabel', u'Repair Installation|'), -(u'MaintenanceTypeDlg', u'RepairText', u'Text', 105, 127, 230, 30, 3, None, u'Repairs errors in the most recent installation state - fixes missing or corrupt files, shortcuts and registry entries.', None, None), -(u'MaintenanceWelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'MaintenanceWelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'MaintenanceWelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'MaintenanceWelcomeDlg', u'Description', u'Text', 135, 70, 220, 60, 196611, None, u'The [Wizard] will allow you to change the way [ProductName] features are installed on your computer or even to remove [ProductName] from your computer. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'MaintenanceWelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'MaintenanceWelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'MaintenanceWelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'OutOfDiskDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'OutOfDiskDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'OK', None), -(u'OutOfDiskDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'OutOfDiskDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'OutOfDiskDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'Disk space required for the installation exceeds available disk space.', None, None), -(u'OutOfDiskDlg', u'OK', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_OK]', u'BannerBitmap', None), -(u'OutOfDiskDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Out of Disk Space', None, None), -(u'OutOfDiskDlg', u'VolumeList', u'VolumeCostList', 20, 100, 330, 120, 393223, None, u'{120}{70}{70}{70}{70}', None, None), -(u'OutOfRbDiskDlg', u'Text', u'Text', 20, 53, 330, 40, 3, None, u'The highlighted volumes do not have enough disk space available for the currently selected features. You can either remove some files from the highlighted volumes, or choose to install less features onto local drive(s), or select different destination drive(s).', None, None), -(u'OutOfRbDiskDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'No', None), -(u'OutOfRbDiskDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'OutOfRbDiskDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'OutOfRbDiskDlg', u'Description', u'Text', 20, 20, 280, 20, 196611, None, u'Disk space required for the installation exceeds available disk space.', None, None), -(u'OutOfRbDiskDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Out of Disk Space', None, None), -(u'OutOfRbDiskDlg', u'No', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_No]', u'Yes', None), -(u'OutOfRbDiskDlg', u'Yes', u'PushButton', 240, 243, 56, 17, 3, None, u'[ButtonText_Yes]', u'BannerBitmap', None), -(u'OutOfRbDiskDlg', u'VolumeList', u'VolumeCostList', 20, 140, 330, 80, 4587527, None, u'{120}{70}{70}{70}{70}', None, None), -(u'OutOfRbDiskDlg', u'Text2', u'Text', 20, 94, 330, 40, 3, None, u"Alternatively, you may choose to disable the installer's rollback functionality. This allows the installer to restore your computer's original state should the installation be interrupted in any way. Click Yes if you wish to take the risk to disable rollback.", None, None), -(u'ResumeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'ResumeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'ResumeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'ResumeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will complete the installation of [ProductName] on your computer. Click Install to continue or Cancel to exit the [Wizard].', None, None), -(u'ResumeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Resuming the [ProductName] [Wizard]', None, None), -(u'ResumeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Install', None), -(u'ResumeDlg', u'Install', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Install]', u'Cancel', None), -(u'SetupTypeDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'TypicalLabel', None), -(u'SetupTypeDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'SetupTypeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'SetupTypeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'SetupTypeDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Choose the setup type that best suits your needs', None, None), -(u'SetupTypeDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Choose Setup Type', None, None), -(u'SetupTypeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'SetupTypeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 1, None, u'[ButtonText_Next]', u'Cancel', None), -(u'SetupTypeDlg', u'TypicalLabel', u'Text', 105, 65, 100, 10, 3, None, u'[DlgTitleFont]&Typical', u'TypicalButton', None), -(u'SetupTypeDlg', u'CompleteButton', u'PushButton', 50, 171, 38, 38, 5767171, None, u'[CompleteSetupIcon]', u'Back', u'Complete Installation|'), -(u'SetupTypeDlg', u'CompleteLabel', u'Text', 105, 171, 100, 10, 3, None, u'[DlgTitleFont]C&omplete', u'CompleteButton', None), -(u'SetupTypeDlg', u'CompleteText', u'Text', 105, 184, 230, 20, 3, None, u'All program features will be installed. (Requires most disk space)', None, None), -(u'SetupTypeDlg', u'CustomButton', u'PushButton', 50, 118, 38, 38, 5767171, None, u'[CustomSetupIcon]', u'CompleteLabel', u'Custom Installation|'), -(u'SetupTypeDlg', u'CustomLabel', u'Text', 105, 118, 100, 10, 3, None, u'[DlgTitleFont]C&ustom', u'CustomButton', None), -(u'SetupTypeDlg', u'CustomText', u'Text', 105, 131, 230, 30, 3, None, u'Allows users to choose which program features will be installed and where they will be installed. Recommended for advanced users.', None, None), -(u'SetupTypeDlg', u'TypicalButton', u'PushButton', 50, 65, 38, 38, 5767171, None, u'[InstallerIcon]', u'CustomLabel', u'Typical Installation|'), -(u'SetupTypeDlg', u'TypicalText', u'Text', 105, 78, 230, 20, 3, None, u'Installs the most common program features. Recommended for most users.', None, None), -(u'UserRegistrationDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'NameLabel', None), -(u'UserRegistrationDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'UserRegistrationDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'UserRegistrationDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'UserRegistrationDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'Please enter your customer information', None, None), -(u'UserRegistrationDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Customer Information', None, None), -(u'UserRegistrationDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Next', None), -(u'UserRegistrationDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -(u'UserRegistrationDlg', u'OrganizationLabel', u'Text', 45, 110, 100, 15, 3, None, u'&Organization:', u'OrganizationEdit', None), -(u'UserRegistrationDlg', u'CDKeyEdit', u'MaskedEdit', 45, 159, 250, 16, 3, u'PIDKEY', u'[PIDTemplate]', u'Back', None), -(u'UserRegistrationDlg', u'CDKeyLabel', u'Text', 45, 147, 50, 10, 3, None, u'CD &Key:', u'CDKeyEdit', None), -(u'UserRegistrationDlg', u'OrganizationEdit', u'Edit', 45, 122, 220, 18, 3, u'COMPANYNAME', u'{80}', u'CDKeyLabel', None), -(u'UserRegistrationDlg', u'NameLabel', u'Text', 45, 73, 100, 15, 3, None, u'&User Name:', u'NameEdit', None), -(u'UserRegistrationDlg', u'NameEdit', u'Edit', 45, 85, 220, 18, 3, u'USERNAME', u'{80}', u'OrganizationLabel', None), -(u'VerifyReadyDlg', u'Text', u'Text', 25, 70, 320, 20, 3, None, u'Click Install to begin the installation. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyReadyDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyReadyDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyReadyDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyReadyDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyReadyDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'The [Wizard] is ready to begin the [InstallMode] installation', None, None), -(u'VerifyReadyDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Ready to Install', None, None), -(u'VerifyReadyDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Install', None), -(u'VerifyReadyDlg', u'Install', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Install]', u'Cancel', None), -(u'VerifyRemoveDlg', u'Text', u'Text', 25, 70, 320, 30, 3, None, u'Click Remove to remove [ProductName] from your computer. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyRemoveDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyRemoveDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyRemoveDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyRemoveDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyRemoveDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'You have chosen to remove the program from your computer.', None, None), -(u'VerifyRemoveDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Remove [ProductName]', None, None), -(u'VerifyRemoveDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Remove', None), -(u'VerifyRemoveDlg', u'Remove', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Remove]', u'Cancel', None), -(u'VerifyRepairDlg', u'Text', u'Text', 25, 70, 320, 30, 3, None, u'Click Repair to repair the installation of [ProductName]. If you want to review or change any of your installation settings, click Back. Click Cancel to exit the wizard.', None, None), -(u'VerifyRepairDlg', u'BannerBitmap', u'Bitmap', 0, 0, 374, 44, 1, None, u'[BannerBitmap]', u'Back', None), -(u'VerifyRepairDlg', u'BannerLine', u'Line', 0, 44, 374, 0, 1, None, None, None, None), -(u'VerifyRepairDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'VerifyRepairDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'BannerBitmap', None), -(u'VerifyRepairDlg', u'Description', u'Text', 25, 23, 280, 15, 196611, None, u'The [Wizard] is ready to begin the repair of [ProductName].', None, None), -(u'VerifyRepairDlg', u'Title', u'Text', 15, 6, 200, 15, 196611, None, u'[DlgTitleFont]Repair [ProductName]', None, None), -(u'VerifyRepairDlg', u'Back', u'PushButton', 180, 243, 56, 17, 3, None, u'[ButtonText_Back]', u'Repair', None), -(u'VerifyRepairDlg', u'Repair', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Repair]', u'Cancel', None), -(u'WaitForCostingDlg', u'Text', u'Text', 48, 15, 194, 30, 3, None, u'Please wait while the installer finishes determining your disk space requirements.', None, None), -(u'WaitForCostingDlg', u'Icon', u'Icon', 15, 15, 24, 24, 5242881, None, u'[ExclamationIcon]', None, u'Exclamation icon|'), -(u'WaitForCostingDlg', u'Return', u'PushButton', 102, 57, 56, 17, 3, None, u'[ButtonText_Return]', None, None), -(u'WelcomeDlg', u'Bitmap', u'Bitmap', 0, 0, 370, 234, 1, None, u'[DialogBitmap]', u'Back', None), -(u'WelcomeDlg', u'BottomLine', u'Line', 0, 234, 374, 0, 1, None, None, None, None), -(u'WelcomeDlg', u'Cancel', u'PushButton', 304, 243, 56, 17, 3, None, u'[ButtonText_Cancel]', u'Bitmap', None), -(u'WelcomeDlg', u'Description', u'Text', 135, 70, 220, 30, 196611, None, u'The [Wizard] will install [ProductName] on your computer. Click Next to continue or Cancel to exit the [Wizard].', None, None), -(u'WelcomeDlg', u'Title', u'Text', 135, 20, 220, 60, 196611, None, u'{\\VerdanaBold13}Welcome to the [ProductName] [Wizard]', None, None), -(u'WelcomeDlg', u'Back', u'PushButton', 180, 243, 56, 17, 1, None, u'[ButtonText_Back]', u'Next', None), -(u'WelcomeDlg', u'Next', u'PushButton', 236, 243, 56, 17, 3, None, u'[ButtonText_Next]', u'Cancel', None), -] - -ListBox = [ -] - -ActionText = [ -(u'InstallValidate', u'Validating install', None), -(u'InstallFiles', u'Copying new files', u'File: [1], Directory: [9], Size: [6]'), -(u'InstallAdminPackage', u'Copying network install files', u'File: [1], Directory: [9], Size: [6]'), -(u'FileCost', u'Computing space requirements', None), -(u'CostInitialize', u'Computing space requirements', None), -(u'CostFinalize', u'Computing space requirements', None), -(u'CreateShortcuts', u'Creating shortcuts', u'Shortcut: [1]'), -(u'PublishComponents', u'Publishing Qualified Components', u'Component ID: [1], Qualifier: [2]'), -(u'PublishFeatures', u'Publishing Product Features', u'Feature: [1]'), -(u'PublishProduct', u'Publishing product information', None), -(u'RegisterClassInfo', u'Registering Class servers', u'Class Id: [1]'), -(u'RegisterExtensionInfo', u'Registering extension servers', u'Extension: [1]'), -(u'RegisterMIMEInfo', u'Registering MIME info', u'MIME Content Type: [1], Extension: [2]'), -(u'RegisterProgIdInfo', u'Registering program identifiers', u'ProgId: [1]'), -(u'AllocateRegistrySpace', u'Allocating registry space', u'Free space: [1]'), -(u'AppSearch', u'Searching for installed applications', u'Property: [1], Signature: [2]'), -(u'BindImage', u'Binding executables', u'File: [1]'), -(u'CCPSearch', u'Searching for qualifying products', None), -(u'CreateFolders', u'Creating folders', u'Folder: [1]'), -(u'DeleteServices', u'Deleting services', u'Service: [1]'), -(u'DuplicateFiles', u'Creating duplicate files', u'File: [1], Directory: [9], Size: [6]'), -(u'FindRelatedProducts', u'Searching for related applications', u'Found application: [1]'), -(u'InstallODBC', u'Installing ODBC components', None), -(u'InstallServices', u'Installing new services', u'Service: [2]'), -(u'LaunchConditions', u'Evaluating launch conditions', None), -(u'MigrateFeatureStates', u'Migrating feature states from related applications', u'Application: [1]'), -(u'MoveFiles', u'Moving files', u'File: [1], Directory: [9], Size: [6]'), -(u'PatchFiles', u'Patching files', u'File: [1], Directory: [2], Size: [3]'), -(u'ProcessComponents', u'Updating component registration', None), -(u'RegisterComPlus', u'Registering COM+ Applications and Components', u'AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}'), -(u'RegisterFonts', u'Registering fonts', u'Font: [1]'), -(u'RegisterProduct', u'Registering product', u'[1]'), -(u'RegisterTypeLibraries', u'Registering type libraries', u'LibID: [1]'), -(u'RegisterUser', u'Registering user', u'[1]'), -(u'RemoveDuplicateFiles', u'Removing duplicated files', u'File: [1], Directory: [9]'), -(u'RemoveEnvironmentStrings', u'Updating environment strings', u'Name: [1], Value: [2], Action [3]'), -(u'RemoveExistingProducts', u'Removing applications', u'Application: [1], Command line: [2]'), -(u'RemoveFiles', u'Removing files', u'File: [1], Directory: [9]'), -(u'RemoveFolders', u'Removing folders', u'Folder: [1]'), -(u'RemoveIniValues', u'Removing INI files entries', u'File: [1], Section: [2], Key: [3], Value: [4]'), -(u'RemoveODBC', u'Removing ODBC components', None), -(u'RemoveRegistryValues', u'Removing system registry values', u'Key: [1], Name: [2]'), -(u'RemoveShortcuts', u'Removing shortcuts', u'Shortcut: [1]'), -(u'RMCCPSearch', u'Searching for qualifying products', None), -(u'SelfRegModules', u'Registering modules', u'File: [1], Folder: [2]'), -(u'SelfUnregModules', u'Unregistering modules', u'File: [1], Folder: [2]'), -(u'SetODBCFolders', u'Initializing ODBC directories', None), -(u'StartServices', u'Starting services', u'Service: [1]'), -(u'StopServices', u'Stopping services', u'Service: [1]'), -(u'UnpublishComponents', u'Unpublishing Qualified Components', u'Component ID: [1], Qualifier: [2]'), -(u'UnpublishFeatures', u'Unpublishing Product Features', u'Feature: [1]'), -(u'UnregisterClassInfo', u'Unregister Class servers', u'Class Id: [1]'), -(u'UnregisterComPlus', u'Unregistering COM+ Applications and Components', u'AppId: [1]{{, AppType: [2]}}'), -(u'UnregisterExtensionInfo', u'Unregistering extension servers', u'Extension: [1]'), -(u'UnregisterFonts', u'Unregistering fonts', u'Font: [1]'), -(u'UnregisterMIMEInfo', u'Unregistering MIME info', u'MIME Content Type: [1], Extension: [2]'), -(u'UnregisterProgIdInfo', u'Unregistering program identifiers', u'ProgId: [1]'), -(u'UnregisterTypeLibraries', u'Unregistering type libraries', u'LibID: [1]'), -(u'WriteEnvironmentStrings', u'Updating environment strings', u'Name: [1], Value: [2], Action [3]'), -(u'WriteIniValues', u'Writing INI files values', u'File: [1], Section: [2], Key: [3], Value: [4]'), -(u'WriteRegistryValues', u'Writing system registry values', u'Key: [1], Name: [2], Value: [3]'), -(u'Advertise', u'Advertising application', None), -(u'GenerateScript', u'Generating script operations for action:', u'[1]'), -(u'InstallSFPCatalogFile', u'Installing system catalog', u'File: [1], Dependencies: [2]'), -(u'MsiPublishAssemblies', u'Publishing assembly information', u'Application Context:[1], Assembly Name:[2]'), -(u'MsiUnpublishAssemblies', u'Unpublishing assembly information', u'Application Context:[1], Assembly Name:[2]'), -(u'Rollback', u'Rolling back action:', u'[1]'), -(u'RollbackCleanup', u'Removing backup files', u'File: [1]'), -(u'UnmoveFiles', u'Removing moved files', u'File: [1], Directory: [9]'), -(u'UnpublishProduct', u'Unpublishing product information', None), -] - -ControlCondition = [ -(u'CustomizeDlg', u'Browse', u'Hide', u'Installed'), -(u'CustomizeDlg', u'Location', u'Hide', u'Installed'), -(u'CustomizeDlg', u'LocationLabel', u'Hide', u'Installed'), -(u'LicenseAgreementDlg', u'Next', u'Disable', u'IAgree <> "Yes"'), -(u'LicenseAgreementDlg', u'Next', u'Enable', u'IAgree = "Yes"'), -] - -ControlEvent = [ -(u'AdminWelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminWelcomeDlg', u'Next', u'NewDialog', u'AdminRegistrationDlg', u'1', 2), -(u'AdminWelcomeDlg', u'Next', u'[InstallMode]', u'Server Image', u'1', 1), -(u'ExitDialog', u'Finish', u'EndDialog', u'Return', u'1', None), -(u'FatalError', u'Finish', u'EndDialog', u'Exit', u'1', None), -(u'PrepareDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'ProgressDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'UserExit', u'Finish', u'EndDialog', u'Exit', u'1', None), -(u'AdminBrowseDlg', u'Up', u'DirectoryListUp', u'0', u'1', None), -(u'AdminBrowseDlg', u'Cancel', u'Reset', u'0', u'1', 1), -(u'AdminBrowseDlg', u'Cancel', u'EndDialog', u'Return', u'1', 2), -(u'AdminBrowseDlg', u'NewFolder', u'DirectoryListNew', u'0', u'1', None), -(u'AdminBrowseDlg', u'OK', u'EndDialog', u'Return', u'1', 2), -(u'AdminBrowseDlg', u'OK', u'SetTargetPath', u'TARGETDIR', u'1', 1), -(u'AdminInstallPointDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminInstallPointDlg', u'Back', u'NewDialog', u'AdminRegistrationDlg', u'1', None), -(u'AdminInstallPointDlg', u'Next', u'SetTargetPath', u'TARGETDIR', u'1', 1), -(u'AdminInstallPointDlg', u'Next', u'NewDialog', u'VerifyReadyDlg', u'1', 2), -(u'AdminInstallPointDlg', u'Browse', u'SpawnDialog', u'AdminBrowseDlg', u'1', None), -(u'AdminRegistrationDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'AdminRegistrationDlg', u'Back', u'NewDialog', u'AdminWelcomeDlg', u'1', None), -(u'AdminRegistrationDlg', u'Next', u'NewDialog', u'AdminInstallPointDlg', u'ProductID', 2), -(u'AdminRegistrationDlg', u'Next', u'ValidateProductID', u'0', u'0', 1), -(u'BrowseDlg', u'Up', u'DirectoryListUp', u'0', u'1', None), -(u'BrowseDlg', u'Cancel', u'Reset', u'0', u'1', 1), -(u'BrowseDlg', u'Cancel', u'EndDialog', u'Return', u'1', 2), -(u'BrowseDlg', u'NewFolder', u'DirectoryListNew', u'0', u'1', None), -(u'BrowseDlg', u'OK', u'EndDialog', u'Return', u'1', 2), -(u'BrowseDlg', u'OK', u'SetTargetPath', u'[_BrowseProperty]', u'1', 1), -(u'CancelDlg', u'No', u'EndDialog', u'Return', u'1', None), -(u'CancelDlg', u'Yes', u'EndDialog', u'Exit', u'1', None), -(u'CustomizeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'CustomizeDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'InstallMode = "Change"', None), -(u'CustomizeDlg', u'Back', u'NewDialog', u'SetupTypeDlg', u'InstallMode = "Custom"', None), -(u'CustomizeDlg', u'Next', u'NewDialog', u'VerifyReadyDlg', u'1', None), -(u'CustomizeDlg', u'Browse', u'SelectionBrowse', u'BrowseDlg', u'1', None), -(u'CustomizeDlg', u'Reset', u'Reset', u'0', u'1', None), -(u'CustomizeDlg', u'DiskCost', u'SpawnDialog', u'DiskCostDlg', u'1', 2), -(u'DiskCostDlg', u'OK', u'EndDialog', u'Return', u'1', None), -(u'ErrorDlg', u'Y', u'EndDialog', u'ErrorYes', u'1', None), -(u'ErrorDlg', u'A', u'EndDialog', u'ErrorAbort', u'1', None), -(u'ErrorDlg', u'C', u'EndDialog', u'ErrorCancel', u'1', None), -(u'ErrorDlg', u'I', u'EndDialog', u'ErrorIgnore', u'1', None), -(u'ErrorDlg', u'N', u'EndDialog', u'ErrorNo', u'1', None), -(u'ErrorDlg', u'O', u'EndDialog', u'ErrorOk', u'1', None), -(u'ErrorDlg', u'R', u'EndDialog', u'ErrorRetry', u'1', None), -(u'FilesInUse', u'Retry', u'EndDialog', u'Retry', u'1', None), -(u'FilesInUse', u'Exit', u'EndDialog', u'Exit', u'1', None), -(u'FilesInUse', u'Ignore', u'EndDialog', u'Ignore', u'1', None), -(u'LicenseAgreementDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'LicenseAgreementDlg', u'Back', u'NewDialog', u'WelcomeDlg', u'1', None), -(u'LicenseAgreementDlg', u'Next', u'NewDialog', u'SetupTypeDlg', u'IAgree = "Yes" AND ShowUserRegistrationDlg <> 1', 3), -(u'LicenseAgreementDlg', u'Next', u'NewDialog', u'UserRegistrationDlg', u'IAgree = "Yes" AND ShowUserRegistrationDlg = 1', 1), -(u'LicenseAgreementDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 2), -(u'MaintenanceTypeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'MaintenanceTypeDlg', u'Back', u'NewDialog', u'MaintenanceWelcomeDlg', u'1', None), -(u'MaintenanceTypeDlg', u'ChangeButton', u'NewDialog', u'CustomizeDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[InstallMode]', u'Change', u'1', 1), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[Progress1]', u'Changing', u'1', 2), -(u'MaintenanceTypeDlg', u'ChangeButton', u'[Progress2]', u'changes', u'1', 3), -(u'MaintenanceTypeDlg', u'RemoveButton', u'NewDialog', u'VerifyRemoveDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[InstallMode]', u'Remove', u'1', 1), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[Progress1]', u'Removing', u'1', 2), -(u'MaintenanceTypeDlg', u'RemoveButton', u'[Progress2]', u'removes', u'1', 3), -(u'MaintenanceTypeDlg', u'RepairButton', u'NewDialog', u'VerifyRepairDlg', u'1', 4), -(u'MaintenanceTypeDlg', u'RepairButton', u'[InstallMode]', u'Repair', u'1', 1), -(u'MaintenanceTypeDlg', u'RepairButton', u'[Progress1]', u'Repairing', u'1', 2), -(u'MaintenanceTypeDlg', u'RepairButton', u'[Progress2]', u'repairs', u'1', 3), -(u'MaintenanceWelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'MaintenanceWelcomeDlg', u'Next', u'NewDialog', u'MaintenanceTypeDlg', u'1', 2), -(u'MaintenanceWelcomeDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 1), -(u'OutOfDiskDlg', u'OK', u'EndDialog', u'Return', u'1', None), -(u'OutOfRbDiskDlg', u'No', u'EndDialog', u'Return', u'1', None), -(u'OutOfRbDiskDlg', u'Yes', u'EndDialog', u'Return', u'1', 2), -(u'OutOfRbDiskDlg', u'Yes', u'EnableRollback', u'False', u'1', 1), -(u'ResumeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'ResumeDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'ResumeDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 2), -(u'ResumeDlg', u'Install', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 6), -(u'ResumeDlg', u'Install', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 3), -(u'ResumeDlg', u'Install', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 1), -(u'ResumeDlg', u'Install', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'SetupTypeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'SetupTypeDlg', u'Back', u'NewDialog', u'LicenseAgreementDlg', u'ShowUserRegistrationDlg <> 1', None), -(u'SetupTypeDlg', u'Back', u'NewDialog', u'UserRegistrationDlg', u'ShowUserRegistrationDlg = 1', None), -(u'SetupTypeDlg', u'CompleteButton', u'NewDialog', u'VerifyReadyDlg', u'1', 3), -(u'SetupTypeDlg', u'CompleteButton', u'[InstallMode]', u'Complete', u'1', 1), -(u'SetupTypeDlg', u'CompleteButton', u'SetInstallLevel', u'1000', u'1', 2), -(u'SetupTypeDlg', u'CustomButton', u'NewDialog', u'CustomizeDlg', u'1', 2), -(u'SetupTypeDlg', u'CustomButton', u'[InstallMode]', u'Custom', u'1', 1), -(u'SetupTypeDlg', u'TypicalButton', u'NewDialog', u'VerifyReadyDlg', u'1', 3), -(u'SetupTypeDlg', u'TypicalButton', u'[InstallMode]', u'Typical', u'1', 1), -(u'SetupTypeDlg', u'TypicalButton', u'SetInstallLevel', u'3', u'1', 2), -(u'UserRegistrationDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'UserRegistrationDlg', u'Back', u'NewDialog', u'LicenseAgreementDlg', u'1', None), -(u'UserRegistrationDlg', u'Next', u'NewDialog', u'SetupTypeDlg', u'ProductID', 3), -(u'UserRegistrationDlg', u'Next', u'ValidateProductID', u'0', u'0', 1), -(u'UserRegistrationDlg', u'Next', u'SpawnWaitDialog', u'WaitForCostingDlg', u'CostingComplete = 1', 2), -(u'VerifyReadyDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'AdminInstallPointDlg', u'InstallMode = "Server Image"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'CustomizeDlg', u'InstallMode = "Custom" OR InstallMode = "Change"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'InstallMode = "Repair"', None), -(u'VerifyReadyDlg', u'Back', u'NewDialog', u'SetupTypeDlg', u'InstallMode = "Typical" OR InstallMode = "Complete"', None), -(u'VerifyReadyDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 3), -(u'VerifyReadyDlg', u'Install', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 1), -(u'VerifyReadyDlg', u'Install', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 5), -(u'VerifyReadyDlg', u'Install', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 2), -(u'VerifyReadyDlg', u'Install', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'VerifyRemoveDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyRemoveDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'1', None), -(u'VerifyRemoveDlg', u'Remove', u'Remove', u'All', u'OutOfDiskSpace <> 1', 1), -(u'VerifyRemoveDlg', u'Remove', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 4), -(u'VerifyRemoveDlg', u'Remove', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 2), -(u'VerifyRemoveDlg', u'Remove', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 6), -(u'VerifyRemoveDlg', u'Remove', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 3), -(u'VerifyRemoveDlg', u'Remove', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'VerifyRepairDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'VerifyRepairDlg', u'Back', u'NewDialog', u'MaintenanceTypeDlg', u'1', None), -(u'VerifyRepairDlg', u'Repair', u'EndDialog', u'Return', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 5), -(u'VerifyRepairDlg', u'Repair', u'EndDialog', u'Return', u'OutOfDiskSpace <> 1', 3), -(u'VerifyRepairDlg', u'Repair', u'SpawnDialog', u'OutOfDiskDlg', u'(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")', 7), -(u'VerifyRepairDlg', u'Repair', u'SpawnDialog', u'OutOfRbDiskDlg', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)', 4), -(u'VerifyRepairDlg', u'Repair', u'EnableRollback', u'False', u'OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"', 6), -(u'VerifyRepairDlg', u'Repair', u'Reinstall', u'All', u'OutOfDiskSpace <> 1', 2), -(u'VerifyRepairDlg', u'Repair', u'ReinstallMode', u'ecmus', u'OutOfDiskSpace <> 1', 1), -(u'WaitForCostingDlg', u'Return', u'EndDialog', u'Exit', u'1', None), -(u'WelcomeDlg', u'Cancel', u'SpawnDialog', u'CancelDlg', u'1', None), -(u'WelcomeDlg', u'Next', u'NewDialog', u'LicenseAgreementDlg', u'1', None), -] - -Dialog = [ -(u'AdminWelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -(u'ExitDialog', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'FatalError', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'PrepareDlg', 50, 50, 370, 270, 1, u'[ProductName] [Setup]', u'Cancel', u'Cancel', u'Cancel'), -(u'ProgressDlg', 50, 50, 370, 270, 1, u'[ProductName] [Setup]', u'Cancel', u'Cancel', u'Cancel'), -(u'UserExit', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Finish', u'Finish', u'Finish'), -(u'AdminBrowseDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'PathEdit', u'OK', u'Cancel'), -(u'AdminInstallPointDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Text', u'Next', u'Cancel'), -(u'AdminRegistrationDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OrganizationLabel', u'Next', u'Cancel'), -(u'BrowseDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'PathEdit', u'OK', u'Cancel'), -(u'CancelDlg', 50, 10, 260, 85, 3, u'[ProductName] [Setup]', u'No', u'No', u'No'), -(u'CustomizeDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Tree', u'Next', u'Cancel'), -(u'DiskCostDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OK', u'OK', u'OK'), -(u'ErrorDlg', 50, 10, 270, 105, 65539, u'Installer Information', u'ErrorText', None, None), -(u'FilesInUse', 50, 50, 370, 270, 19, u'[ProductName] [Setup]', u'Retry', u'Retry', u'Retry'), -(u'LicenseAgreementDlg', 50, 50, 370, 270, 3, u'[ProductName] License Agreement', u'Buttons', u'Next', u'Cancel'), -(u'MaintenanceTypeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'ChangeLabel', u'ChangeButton', u'Cancel'), -(u'MaintenanceWelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -(u'OutOfDiskDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'OK', u'OK', u'OK'), -(u'OutOfRbDiskDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'No', u'No', u'No'), -(u'ResumeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Install', u'Install', u'Cancel'), -(u'SetupTypeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'TypicalLabel', u'TypicalButton', u'Cancel'), -(u'UserRegistrationDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'NameLabel', u'Next', u'Cancel'), -(u'VerifyReadyDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Install', u'Install', u'Cancel'), -(u'VerifyRemoveDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Back', u'Back', u'Cancel'), -(u'VerifyRepairDlg', 50, 50, 370, 270, 35, u'[ProductName] [Setup]', u'Repair', u'Repair', u'Cancel'), -(u'WaitForCostingDlg', 50, 10, 260, 85, 3, u'[ProductName] [Setup]', u'Return', u'Return', u'Return'), -(u'WelcomeDlg', 50, 50, 370, 270, 3, u'[ProductName] [Setup]', u'Next', u'Next', u'Cancel'), -] - -EventMapping = [ -(u'PrepareDlg', u'ActionData', u'ActionData', u'Text'), -(u'PrepareDlg', u'ActionText', u'ActionText', u'Text'), -(u'ProgressDlg', u'ActionText', u'ActionText', u'Text'), -(u'ProgressDlg', u'ProgressBar', u'SetProgress', u'Progress'), -(u'AdminBrowseDlg', u'DirectoryCombo', u'IgnoreChange', u'IgnoreChange'), -(u'BrowseDlg', u'DirectoryCombo', u'IgnoreChange', u'IgnoreChange'), -(u'CustomizeDlg', u'Next', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'Reset', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'DiskCost', u'SelectionNoItems', u'Enabled'), -(u'CustomizeDlg', u'ItemDescription', u'SelectionDescription', u'Text'), -(u'CustomizeDlg', u'ItemSize', u'SelectionSize', u'Text'), -(u'CustomizeDlg', u'Location', u'SelectionPath', u'Text'), -(u'CustomizeDlg', u'Location', u'SelectionPathOn', u'Visible'), -(u'CustomizeDlg', u'LocationLabel', u'SelectionPathOn', u'Visible'), -] - -InstallExecuteSequence = [ -(u'InstallValidate', None, 1400), -(u'InstallInitialize', None, 1500), -(u'InstallFinalize', None, 6600), -(u'InstallFiles', None, 4000), -(u'FileCost', None, 900), -(u'CostInitialize', None, 800), -(u'CostFinalize', None, 1000), -(u'CreateShortcuts', None, 4500), -(u'PublishComponents', None, 6200), -(u'PublishFeatures', None, 6300), -(u'PublishProduct', None, 6400), -(u'RegisterClassInfo', None, 4600), -(u'RegisterExtensionInfo', None, 4700), -(u'RegisterMIMEInfo', None, 4900), -(u'RegisterProgIdInfo', None, 4800), -(u'ValidateProductID', None, 700), -(u'AllocateRegistrySpace', u'NOT Installed', 1550), -(u'AppSearch', None, 400), -(u'BindImage', None, 4300), -(u'CCPSearch', u'NOT Installed', 500), -(u'CreateFolders', None, 3700), -(u'DeleteServices', u'VersionNT', 2000), -(u'DuplicateFiles', None, 4210), -(u'FindRelatedProducts', None, 200), -(u'InstallODBC', None, 5400), -(u'InstallServices', u'VersionNT', 5800), -(u'LaunchConditions', None, 100), -(u'MigrateFeatureStates', None, 1200), -(u'MoveFiles', None, 3800), -(u'PatchFiles', None, 4090), -(u'ProcessComponents', None, 1600), -(u'RegisterComPlus', None, 5700), -(u'RegisterFonts', None, 5300), -(u'RegisterProduct', None, 6100), -(u'RegisterTypeLibraries', None, 5500), -(u'RegisterUser', None, 6000), -(u'RemoveDuplicateFiles', None, 3400), -(u'RemoveEnvironmentStrings', None, 3300), -(u'RemoveExistingProducts', None, 6700), -(u'RemoveFiles', None, 3500), -(u'RemoveFolders', None, 3600), -(u'RemoveIniValues', None, 3100), -(u'RemoveODBC', None, 2400), -(u'RemoveRegistryValues', None, 2600), -(u'RemoveShortcuts', None, 3200), -(u'RMCCPSearch', u'NOT Installed', 600), -(u'SelfRegModules', None, 5600), -(u'SelfUnregModules', None, 2200), -(u'SetODBCFolders', None, 1100), -(u'StartServices', u'VersionNT', 5900), -(u'StopServices', u'VersionNT', 1900), -(u'UnpublishComponents', None, 1700), -(u'UnpublishFeatures', None, 1800), -(u'UnregisterClassInfo', None, 2700), -(u'UnregisterComPlus', None, 2100), -(u'UnregisterExtensionInfo', None, 2800), -(u'UnregisterFonts', None, 2500), -(u'UnregisterMIMEInfo', None, 3000), -(u'UnregisterProgIdInfo', None, 2900), -(u'UnregisterTypeLibraries', None, 2300), -(u'WriteEnvironmentStrings', None, 5200), -(u'WriteIniValues', None, 5100), -(u'WriteRegistryValues', None, 5000), -] - -InstallUISequence = [ -#(u'FileCost', None, 900), -#(u'CostInitialize', None, 800), -#(u'CostFinalize', None, 1000), -#(u'ExecuteAction', None, 1300), -#(u'ExitDialog', None, -1), -#(u'FatalError', None, -3), -(u'PrepareDlg', None, 140), -(u'ProgressDlg', None, 1280), -#(u'UserExit', None, -2), -(u'MaintenanceWelcomeDlg', u'Installed AND NOT RESUME AND NOT Preselected', 1250), -(u'ResumeDlg', u'Installed AND (RESUME OR Preselected)', 1240), -(u'WelcomeDlg', u'NOT Installed', 1230), -#(u'AppSearch', None, 400), -#(u'CCPSearch', u'NOT Installed', 500), -#(u'FindRelatedProducts', None, 200), -#(u'LaunchConditions', None, 100), -#(u'MigrateFeatureStates', None, 1200), -#(u'RMCCPSearch', u'NOT Installed', 600), -] - -ListView = [ -] - -RadioButton = [ -(u'IAgree', 1, u'Yes', 5, 0, 250, 15, u'{\\DlgFont8}I &accept the terms in the License Agreement', None), -(u'IAgree', 2, u'No', 5, 20, 250, 15, u'{\\DlgFont8}I &do not accept the terms in the License Agreement', None), -] - -TextStyle = [ -(u'DlgFont8', u'Tahoma', 8, None, 0), -(u'DlgFontBold8', u'Tahoma', 8, None, 1), -(u'VerdanaBold13', u'Verdana', 13, None, 1), -] - -UIText = [ -(u'AbsentPath', None), -(u'bytes', u'bytes'), -(u'GB', u'GB'), -(u'KB', u'KB'), -(u'MB', u'MB'), -(u'MenuAbsent', u'Entire feature will be unavailable'), -(u'MenuAdvertise', u'Feature will be installed when required'), -(u'MenuAllCD', u'Entire feature will be installed to run from CD'), -(u'MenuAllLocal', u'Entire feature will be installed on local hard drive'), -(u'MenuAllNetwork', u'Entire feature will be installed to run from network'), -(u'MenuCD', u'Will be installed to run from CD'), -(u'MenuLocal', u'Will be installed on local hard drive'), -(u'MenuNetwork', u'Will be installed to run from network'), -(u'ScriptInProgress', u'Gathering required information...'), -(u'SelAbsentAbsent', u'This feature will remain uninstalled'), -(u'SelAbsentAdvertise', u'This feature will be set to be installed when required'), -(u'SelAbsentCD', u'This feature will be installed to run from CD'), -(u'SelAbsentLocal', u'This feature will be installed on the local hard drive'), -(u'SelAbsentNetwork', u'This feature will be installed to run from the network'), -(u'SelAdvertiseAbsent', u'This feature will become unavailable'), -(u'SelAdvertiseAdvertise', u'Will be installed when required'), -(u'SelAdvertiseCD', u'This feature will be available to run from CD'), -(u'SelAdvertiseLocal', u'This feature will be installed on your local hard drive'), -(u'SelAdvertiseNetwork', u'This feature will be available to run from the network'), -(u'SelCDAbsent', u"This feature will be uninstalled completely, you won't be able to run it from CD"), -(u'SelCDAdvertise', u'This feature will change from run from CD state to set to be installed when required'), -(u'SelCDCD', u'This feature will remain to be run from CD'), -(u'SelCDLocal', u'This feature will change from run from CD state to be installed on the local hard drive'), -(u'SelChildCostNeg', u'This feature frees up [1] on your hard drive.'), -(u'SelChildCostPos', u'This feature requires [1] on your hard drive.'), -(u'SelCostPending', u'Compiling cost for this feature...'), -(u'SelLocalAbsent', u'This feature will be completely removed'), -(u'SelLocalAdvertise', u'This feature will be removed from your local hard drive, but will be set to be installed when required'), -(u'SelLocalCD', u'This feature will be removed from your local hard drive, but will be still available to run from CD'), -(u'SelLocalLocal', u'This feature will remain on you local hard drive'), -(u'SelLocalNetwork', u'This feature will be removed from your local hard drive, but will be still available to run from the network'), -(u'SelNetworkAbsent', u"This feature will be uninstalled completely, you won't be able to run it from the network"), -(u'SelNetworkAdvertise', u'This feature will change from run from network state to set to be installed when required'), -(u'SelNetworkLocal', u'This feature will change from run from network state to be installed on the local hard drive'), -(u'SelNetworkNetwork', u'This feature will remain to be run from the network'), -(u'SelParentCostNegNeg', u'This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.'), -(u'SelParentCostNegPos', u'This feature frees up [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.'), -(u'SelParentCostPosNeg', u'This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures free up [4] on your hard drive.'), -(u'SelParentCostPosPos', u'This feature requires [1] on your hard drive. It has [2] of [3] subfeatures selected. The subfeatures require [4] on your hard drive.'), -(u'TimeRemaining', u'Time remaining: {[1] minutes }{[2] seconds}'), -(u'VolumeCostAvailable', u'Available'), -(u'VolumeCostDifference', u'Difference'), -(u'VolumeCostRequired', u'Required'), -(u'VolumeCostSize', u'Disk Size'), -(u'VolumeCostVolume', u'Volume'), -] - -_Validation = [ -(u'AdminExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdminExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdminExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AdminUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdminUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdminUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'Condition', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Expression evaluated to determine if Level in the Feature table is to change.'), -(u'Condition', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Reference to a Feature entry in Feature table.'), -(u'Condition', u'Level', u'N', 0, 32767, None, None, None, None, u'New selection Level to set in Feature table if Condition evaluates to TRUE.'), -(u'AdvtExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdvtExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdvtExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'BBControl', u'Type', u'N', None, None, None, None, u'Identifier', None, u'The type of the control.'), -(u'BBControl', u'BBControl', u'N', None, None, None, None, u'Identifier', None, u'Name of the control. This name must be unique within a billboard, but can repeat on different billboard.'), -(u'BBControl', u'Billboard_', u'N', None, None, u'Billboard', 1, u'Identifier', None, u'External key to the Billboard table, name of the billboard.'), -(u'BBControl', u'X', u'N', 0, 32767, None, None, None, None, u'Horizontal coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'BBControl', u'Y', u'N', 0, 32767, None, None, None, None, u'Vertical coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'BBControl', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the control.'), -(u'BBControl', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the control.'), -(u'BBControl', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this control.'), -(u'BBControl', u'Text', u'Y', None, None, None, None, u'Text', None, u'A string used to set the initial text contained within a control (if appropriate).'), -(u'Billboard', u'Action', u'Y', None, None, None, None, u'Identifier', None, u'The name of an action. The billboard is displayed during the progress messages received from this action.'), -(u'Billboard', u'Billboard', u'N', None, None, None, None, u'Identifier', None, u'Name of the billboard.'), -(u'Billboard', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'An external key to the Feature Table. The billboard is shown only if this feature is being installed.'), -(u'Billboard', u'Ordering', u'Y', 0, 32767, None, None, None, None, u'A positive integer. If there is more than one billboard corresponding to an action they will be shown in the order defined by this column.'), -(u'Binary', u'Name', u'N', None, None, None, None, u'Identifier', None, u'Unique key identifying the binary data.'), -(u'Binary', u'Data', u'N', None, None, None, None, u'Binary', None, u'The unformatted binary data.'), -(u'CheckBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to the item.'), -(u'CheckBox', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value string associated with the item.'), -(u'Property', u'Property', u'N', None, None, None, None, u'Identifier', None, u'Name of property, uppercase if settable by launcher or loader.'), -(u'Property', u'Value', u'N', None, None, None, None, u'Text', None, u'String value for property. Never null or empty.'), -(u'ComboBox', u'Text', u'Y', None, None, None, None, u'Formatted', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ComboBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same combobox.'), -(u'ComboBox', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ComboBox', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list.\tThe integers do not have to be consecutive.'), -(u'Control', u'Type', u'N', None, None, None, None, u'Identifier', None, u'The type of the control.'), -(u'Control', u'X', u'N', 0, 32767, None, None, None, None, u'Horizontal coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'Control', u'Y', u'N', 0, 32767, None, None, None, None, u'Vertical coordinate of the upper left corner of the bounding rectangle of the control.'), -(u'Control', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the control.'), -(u'Control', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the control.'), -(u'Control', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this control.'), -(u'Control', u'Text', u'Y', None, None, None, None, u'Formatted', None, u'A string used to set the initial text contained within a control (if appropriate).'), -(u'Control', u'Property', u'Y', None, None, None, None, u'Identifier', None, u'The name of a defined property to be linked to this control. '), -(u'Control', u'Control', u'N', None, None, None, None, u'Identifier', None, u'Name of the control. This name must be unique within a dialog, but can repeat on different dialogs. '), -(u'Control', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'External key to the Dialog table, name of the dialog.'), -(u'Control', u'Control_Next', u'Y', None, None, u'Control', 2, u'Identifier', None, u'The name of an other control on the same dialog. This link defines the tab order of the controls. The links have to form one or more cycles!'), -(u'Control', u'Help', u'Y', None, None, None, None, u'Text', None, u'The help strings used with the button. The text is optional. '), -(u'Icon', u'Name', u'N', None, None, None, None, u'Identifier', None, u'Primary key. Name of the icon file.'), -(u'Icon', u'Data', u'N', None, None, None, None, u'Binary', None, u'Binary stream. The binary icon data in PE (.DLL or .EXE) or icon (.ICO) format.'), -(u'ListBox', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ListBox', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same listbox.'), -(u'ListBox', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ListBox', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'ActionText', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to be described.'), -(u'ActionText', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description displayed in progress dialog and log when action is executing.'), -(u'ActionText', u'Template', u'Y', None, None, None, None, u'Template', None, u'Optional localized format template used to format action data records for display during action execution.'), -(u'ControlCondition', u'Action', u'N', None, None, None, None, None, u'Default;Disable;Enable;Hide;Show', u'The desired action to be taken on the specified control.'), -(u'ControlCondition', u'Condition', u'N', None, None, None, None, u'Condition', None, u'A standard conditional statement that specifies under which conditions the action should be triggered.'), -(u'ControlCondition', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the dialog.'), -(u'ControlCondition', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control.'), -(u'ControlEvent', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'A standard conditional statement that specifies under which conditions an event should be triggered.'), -(u'ControlEvent', u'Ordering', u'Y', 0, 2147483647, None, None, None, None, u'An integer used to order several events tied to the same control. Can be left blank.'), -(u'ControlEvent', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the dialog.'), -(u'ControlEvent', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control'), -(u'ControlEvent', u'Event', u'N', None, None, None, None, u'Formatted', None, u'An identifier that specifies the type of the event that should take place when the user interacts with control specified by the first two entries.'), -(u'ControlEvent', u'Argument', u'N', None, None, None, None, u'Formatted', None, u'A value to be used as a modifier when triggering a particular event.'), -(u'Dialog', u'Width', u'N', 0, 32767, None, None, None, None, u'Width of the bounding rectangle of the dialog.'), -(u'Dialog', u'Height', u'N', 0, 32767, None, None, None, None, u'Height of the bounding rectangle of the dialog.'), -(u'Dialog', u'Attributes', u'Y', 0, 2147483647, None, None, None, None, u'A 32-bit word that specifies the attribute flags to be applied to this dialog.'), -(u'Dialog', u'Title', u'Y', None, None, None, None, u'Formatted', None, u"A text string specifying the title to be displayed in the title bar of the dialog's window."), -(u'Dialog', u'Dialog', u'N', None, None, None, None, u'Identifier', None, u'Name of the dialog.'), -(u'Dialog', u'HCentering', u'N', 0, 100, None, None, None, None, u'Horizontal position of the dialog on a 0-100 scale. 0 means left end, 100 means right end of the screen, 50 center.'), -(u'Dialog', u'VCentering', u'N', 0, 100, None, None, None, None, u'Vertical position of the dialog on a 0-100 scale. 0 means top end, 100 means bottom end of the screen, 50 center.'), -(u'Dialog', u'Control_First', u'N', None, None, u'Control', 2, u'Identifier', None, u'Defines the control that has the focus when the dialog is created.'), -(u'Dialog', u'Control_Default', u'Y', None, None, u'Control', 2, u'Identifier', None, u'Defines the default control. Hitting return is equivalent to pushing this button.'), -(u'Dialog', u'Control_Cancel', u'Y', None, None, u'Control', 2, u'Identifier', None, u'Defines the cancel control. Hitting escape or clicking on the close icon on the dialog is equivalent to pushing this button.'), -(u'EventMapping', u'Dialog_', u'N', None, None, u'Dialog', 1, u'Identifier', None, u'A foreign key to the Dialog table, name of the Dialog.'), -(u'EventMapping', u'Control_', u'N', None, None, u'Control', 2, u'Identifier', None, u'A foreign key to the Control table, name of the control.'), -(u'EventMapping', u'Event', u'N', None, None, None, None, u'Identifier', None, u'An identifier that specifies the type of the event that the control subscribes to.'), -(u'EventMapping', u'Attribute', u'N', None, None, None, None, u'Identifier', None, u'The name of the control attribute, that is set when this event is received.'), -(u'InstallExecuteSequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'InstallExecuteSequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'InstallExecuteSequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AppSearch', u'Property', u'N', None, None, None, None, u'Identifier', None, u'The property associated with a Signature'), -(u'AppSearch', u'Signature_', u'N', None, None, u'Signature;RegLocator;IniLocator;DrLocator;CompLocator', 1, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables.'), -(u'BindImage', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'The index into the File table. This must be an executable file.'), -(u'BindImage', u'Path', u'Y', None, None, None, None, u'Paths', None, u'A list of ; delimited paths that represent the paths to be searched for the import DLLS. The list is usually a list of properties each enclosed within square brackets [] .'), -(u'CCPSearch', u'Signature_', u'N', None, None, u'Signature;RegLocator;IniLocator;DrLocator;CompLocator', 1, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature, RegLocator, IniLocator, CompLocator and the DrLocator tables.'), -(u'InstallUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'InstallUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'InstallUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'ListView', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible text to be assigned to the item. Optional. If this entry or the entire column is missing, the text is the same as the value.'), -(u'ListView', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this item. All the items tied to the same property become part of the same listview.'), -(u'ListView', u'Value', u'N', None, None, None, None, u'Identifier', None, u'The value string associated with this item. Selecting the line will set the associated property to this value.'), -(u'ListView', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'ListView', u'Binary_', u'Y', None, None, u'Binary', 1, u'Identifier', None, u'The name of the icon to be displayed with the icon. The binary information is looked up from the Binary Table.'), -(u'RadioButton', u'X', u'N', 0, 32767, None, None, None, None, u'The horizontal coordinate of the upper left corner of the bounding rectangle of the radio button.'), -(u'RadioButton', u'Y', u'N', 0, 32767, None, None, None, None, u'The vertical coordinate of the upper left corner of the bounding rectangle of the radio button.'), -(u'RadioButton', u'Width', u'N', 0, 32767, None, None, None, None, u'The width of the button.'), -(u'RadioButton', u'Height', u'N', 0, 32767, None, None, None, None, u'The height of the button.'), -(u'RadioButton', u'Text', u'Y', None, None, None, None, u'Text', None, u'The visible title to be assigned to the radio button.'), -(u'RadioButton', u'Property', u'N', None, None, None, None, u'Identifier', None, u'A named property to be tied to this radio button. All the buttons tied to the same property become part of the same group.'), -(u'RadioButton', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value string associated with this button. Selecting the button will set the associated property to this value.'), -(u'RadioButton', u'Order', u'N', 1, 32767, None, None, None, None, u'A positive integer used to determine the ordering of the items within one list..The integers do not have to be consecutive.'), -(u'RadioButton', u'Help', u'Y', None, None, None, None, u'Text', None, u'The help strings used with the button. The text is optional.'), -(u'TextStyle', u'TextStyle', u'N', None, None, None, None, u'Identifier', None, u'Name of the style. The primary key of this table. This name is embedded in the texts to indicate a style change.'), -(u'TextStyle', u'FaceName', u'N', None, None, None, None, u'Text', None, u'A string indicating the name of the font used. Required. The string must be at most 31 characters long.'), -(u'TextStyle', u'Size', u'N', 0, 32767, None, None, None, None, u'The size of the font used. This size is given in our units (1/12 of the system font height). Assuming that the system font is set to 12 point size, this is equivalent to the point size.'), -(u'TextStyle', u'Color', u'Y', 0, 16777215, None, None, None, None, u'A long integer indicating the color of the string in the RGB format (Red, Green, Blue each 0-255, RGB = R + 256*G + 256^2*B).'), -(u'TextStyle', u'StyleBits', u'Y', 0, 15, None, None, None, None, u'A combination of style bits.'), -(u'UIText', u'Text', u'Y', None, None, None, None, u'Text', None, u'The localized version of the string.'), -(u'UIText', u'Key', u'N', None, None, None, None, u'Identifier', None, u'A unique key that identifies the particular string.'), -(u'_Validation', u'Table', u'N', None, None, None, None, u'Identifier', None, u'Name of table'), -(u'_Validation', u'Description', u'Y', None, None, None, None, u'Text', None, u'Description of column'), -(u'_Validation', u'Column', u'N', None, None, None, None, u'Identifier', None, u'Name of column'), -(u'_Validation', u'Nullable', u'N', None, None, None, None, None, u'Y;N;@', u'Whether the column is nullable'), -(u'_Validation', u'MinValue', u'Y', -2147483647, 2147483647, None, None, None, None, u'Minimum value allowed'), -(u'_Validation', u'MaxValue', u'Y', -2147483647, 2147483647, None, None, None, None, u'Maximum value allowed'), -(u'_Validation', u'KeyTable', u'Y', None, None, None, None, u'Identifier', None, u'For foreign key, Name of table to which data must link'), -(u'_Validation', u'KeyColumn', u'Y', 1, 32, None, None, None, None, u'Column to which foreign key connects'), -(u'_Validation', u'Category', u'Y', None, None, None, None, None, u'Text;Formatted;Template;Condition;Guid;Path;Version;Language;Identifier;Binary;UpperCase;LowerCase;Filename;Paths;AnyPath;WildCardFilename;RegPath;KeyFormatted;CustomSource;Property;Cabinet;Shortcut;URL', u'String category'), -(u'_Validation', u'Set', u'Y', None, None, None, None, u'Text', None, u'Set of values that are permitted'), -(u'AdvtUISequence', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Name of action to invoke, either in the engine or the handler DLL.'), -(u'AdvtUISequence', u'Sequence', u'Y', -4, 32767, None, None, None, None, u'Number that determines the sort order in which the actions are to be executed. Leave blank to suppress action.'), -(u'AdvtUISequence', u'Condition', u'Y', None, None, None, None, u'Condition', None, u'Optional expression which skips the action if evaluates to expFalse.If the expression syntax is invalid, the engine will terminate, returning iesBadActionData.'), -(u'AppId', u'AppId', u'N', None, None, None, None, u'Guid', None, None), -(u'AppId', u'ActivateAtStorage', u'Y', 0, 1, None, None, None, None, None), -(u'AppId', u'DllSurrogate', u'Y', None, None, None, None, u'Text', None, None), -(u'AppId', u'LocalService', u'Y', None, None, None, None, u'Text', None, None), -(u'AppId', u'RemoteServerName', u'Y', None, None, None, None, u'Formatted', None, None), -(u'AppId', u'RunAsInteractiveUser', u'Y', 0, 1, None, None, None, None, None), -(u'AppId', u'ServiceParameters', u'Y', None, None, None, None, u'Text', None, None), -(u'Feature', u'Attributes', u'N', None, None, None, None, None, u'0;1;2;4;5;6;8;9;10;16;17;18;20;21;22;24;25;26;32;33;34;36;37;38;48;49;50;52;53;54', u'Feature attributes'), -(u'Feature', u'Description', u'Y', None, None, None, None, u'Text', None, u'Longer descriptive text describing a visible feature item.'), -(u'Feature', u'Title', u'Y', None, None, None, None, u'Text', None, u'Short text identifying a visible feature item.'), -(u'Feature', u'Feature', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular feature record.'), -(u'Feature', u'Directory_', u'Y', None, None, u'Directory', 1, u'UpperCase', None, u'The name of the Directory that can be configured by the UI. A non-null value will enable the browse button.'), -(u'Feature', u'Level', u'N', 0, 32767, None, None, None, None, u'The install level at which record will be initially selected. An install level of 0 will disable an item and prevent its display.'), -(u'Feature', u'Display', u'Y', 0, 32767, None, None, None, None, u'Numeric sort order, used to force a specific display ordering.'), -(u'Feature', u'Feature_Parent', u'Y', None, None, u'Feature', 1, u'Identifier', None, u'Optional key of a parent record in the same table. If the parent is not selected, then the record will not be installed. Null indicates a root item.'), -(u'File', u'Sequence', u'N', 1, 32767, None, None, None, None, u'Sequence with respect to the media images; order must track cabinet order.'), -(u'File', u'Attributes', u'Y', 0, 32767, None, None, None, None, u'Integer containing bit flags representing file attributes (with the decimal value of each bit position in parentheses)'), -(u'File', u'File', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token, must match identifier in cabinet. For uncompressed files, this field is ignored.'), -(u'File', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the file.'), -(u'File', u'FileName', u'N', None, None, None, None, u'Filename', None, u'File name used for installation, may be localized. This may contain a "short name|long name" pair.'), -(u'File', u'FileSize', u'N', 0, 2147483647, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'File', u'Language', u'Y', None, None, None, None, u'Language', None, u'List of decimal language Ids, comma-separated if more than one.'), -(u'File', u'Version', u'Y', None, None, u'File', 1, u'Version', None, u'Version string for versioned files; Blank for unversioned files.'), -(u'Class', u'Attributes', u'Y', None, 32767, None, None, None, None, u'Class registration attributes.'), -(u'Class', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational.'), -(u'Class', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description for the Class.'), -(u'Class', u'Argument', u'Y', None, None, None, None, u'Formatted', None, u'optional argument for LocalServers.'), -(u'Class', u'AppId_', u'Y', None, None, u'AppId', 1, u'Guid', None, u'Optional AppID containing DCOM information for associated application (string GUID).'), -(u'Class', u'CLSID', u'N', None, None, None, None, u'Guid', None, u'The CLSID of an OLE factory.'), -(u'Class', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'Class', u'Context', u'N', None, None, None, None, u'Identifier', None, u'The numeric server context for this server. CLSCTX_xxxx'), -(u'Class', u'DefInprocHandler', u'Y', None, None, None, None, u'Filename', u'1;2;3', u'Optional default inproc handler. Only optionally provided if Context=CLSCTX_LOCAL_SERVER. Typically "ole32.dll" or "mapi32.dll"'), -(u'Class', u'FileTypeMask', u'Y', None, None, None, None, u'Text', None, u'Optional string containing information for the HKCRthis CLSID) key. If multiple patterns exist, they must be delimited by a semicolon, and numeric subkeys will be generated: 0,1,2...'), -(u'Class', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Optional foreign key into the Icon Table, specifying the icon file associated with this CLSID. Will be written under the DefaultIcon key.'), -(u'Class', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'Optional icon index.'), -(u'Class', u'ProgId_Default', u'Y', None, None, u'ProgId', 1, u'Text', None, u'Optional ProgId associated with this CLSID.'), -(u'Component', u'Condition', u'Y', None, None, None, None, u'Condition', None, u"A conditional statement that will disable this component if the specified condition evaluates to the 'True' state. If a component is disabled, it will not be installed, regardless of the 'Action' state associated with the component."), -(u'Component', u'Attributes', u'N', None, None, None, None, None, None, u'Remote execution option, one of irsEnum'), -(u'Component', u'Component', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular component record.'), -(u'Component', u'ComponentId', u'Y', None, None, None, None, u'Guid', None, u'A string GUID unique to this component, version, and language.'), -(u'Component', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Required key of a Directory table record. This is actually a property name whose value contains the actual path, set either by the AppSearch action or with the default setting obtained from the Directory table.'), -(u'Component', u'KeyPath', u'Y', None, None, u'File;Registry;ODBCDataSource', 1, u'Identifier', None, u'Either the primary key into the File table, Registry table, or ODBCDataSource table. This extract path is stored when the component is installed, and is used to detect the presence of the component and to return the path to it.'), -(u'ProgId', u'Description', u'Y', None, None, None, None, u'Text', None, u'Localized description for the Program identifier.'), -(u'ProgId', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Optional foreign key into the Icon Table, specifying the icon file associated with this ProgId. Will be written under the DefaultIcon key.'), -(u'ProgId', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'Optional icon index.'), -(u'ProgId', u'ProgId', u'N', None, None, None, None, u'Text', None, u'The Program Identifier. Primary key.'), -(u'ProgId', u'Class_', u'Y', None, None, u'Class', 1, u'Guid', None, u'The CLSID of an OLE factory corresponding to the ProgId.'), -(u'ProgId', u'ProgId_Parent', u'Y', None, None, u'ProgId', 1, u'Text', None, u'The Parent Program Identifier. If specified, the ProgId column becomes a version independent prog id.'), -(u'CompLocator', u'Type', u'Y', 0, 1, None, None, None, None, u'A boolean value that determines if the registry value is a filename or a directory location.'), -(u'CompLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'CompLocator', u'ComponentId', u'N', None, None, None, None, u'Guid', None, u'A string GUID unique to this component, version, and language.'), -(u'Complus', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the ComPlus component.'), -(u'Complus', u'ExpType', u'Y', 0, 32767, None, None, None, None, u'ComPlus component attributes.'), -(u'Directory', u'Directory', u'N', None, None, None, None, u'Identifier', None, u'Unique identifier for directory entry, primary key. If a property by this name is defined, it contains the full path to the directory.'), -(u'Directory', u'DefaultDir', u'N', None, None, None, None, u'DefaultDir', None, u"The default sub-path under parent's path."), -(u'Directory', u'Directory_Parent', u'Y', None, None, u'Directory', 1, u'Identifier', None, u'Reference to the entry in this table specifying the default parent directory. A record parented to itself or with a Null parent represents a root of the install tree.'), -(u'CreateFolder', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table.'), -(u'CreateFolder', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Primary key, could be foreign key into the Directory table.'), -(u'CustomAction', u'Type', u'N', 1, 16383, None, None, None, None, u'The numeric custom action type, consisting of source location, code type, entry, option flags.'), -(u'CustomAction', u'Action', u'N', None, None, None, None, u'Identifier', None, u'Primary key, name of action, normally appears in sequence table unless private use.'), -(u'CustomAction', u'Source', u'Y', None, None, None, None, u'CustomSource', None, u'The table reference of the source of the code.'), -(u'CustomAction', u'Target', u'Y', None, None, None, None, u'Formatted', None, u'Excecution parameter, depends on the type of custom action'), -(u'DrLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'DrLocator', u'Path', u'Y', None, None, None, None, u'AnyPath', None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.'), -(u'DrLocator', u'Depth', u'Y', 0, 32767, None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.'), -(u'DrLocator', u'Parent', u'Y', None, None, None, None, u'Identifier', None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.'), -(u'DuplicateFile', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Foreign key referencing the source file to be duplicated.'), -(u'DuplicateFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the duplicate file.'), -(u'DuplicateFile', u'DestFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full pathname to a destination folder.'), -(u'DuplicateFile', u'DestName', u'Y', None, None, None, None, u'Filename', None, u'Filename to be given to the duplicate file.'), -(u'DuplicateFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular file entry'), -(u'Environment', u'Name', u'N', None, None, None, None, u'Text', None, u'The name of the environmental value.'), -(u'Environment', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value to set in the environmental settings.'), -(u'Environment', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the environmental value.'), -(u'Environment', u'Environment', u'N', None, None, None, None, u'Identifier', None, u'Unique identifier for the environmental variable setting'), -(u'Error', u'Error', u'N', 0, 32767, None, None, None, None, u'Integer error number, obtained from header file IError(...) macros.'), -(u'Error', u'Message', u'Y', None, None, None, None, u'Template', None, u'Error formatting template, obtained from user ed. or localizers.'), -(u'Extension', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the CLSID factory to be operational.'), -(u'Extension', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'Extension', u'Extension', u'N', None, None, None, None, u'Text', None, u'The extension associated with the table row.'), -(u'Extension', u'MIME_', u'Y', None, None, u'MIME', 1, u'Text', None, u'Optional Context identifier, typically "type/format" associated with the extension'), -(u'Extension', u'ProgId_', u'Y', None, None, u'ProgId', 1, u'Text', None, u'Optional ProgId associated with this extension.'), -(u'MIME', u'CLSID', u'Y', None, None, None, None, u'Guid', None, u'Optional associated CLSID.'), -(u'MIME', u'ContentType', u'N', None, None, None, None, u'Text', None, u'Primary key. Context identifier, typically "type/format".'), -(u'MIME', u'Extension_', u'N', None, None, u'Extension', 1, u'Text', None, u'Optional associated extension (without dot)'), -(u'FeatureComponents', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into Feature table.'), -(u'FeatureComponents', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'FileSFPCatalog', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'File associated with the catalog'), -(u'FileSFPCatalog', u'SFPCatalog_', u'N', None, None, u'SFPCatalog', 1, u'Filename', None, u'Catalog associated with the file'), -(u'SFPCatalog', u'SFPCatalog', u'N', None, None, None, None, u'Filename', None, u'File name for the catalog.'), -(u'SFPCatalog', u'Catalog', u'N', None, None, None, None, u'Binary', None, u'SFP Catalog'), -(u'SFPCatalog', u'Dependency', u'Y', None, None, None, None, u'Formatted', None, u'Parent catalog - only used by SFP'), -(u'Font', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Primary key, foreign key into File table referencing font file.'), -(u'Font', u'FontTitle', u'Y', None, None, None, None, u'Text', None, u'Font name.'), -(u'IniFile', u'Action', u'N', None, None, None, None, None, u'0;1;3', u'The type of modification to be made, one of iifEnum'), -(u'IniFile', u'Value', u'N', None, None, None, None, u'Formatted', None, u'The value to be written.'), -(u'IniFile', u'Key', u'N', None, None, None, None, u'Formatted', None, u'The .INI file key below Section.'), -(u'IniFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the .INI value.'), -(u'IniFile', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name in which to write the information'), -(u'IniFile', u'IniFile', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'IniFile', u'DirProperty', u'Y', None, None, None, None, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the .INI file is.'), -(u'IniFile', u'Section', u'N', None, None, None, None, u'Formatted', None, u'The .INI file Section.'), -(u'IniLocator', u'Type', u'Y', 0, 2, None, None, None, None, u'An integer value that determines if the .INI value read is a filename or a directory location or to be used as is w/o interpretation.'), -(u'IniLocator', u'Key', u'N', None, None, None, None, u'Text', None, u'Key value (followed by an equals sign in INI file).'), -(u'IniLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'IniLocator', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name.'), -(u'IniLocator', u'Section', u'N', None, None, None, None, u'Text', None, u'Section name within in file (within square brackets in INI file).'), -(u'IniLocator', u'Field', u'Y', 0, 32767, None, None, None, None, u'The field in the .INI line. If Field is null or 0 the entire line is read.'), -(u'IsolatedComponent', u'Component_Application', u'N', None, None, u'Component', 1, u'Identifier', None, u'Key to Component table item for application'), -(u'IsolatedComponent', u'Component_Shared', u'N', None, None, u'Component', 1, u'Identifier', None, u'Key to Component table item to be isolated'), -(u'LaunchCondition', u'Condition', u'N', None, None, None, None, u'Condition', None, u'Expression which must evaluate to TRUE in order for install to commence.'), -(u'LaunchCondition', u'Description', u'N', None, None, None, None, u'Formatted', None, u'Localizable text to display when condition fails and install must abort.'), -(u'LockPermissions', u'Table', u'N', None, None, None, None, u'Identifier', u'Directory;File;Registry', u'Reference to another table name'), -(u'LockPermissions', u'Domain', u'Y', None, None, None, None, u'Formatted', None, u'Domain name for user whose permissions are being set. (usually a property)'), -(u'LockPermissions', u'LockObject', u'N', None, None, None, None, u'Identifier', None, u'Foreign key into Registry or File table'), -(u'LockPermissions', u'Permission', u'Y', -2147483647, 2147483647, None, None, None, None, u'Permission Access mask. Full Control = 268435456 (GENERIC_ALL = 0x10000000)'), -(u'LockPermissions', u'User', u'N', None, None, None, None, u'Formatted', None, u'User for permissions to be set. (usually a property)'), -(u'Media', u'Source', u'Y', None, None, None, None, u'Property', None, u'The property defining the location of the cabinet file.'), -(u'Media', u'Cabinet', u'Y', None, None, None, None, u'Cabinet', None, u'If some or all of the files stored on the media are compressed in a cabinet, the name of that cabinet.'), -(u'Media', u'DiskId', u'N', 1, 32767, None, None, None, None, u'Primary key, integer to determine sort order for table.'), -(u'Media', u'DiskPrompt', u'Y', None, None, None, None, u'Text', None, u'Disk name: the visible text actually printed on the disk. This will be used to prompt the user when this disk needs to be inserted.'), -(u'Media', u'LastSequence', u'N', 0, 32767, None, None, None, None, u'File sequence number for the last file for this media.'), -(u'Media', u'VolumeLabel', u'Y', None, None, None, None, u'Text', None, u'The label attributed to the volume.'), -(u'ModuleComponents', u'Component', u'N', None, None, u'Component', 1, u'Identifier', None, u'Component contained in the module.'), -(u'ModuleComponents', u'Language', u'N', None, None, u'ModuleSignature', 2, None, None, u'Default language ID for module (may be changed by transform).'), -(u'ModuleComponents', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'Module containing the component.'), -(u'ModuleSignature', u'Language', u'N', None, None, None, None, None, None, u'Default decimal language of module.'), -(u'ModuleSignature', u'Version', u'N', None, None, None, None, u'Version', None, u'Version of the module.'), -(u'ModuleSignature', u'ModuleID', u'N', None, None, None, None, u'Identifier', None, u'Module identifier (String.GUID).'), -(u'ModuleDependency', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'Module requiring the dependency.'), -(u'ModuleDependency', u'ModuleLanguage', u'N', None, None, u'ModuleSignature', 2, None, None, u'Language of module requiring the dependency.'), -(u'ModuleDependency', u'RequiredID', u'N', None, None, None, None, None, None, u'String.GUID of required module.'), -(u'ModuleDependency', u'RequiredLanguage', u'N', None, None, None, None, None, None, u'LanguageID of the required module.'), -(u'ModuleDependency', u'RequiredVersion', u'Y', None, None, None, None, u'Version', None, u'Version of the required version.'), -(u'ModuleExclusion', u'ModuleID', u'N', None, None, u'ModuleSignature', 1, u'Identifier', None, u'String.GUID of module with exclusion requirement.'), -(u'ModuleExclusion', u'ModuleLanguage', u'N', None, None, u'ModuleSignature', 2, None, None, u'LanguageID of module with exclusion requirement.'), -(u'ModuleExclusion', u'ExcludedID', u'N', None, None, None, None, None, None, u'String.GUID of excluded module.'), -(u'ModuleExclusion', u'ExcludedLanguage', u'N', None, None, None, None, None, None, u'Language of excluded module.'), -(u'ModuleExclusion', u'ExcludedMaxVersion', u'Y', None, None, None, None, u'Version', None, u'Maximum version of excluded module.'), -(u'ModuleExclusion', u'ExcludedMinVersion', u'Y', None, None, None, None, u'Version', None, u'Minimum version of excluded module.'), -(u'MoveFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'If this component is not "selected" for installation or removal, no action will be taken on the associated MoveFile entry'), -(u'MoveFile', u'DestFolder', u'N', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the destination directory'), -(u'MoveFile', u'DestName', u'Y', None, None, None, None, u'Filename', None, u'Name to be given to the original file after it is moved or copied. If blank, the destination file will be given the same name as the source file'), -(u'MoveFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key that uniquely identifies a particular MoveFile record'), -(u'MoveFile', u'Options', u'N', 0, 1, None, None, None, None, u'Integer value specifying the MoveFile operating mode, one of imfoEnum'), -(u'MoveFile', u'SourceFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the source directory'), -(u'MoveFile', u'SourceName', u'Y', None, None, None, None, u'Text', None, u"Name of the source file(s) to be moved or copied. Can contain the '*' or '?' wildcards."), -(u'MsiAssembly', u'Attributes', u'Y', None, None, None, None, None, None, u'Assembly attributes'), -(u'MsiAssembly', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into Feature table.'), -(u'MsiAssembly', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'MsiAssembly', u'File_Application', u'Y', None, None, u'File', 1, u'Identifier', None, u'Foreign key into File table, denoting the application context for private assemblies. Null for global assemblies.'), -(u'MsiAssembly', u'File_Manifest', u'Y', None, None, u'File', 1, u'Identifier', None, u'Foreign key into the File table denoting the manifest file for the assembly.'), -(u'MsiAssemblyName', u'Name', u'N', None, None, None, None, u'Text', None, u'The name part of the name-value pairs for the assembly name.'), -(u'MsiAssemblyName', u'Value', u'N', None, None, None, None, u'Text', None, u'The value part of the name-value pairs for the assembly name.'), -(u'MsiAssemblyName', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into Component table.'), -(u'MsiDigitalCertificate', u'CertData', u'N', None, None, None, None, u'Binary', None, u'A certificate context blob for a signer certificate'), -(u'MsiDigitalCertificate', u'DigitalCertificate', u'N', None, None, None, None, u'Identifier', None, u'A unique identifier for the row'), -(u'MsiDigitalSignature', u'Table', u'N', None, None, None, None, None, u'Media', u'Reference to another table name (only Media table is supported)'), -(u'MsiDigitalSignature', u'DigitalCertificate_', u'N', None, None, u'MsiDigitalCertificate', 1, u'Identifier', None, u'Foreign key to MsiDigitalCertificate table identifying the signer certificate'), -(u'MsiDigitalSignature', u'Hash', u'Y', None, None, None, None, u'Binary', None, u'The encoded hash blob from the digital signature'), -(u'MsiDigitalSignature', u'SignObject', u'N', None, None, None, None, u'Text', None, u'Foreign key to Media table'), -(u'MsiFileHash', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Primary key, foreign key into File table referencing file with this hash'), -(u'MsiFileHash', u'Options', u'N', 0, 32767, None, None, None, None, u'Various options and attributes for this hash.'), -(u'MsiFileHash', u'HashPart1', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart2', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart3', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiFileHash', u'HashPart4', u'N', None, None, None, None, None, None, u'Size of file in bytes (long integer).'), -(u'MsiPatchHeaders', u'StreamRef', u'N', None, None, None, None, u'Identifier', None, u'Primary key. A unique identifier for the row.'), -(u'MsiPatchHeaders', u'Header', u'N', None, None, None, None, u'Binary', None, u'Binary stream. The patch header, used for patch validation.'), -(u'ODBCAttribute', u'Value', u'Y', None, None, None, None, u'Text', None, u'Value for ODBC driver attribute'), -(u'ODBCAttribute', u'Attribute', u'N', None, None, None, None, u'Text', None, u'Name of ODBC driver attribute'), -(u'ODBCAttribute', u'Driver_', u'N', None, None, u'ODBCDriver', 1, u'Identifier', None, u'Reference to ODBC driver in ODBCDriver table'), -(u'ODBCDriver', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for driver, non-localized'), -(u'ODBCDriver', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Reference to key driver file'), -(u'ODBCDriver', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCDriver', u'Driver', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for driver'), -(u'ODBCDriver', u'File_Setup', u'Y', None, None, u'File', 1, u'Identifier', None, u'Optional reference to key driver setup DLL'), -(u'ODBCDataSource', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for data source'), -(u'ODBCDataSource', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCDataSource', u'DataSource', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for data source'), -(u'ODBCDataSource', u'DriverDescription', u'N', None, None, None, None, u'Text', None, u'Reference to driver description, may be existing driver'), -(u'ODBCDataSource', u'Registration', u'N', 0, 1, None, None, None, None, u'Registration option: 0=machine, 1=user, others t.b.d.'), -(u'ODBCSourceAttribute', u'Value', u'Y', None, None, None, None, u'Text', None, u'Value for ODBC data source attribute'), -(u'ODBCSourceAttribute', u'Attribute', u'N', None, None, None, None, u'Text', None, u'Name of ODBC data source attribute'), -(u'ODBCSourceAttribute', u'DataSource_', u'N', None, None, u'ODBCDataSource', 1, u'Identifier', None, u'Reference to ODBC data source in ODBCDataSource table'), -(u'ODBCTranslator', u'Description', u'N', None, None, None, None, u'Text', None, u'Text used as registered name for translator'), -(u'ODBCTranslator', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Reference to key translator file'), -(u'ODBCTranslator', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reference to associated component'), -(u'ODBCTranslator', u'File_Setup', u'Y', None, None, u'File', 1, u'Identifier', None, u'Optional reference to key translator setup DLL'), -(u'ODBCTranslator', u'Translator', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized.internal token for translator'), -(u'Patch', u'Sequence', u'N', 0, 32767, None, None, None, None, u'Primary key, sequence with respect to the media images; order must track cabinet order.'), -(u'Patch', u'Attributes', u'N', 0, 32767, None, None, None, None, u'Integer containing bit flags representing patch attributes'), -(u'Patch', u'File_', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token, foreign key to File table, must match identifier in cabinet.'), -(u'Patch', u'Header', u'Y', None, None, None, None, u'Binary', None, u'Binary stream. The patch header, used for patch validation.'), -(u'Patch', u'PatchSize', u'N', 0, 2147483647, None, None, None, None, u'Size of patch in bytes (long integer).'), -(u'Patch', u'StreamRef_', u'Y', None, None, None, None, u'Identifier', None, u'Identifier. Foreign key to the StreamRef column of the MsiPatchHeaders table.'), -(u'PatchPackage', u'Media_', u'N', 0, 32767, None, None, None, None, u'Foreign key to DiskId column of Media table. Indicates the disk containing the patch package.'), -(u'PatchPackage', u'PatchId', u'N', None, None, None, None, u'Guid', None, u'A unique string GUID representing this patch.'), -(u'PublishComponent', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Foreign key into the Feature table.'), -(u'PublishComponent', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table.'), -(u'PublishComponent', u'ComponentId', u'N', None, None, None, None, u'Guid', None, u'A string GUID that represents the component id that will be requested by the alien product.'), -(u'PublishComponent', u'AppData', u'Y', None, None, None, None, u'Text', None, u'This is localisable Application specific data that can be associated with a Qualified Component.'), -(u'PublishComponent', u'Qualifier', u'N', None, None, None, None, u'Text', None, u'This is defined only when the ComponentId column is an Qualified Component Id. This is the Qualifier for ProvideComponentIndirect.'), -(u'Registry', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'Registry', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The registry value.'), -(u'Registry', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'Registry', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the installing of the registry value.'), -(u'Registry', u'Registry', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'Registry', u'Root', u'N', -1, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum.'), -(u'RegLocator', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'RegLocator', u'Type', u'Y', 0, 18, None, None, None, None, u'An integer value that determines if the registry value is a filename or a directory location or to be used as is w/o interpretation.'), -(u'RegLocator', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'RegLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature_ represents a unique file signature and is also the foreign key in the Signature table. If the type is 0, the registry values refers a directory, and _Signature is not a foreign key.'), -(u'RegLocator', u'Root', u'N', 0, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum.'), -(u'RemoveFile', u'InstallMode', u'N', None, None, None, None, None, u'1;2;3', u'Installation option, one of iimEnum.'), -(u'RemoveFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key referencing Component that controls the file to be removed.'), -(u'RemoveFile', u'FileKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key used to identify a particular file entry'), -(u'RemoveFile', u'FileName', u'Y', None, None, None, None, u'WildCardFilename', None, u'Name of the file to be removed.'), -(u'RemoveFile', u'DirProperty', u'N', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full pathname to the folder of the file to be removed.'), -(u'RemoveIniFile', u'Action', u'N', None, None, None, None, None, u'2;4', u'The type of modification to be made, one of iifEnum.'), -(u'RemoveIniFile', u'Value', u'Y', None, None, None, None, u'Formatted', None, u'The value to be deleted. The value is required when Action is iifIniRemoveTag'), -(u'RemoveIniFile', u'Key', u'N', None, None, None, None, u'Formatted', None, u'The .INI file key below Section.'), -(u'RemoveIniFile', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the deletion of the .INI value.'), -(u'RemoveIniFile', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The .INI file name in which to delete the information'), -(u'RemoveIniFile', u'DirProperty', u'Y', None, None, None, None, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the .INI file is.'), -(u'RemoveIniFile', u'Section', u'N', None, None, None, None, u'Formatted', None, u'The .INI file Section.'), -(u'RemoveIniFile', u'RemoveIniFile', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'RemoveRegistry', u'Name', u'Y', None, None, None, None, u'Formatted', None, u'The registry value name.'), -(u'RemoveRegistry', u'Key', u'N', None, None, None, None, u'RegPath', None, u'The key for the registry value.'), -(u'RemoveRegistry', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table referencing component that controls the deletion of the registry value.'), -(u'RemoveRegistry', u'Root', u'N', -1, 3, None, None, None, None, u'The predefined root key for the registry value, one of rrkEnum'), -(u'RemoveRegistry', u'RemoveRegistry', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ReserveCost', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Reserve a specified amount of space if this component is to be installed.'), -(u'ReserveCost', u'ReserveFolder', u'Y', None, None, None, None, u'Identifier', None, u'Name of a property whose value is assumed to resolve to the full path to the destination directory'), -(u'ReserveCost', u'ReserveKey', u'N', None, None, None, None, u'Identifier', None, u'Primary key that uniquely identifies a particular ReserveCost record'), -(u'ReserveCost', u'ReserveLocal', u'N', 0, 2147483647, None, None, None, None, u'Disk space to reserve if linked component is installed locally.'), -(u'ReserveCost', u'ReserveSource', u'N', 0, 2147483647, None, None, None, None, u'Disk space to reserve if linked component is installed to run from the source location.'), -(u'SelfReg', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Foreign key into the File table denoting the module that needs to be registered.'), -(u'SelfReg', u'Cost', u'Y', 0, 32767, None, None, None, None, u'The cost of registering the module.'), -(u'ServiceControl', u'Name', u'N', None, None, None, None, u'Formatted', None, u'Name of a service. /, \\, comma and space are invalid'), -(u'ServiceControl', u'Event', u'N', 0, 187, None, None, None, None, u'Bit field: Install: 0x1 = Start, 0x2 = Stop, 0x8 = Delete, Uninstall: 0x10 = Start, 0x20 = Stop, 0x80 = Delete'), -(u'ServiceControl', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table that controls the startup of the service'), -(u'ServiceControl', u'ServiceControl', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ServiceControl', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'Arguments for the service. Separate by [~].'), -(u'ServiceControl', u'Wait', u'Y', 0, 1, None, None, None, None, u'Boolean for whether to wait for the service to fully start'), -(u'ServiceInstall', u'Name', u'N', None, None, None, None, u'Formatted', None, u'Internal Name of the Service'), -(u'ServiceInstall', u'Description', u'Y', None, None, None, None, u'Text', None, u'Description of service.'), -(u'ServiceInstall', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table that controls the startup of the service'), -(u'ServiceInstall', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'Arguments to include in every start of the service, passed to WinMain'), -(u'ServiceInstall', u'ServiceInstall', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'ServiceInstall', u'Dependencies', u'Y', None, None, None, None, u'Formatted', None, u'Other services this depends on to start. Separate by [~], and end with [~][~]'), -(u'ServiceInstall', u'DisplayName', u'Y', None, None, None, None, u'Formatted', None, u'External Name of the Service'), -(u'ServiceInstall', u'ErrorControl', u'N', -2147483647, 2147483647, None, None, None, None, u'Severity of error if service fails to start'), -(u'ServiceInstall', u'LoadOrderGroup', u'Y', None, None, None, None, u'Formatted', None, u'LoadOrderGroup'), -(u'ServiceInstall', u'Password', u'Y', None, None, None, None, u'Formatted', None, u'password to run service with. (with StartName)'), -(u'ServiceInstall', u'ServiceType', u'N', -2147483647, 2147483647, None, None, None, None, u'Type of the service'), -(u'ServiceInstall', u'StartName', u'Y', None, None, None, None, u'Formatted', None, u'User or object name to run service as'), -(u'ServiceInstall', u'StartType', u'N', 0, 4, None, None, None, None, u'Type of the service'), -(u'Shortcut', u'Name', u'N', None, None, None, None, u'Filename', None, u'The name of the shortcut to be created.'), -(u'Shortcut', u'Description', u'Y', None, None, None, None, u'Text', None, u'The description for the shortcut.'), -(u'Shortcut', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Foreign key into the Component table denoting the component whose selection gates the the shortcut creation/deletion.'), -(u'Shortcut', u'Icon_', u'Y', None, None, u'Icon', 1, u'Identifier', None, u'Foreign key into the File table denoting the external icon file for the shortcut.'), -(u'Shortcut', u'IconIndex', u'Y', -32767, 32767, None, None, None, None, u'The icon index for the shortcut.'), -(u'Shortcut', u'Directory_', u'N', None, None, u'Directory', 1, u'Identifier', None, u'Foreign key into the Directory table denoting the directory where the shortcut file is created.'), -(u'Shortcut', u'Target', u'N', None, None, None, None, u'Shortcut', None, u'The shortcut target. This is usually a property that is expanded to a file or a folder that the shortcut points to.'), -(u'Shortcut', u'Arguments', u'Y', None, None, None, None, u'Formatted', None, u'The command-line arguments for the shortcut.'), -(u'Shortcut', u'Shortcut', u'N', None, None, None, None, u'Identifier', None, u'Primary key, non-localized token.'), -(u'Shortcut', u'Hotkey', u'Y', 0, 32767, None, None, None, None, u'The hotkey for the shortcut. It has the virtual-key code for the key in the low-order byte, and the modifier flags in the high-order byte. '), -(u'Shortcut', u'ShowCmd', u'Y', None, None, None, None, None, u'1;3;7', u'The show command for the application window.The following values may be used.'), -(u'Shortcut', u'WkDir', u'Y', None, None, None, None, u'Identifier', None, u'Name of property defining location of working directory.'), -(u'Signature', u'FileName', u'N', None, None, None, None, u'Filename', None, u'The name of the file. This may contain a "short name|long name" pair.'), -(u'Signature', u'Signature', u'N', None, None, None, None, u'Identifier', None, u'The table key. The Signature represents a unique file signature.'), -(u'Signature', u'Languages', u'Y', None, None, None, None, u'Language', None, u'The languages supported by the file.'), -(u'Signature', u'MaxDate', u'Y', 0, 2147483647, None, None, None, None, u'The maximum creation date of the file.'), -(u'Signature', u'MaxSize', u'Y', 0, 2147483647, None, None, None, None, u'The maximum size of the file. '), -(u'Signature', u'MaxVersion', u'Y', None, None, None, None, u'Text', None, u'The maximum version of the file.'), -(u'Signature', u'MinDate', u'Y', 0, 2147483647, None, None, None, None, u'The minimum creation date of the file.'), -(u'Signature', u'MinSize', u'Y', 0, 2147483647, None, None, None, None, u'The minimum size of the file.'), -(u'Signature', u'MinVersion', u'Y', None, None, None, None, u'Text', None, u'The minimum version of the file.'), -(u'TypeLib', u'Feature_', u'N', None, None, u'Feature', 1, u'Identifier', None, u'Required foreign key into the Feature Table, specifying the feature to validate or install in order for the type library to be operational.'), -(u'TypeLib', u'Description', u'Y', None, None, None, None, u'Text', None, None), -(u'TypeLib', u'Component_', u'N', None, None, u'Component', 1, u'Identifier', None, u'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.'), -(u'TypeLib', u'Directory_', u'Y', None, None, u'Directory', 1, u'Identifier', None, u'Optional. The foreign key into the Directory table denoting the path to the help file for the type library.'), -(u'TypeLib', u'Language', u'N', 0, 32767, None, None, None, None, u'The language of the library.'), -(u'TypeLib', u'Version', u'Y', 0, 16777215, None, None, None, None, u'The version of the library. The minor version is in the lower 8 bits of the integer. The major version is in the next 16 bits. '), -(u'TypeLib', u'Cost', u'Y', 0, 2147483647, None, None, None, None, u'The cost associated with the registration of the typelib. This column is currently optional.'), -(u'TypeLib', u'LibID', u'N', None, None, None, None, u'Guid', None, u'The GUID that represents the library.'), -(u'Upgrade', u'Attributes', u'N', 0, 2147483647, None, None, None, None, u'The attributes of this product set.'), -(u'Upgrade', u'Remove', u'Y', None, None, None, None, u'Formatted', None, u'The list of features to remove when uninstalling a product from this set. The default is "ALL".'), -(u'Upgrade', u'Language', u'Y', None, None, None, None, u'Language', None, u'A comma-separated list of languages for either products in this set or products not in this set.'), -(u'Upgrade', u'ActionProperty', u'N', None, None, None, None, u'UpperCase', None, u'The property to set when a product in this set is found.'), -(u'Upgrade', u'UpgradeCode', u'N', None, None, None, None, u'Guid', None, u'The UpgradeCode GUID belonging to the products in this set.'), -(u'Upgrade', u'VersionMax', u'Y', None, None, None, None, u'Text', None, u'The maximum ProductVersion of the products in this set. The set may or may not include products with this particular version.'), -(u'Upgrade', u'VersionMin', u'Y', None, None, None, None, u'Text', None, u'The minimum ProductVersion of the products in this set. The set may or may not include products with this particular version.'), -(u'Verb', u'Sequence', u'Y', 0, 32767, None, None, None, None, u'Order within the verbs for a particular extension. Also used simply to specify the default verb.'), -(u'Verb', u'Argument', u'Y', None, None, None, None, u'Formatted', None, u'Optional value for the command arguments.'), -(u'Verb', u'Extension_', u'N', None, None, u'Extension', 1, u'Text', None, u'The extension associated with the table row.'), -(u'Verb', u'Verb', u'N', None, None, None, None, u'Text', None, u'The verb for the command.'), -(u'Verb', u'Command', u'Y', None, None, None, None, u'Formatted', None, u'The command text.'), -] - -Error = [ -(0, u'{{Fatal error: }}'), -(1, u'{{Error [1]. }}'), -(2, u'Warning [1]. '), -(3, None), -(4, u'Info [1]. '), -(5, u'The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is [1]. {{The arguments are: [2], [3], [4]}}'), -(6, None), -(7, u'{{Disk full: }}'), -(8, u'Action [Time]: [1]. [2]'), -(9, u'[ProductName]'), -(10, u'{[2]}{, [3]}{, [4]}'), -(11, u'Message type: [1], Argument: [2]'), -(12, u'=== Logging started: [Date] [Time] ==='), -(13, u'=== Logging stopped: [Date] [Time] ==='), -(14, u'Action start [Time]: [1].'), -(15, u'Action ended [Time]: [1]. Return value [2].'), -(16, u'Time remaining: {[1] minutes }{[2] seconds}'), -(17, u'Out of memory. Shut down other applications before retrying.'), -(18, u'Installer is no longer responding.'), -(19, u'Installer stopped prematurely.'), -(20, u'Please wait while Windows configures [ProductName]'), -(21, u'Gathering required information...'), -(22, u'Removing older versions of this application...'), -(23, u'Preparing to remove older versions of this application...'), -(32, u'{[ProductName] }Setup completed successfully.'), -(33, u'{[ProductName] }Setup failed.'), -(1101, u'Error reading from file: [2]. {{ System error [3].}} Verify that the file exists and that you can access it.'), -(1301, u"Cannot create the file '[2]'. A directory with this name already exists. Cancel the install and try installing to a different location."), -(1302, u'Please insert the disk: [2]'), -(1303, u'The installer has insufficient privileges to access this directory: [2]. The installation cannot continue. Log on as administrator or contact your system administrator.'), -(1304, u'Error writing to file: [2]. Verify that you have access to that directory.'), -(1305, u'Error reading from file [2]. {{ System error [3].}} Verify that the file exists and that you can access it.'), -(1306, u"Another application has exclusive access to the file '[2]'. Please shut down all other applications, then click Retry."), -(1307, u'There is not enough disk space to install this file: [2]. Free some disk space and click Retry, or click Cancel to exit.'), -(1308, u'Source file not found: [2]. Verify that the file exists and that you can access it.'), -(1309, u'Error reading from file: [3]. {{ System error [2].}} Verify that the file exists and that you can access it.'), -(1310, u'Error writing to file: [3]. {{ System error [2].}} Verify that you have access to that directory.'), -(1311, u'Source file not found{{(cabinet)}}: [2]. Verify that the file exists and that you can access it.'), -(1312, u"Cannot create the directory '[2]'. A file with this name already exists. Please rename or remove the file and click retry, or click Cancel to exit."), -(1313, u'The volume [2] is currently unavailable. Please select another.'), -(1314, u"The specified path '[2]' is unavailable."), -(1315, u'Unable to write to the specified folder: [2].'), -(1316, u'A network error occurred while attempting to read from the file: [2]'), -(1317, u'An error occurred while attempting to create the directory: [2]'), -(1318, u'A network error occurred while attempting to create the directory: [2]'), -(1319, u'A network error occurred while attempting to open the source file cabinet: [2]'), -(1320, u'The specified path is too long: [2]'), -(1321, u'The Installer has insufficient privileges to modify this file: [2].'), -(1322, u"A portion of the folder path '[2]' is invalid. It is either empty or exceeds the length allowed by the system."), -(1323, u"The folder path '[2]' contains words that are not valid in folder paths."), -(1324, u"The folder path '[2]' contains an invalid character."), -(1325, u"'[2]' is not a valid short file name."), -(1326, u'Error getting file security: [3] GetLastError: [2]'), -(1327, u'Invalid Drive: [2]'), -(1328, u'Error applying patch to file [2]. It has probably been updated by other means, and can no longer be modified by this patch. For more information contact your patch vendor. {{System Error: [3]}}'), -(1329, u'A file that is required cannot be installed because the cabinet file [2] is not digitally signed. This may indicate that the cabinet file is corrupt.'), -(1330, u'A file that is required cannot be installed because the cabinet file [2] has an invalid digital signature. This may indicate that the cabinet file is corrupt.{{ Error [3] was returned by WinVerifyTrust.}}'), -(1331, u'Failed to correctly copy [2] file: CRC error.'), -(1332, u'Failed to correctly move [2] file: CRC error.'), -(1333, u'Failed to correctly patch [2] file: CRC error.'), -(1334, u"The file '[2]' cannot be installed because the file cannot be found in cabinet file '[3]'. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package."), -(1335, u"The cabinet file '[2]' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from the CD-ROM, or a problem with this package."), -(1336, u'There was an error creating a temporary file that is needed to complete this installation.{{ Folder: [3]. System error code: [2]}}'), -(1401, u'Could not create key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1402, u'Could not open key: [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1403, u'Could not delete value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1404, u'Could not delete key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1405, u'Could not read value [2] from key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel. '), -(1406, u'Could not write value [2] to key [3]. {{ System error [4].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1407, u'Could not get value names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1408, u'Could not get sub key names for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1409, u'Could not read security information for key [2]. {{ System error [3].}} Verify that you have sufficient access to that key, or contact your support personnel.'), -(1410, u'Could not increase the available registry space. [2] KB of free registry space is required for the installation of this application.'), -(1500, u'Another installation is in progress. You must complete that installation before continuing this one.'), -(1501, u'Error accessing secured data. Please make sure the Windows Installer is configured properly and try the install again.'), -(1502, u"User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product. Your current install will now continue."), -(1503, u"User '[2]' has previously initiated an install for product '[3]'. That user will need to run that install again before they can use that product."), -(1601, u"Out of disk space -- Volume: '[2]'; required space: [3] KB; available space: [4] KB. Free some disk space and retry."), -(1602, u'Are you sure you want to cancel?'), -(1603, u"The file [2][3] is being held in use{ by the following process: Name: [4], Id: [5], Window Title: '[6]'}. Close that application and retry."), -(1604, u"The product '[2]' is already installed, preventing the installation of this product. The two products are incompatible."), -(1605, u"There is not enough disk space on the volume '[2]' to continue the install with recovery enabled. [3] KB are required, but only [4] KB are available. Click Ignore to continue the install without saving recovery information, click Retry to check for available space again, or click Cancel to quit the installation."), -(1606, u'Could not access network location [2].'), -(1607, u'The following applications should be closed before continuing the install:'), -(1608, u'Could not find any previously installed compliant products on the machine for installing this product.'), -(1609, u"An error occurred while applying security settings. [2] is not a valid user or group. This could be a problem with the package, or a problem connecting to a domain controller on the network. Check your network connection and click Retry, or Cancel to end the install. {{Unable to locate the user's SID, system error [3]}}"), -(1701, u'The key [2] is not valid. Verify that you entered the correct key.'), -(1702, u'The installer must restart your system before configuration of [2] can continue. Click Yes to restart now or No if you plan to manually restart later.'), -(1703, u'You must restart your system for the configuration changes made to [2] to take effect. Click Yes to restart now or No if you plan to manually restart later.'), -(1704, u'An installation for [2] is currently suspended. You must undo the changes made by that installation to continue. Do you want to undo those changes?'), -(1705, u'A previous installation for this product is in progress. You must undo the changes made by that installation to continue. Do you want to undo those changes?'), -(1706, u"An installation package for the product [2] cannot be found. Try the installation again using a valid copy of the installation package '[3]'."), -(1707, u'Installation completed successfully.'), -(1708, u'Installation failed.'), -(1709, u'Product: [2] -- [3]'), -(1710, u'You may either restore your computer to its previous state or continue the install later. Would you like to restore?'), -(1711, u'An error occurred while writing installation information to disk. Check to make sure enough disk space is available, and click Retry, or Cancel to end the install.'), -(1712, u'One or more of the files required to restore your computer to its previous state could not be found. Restoration will not be possible.'), -(1713, u'[2] cannot install one of its required products. Contact your technical support group. {{System Error: [3].}}'), -(1714, u'The older version of [2] cannot be removed. Contact your technical support group. {{System Error [3].}}'), -(1715, u'Installed [2]'), -(1716, u'Configured [2]'), -(1717, u'Removed [2]'), -(1718, u'File [2] was rejected by digital signature policy.'), -(1719, u'The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.'), -(1720, u'There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor. {{Custom action [2] script error [3], [4]: [5] Line [6], Column [7], [8] }}'), -(1721, u'There is a problem with this Windows Installer package. A program required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action: [2], location: [3], command: [4] }}'), -(1722, u'There is a problem with this Windows Installer package. A program run as part of the setup did not finish as expected. Contact your support personnel or package vendor. {{Action [2], location: [3], command: [4] }}'), -(1723, u'There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. {{Action [2], entry: [3], library: [4] }}'), -(1724, u'Removal completed successfully.'), -(1725, u'Removal failed.'), -(1726, u'Advertisement completed successfully.'), -(1727, u'Advertisement failed.'), -(1728, u'Configuration completed successfully.'), -(1729, u'Configuration failed.'), -(1730, u'You must be an Administrator to remove this application. To remove this application, you can log on as an Administrator, or contact your technical support group for assistance.'), -(1801, u'The path [2] is not valid. Please specify a valid path.'), -(1802, u'Out of memory. Shut down other applications before retrying.'), -(1803, u'There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to go back to the previously selected volume.'), -(1804, u'There is no disk in drive [2]. Please insert one and click Retry, or click Cancel to return to the browse dialog and select a different volume.'), -(1805, u'The folder [2] does not exist. Please enter a path to an existing folder.'), -(1806, u'You have insufficient privileges to read this folder.'), -(1807, u'A valid destination folder for the install could not be determined.'), -(1901, u'Error attempting to read from the source install database: [2].'), -(1902, u'Scheduling reboot operation: Renaming file [2] to [3]. Must reboot to complete operation.'), -(1903, u'Scheduling reboot operation: Deleting file [2]. Must reboot to complete operation.'), -(1904, u'Module [2] failed to register. HRESULT [3]. Contact your support personnel.'), -(1905, u'Module [2] failed to unregister. HRESULT [3]. Contact your support personnel.'), -(1906, u'Failed to cache package [2]. Error: [3]. Contact your support personnel.'), -(1907, u'Could not register font [2]. Verify that you have sufficient permissions to install fonts, and that the system supports this font.'), -(1908, u'Could not unregister font [2]. Verify that you that you have sufficient permissions to remove fonts.'), -(1909, u'Could not create Shortcut [2]. Verify that the destination folder exists and that you can access it.'), -(1910, u'Could not remove Shortcut [2]. Verify that the shortcut file exists and that you can access it.'), -(1911, u'Could not register type library for file [2]. Contact your support personnel.'), -(1912, u'Could not unregister type library for file [2]. Contact your support personnel.'), -(1913, u'Could not update the ini file [2][3]. Verify that the file exists and that you can access it.'), -(1914, u'Could not schedule file [2] to replace file [3] on reboot. Verify that you have write permissions to file [3].'), -(1915, u'Error removing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.'), -(1916, u'Error installing ODBC driver manager, ODBC error [2]: [3]. Contact your support personnel.'), -(1917, u'Error removing ODBC driver: [4], ODBC error [2]: [3]. Verify that you have sufficient privileges to remove ODBC drivers.'), -(1918, u'Error installing ODBC driver: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.'), -(1919, u'Error configuring ODBC data source: [4], ODBC error [2]: [3]. Verify that the file [4] exists and that you can access it.'), -(1920, u"Service '[2]' ([3]) failed to start. Verify that you have sufficient privileges to start system services."), -(1921, u"Service '[2]' ([3]) could not be stopped. Verify that you have sufficient privileges to stop system services."), -(1922, u"Service '[2]' ([3]) could not be deleted. Verify that you have sufficient privileges to remove system services."), -(1923, u"Service '[2]' ([3]) could not be installed. Verify that you have sufficient privileges to install system services."), -(1924, u"Could not update environment variable '[2]'. Verify that you have sufficient privileges to modify environment variables."), -(1925, u'You do not have sufficient privileges to complete this installation for all users of the machine. Log on as administrator and then retry this installation.'), -(1926, u"Could not set file security for file '[3]'. Error: [2]. Verify that you have sufficient privileges to modify the security permissions for this file."), -(1927, u'Component Services (COM+ 1.0) are not installed on this computer. This installation requires Component Services in order to complete successfully. Component Services are available on Windows 2000.'), -(1928, u'Error registering COM+ Application. Contact your support personnel for more information.'), -(1929, u'Error unregistering COM+ Application. Contact your support personnel for more information.'), -(1930, u"The description for service '[2]' ([3]) could not be changed."), -(1931, u'The Windows Installer service cannot update the system file [2] because the file is protected by Windows. You may need to update your operating system for this program to work correctly. {{Package version: [3], OS Protected version: [4]}}'), -(1932, u'The Windows Installer service cannot update the protected Windows file [2]. {{Package version: [3], OS Protected version: [4], SFP Error: [5]}}'), -(1933, u'The Windows Installer service cannot update one or more protected Windows files. {{SFP Error: [2]. List of protected files:\\r\\n[3]}}'), -(1934, u'User installations are disabled via policy on the machine.'), -(1935, u'An error occured during the installation of assembly component [2]. HRESULT: [3]. {{assembly interface: [4], function: [5], assembly name: [6]}}'), -] - -tables=['AdminExecuteSequence', 'AdminUISequence', 'AdvtExecuteSequence', 'BBControl', 'Billboard', 'Binary', 'CheckBox', 'Property', 'ComboBox', 'Control', 'ListBox', 'ActionText', 'ControlCondition', 'ControlEvent', 'Dialog', 'EventMapping', 'InstallExecuteSequence', 'InstallUISequence', 'ListView', 'RadioButton', 'TextStyle', 'UIText', '_Validation', 'Error'] From python-checkins at python.org Mon May 1 18:12:45 2006 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 1 May 2006 18:12:45 +0200 (CEST) Subject: [Python-checkins] r45839 - python/trunk/Doc/lib/lib.tex python/trunk/Doc/lib/libmsilib.tex Message-ID: <20060501161245.7AF361E4011@bag.python.org> Author: martin.v.loewis Date: Mon May 1 18:12:44 2006 New Revision: 45839 Added: python/trunk/Doc/lib/libmsilib.tex (contents, props changed) Modified: python/trunk/Doc/lib/lib.tex Log: Add msilib documentation. Modified: python/trunk/Doc/lib/lib.tex ============================================================================== --- python/trunk/Doc/lib/lib.tex (original) +++ python/trunk/Doc/lib/lib.tex Mon May 1 18:12:44 2006 @@ -446,6 +446,7 @@ \input{libsunaudio} \input{windows} % MS Windows ONLY +\input{libmsilib} \input{libmsvcrt} \input{libwinreg} \input{libwinsound} Added: python/trunk/Doc/lib/libmsilib.tex ============================================================================== --- (empty file) +++ python/trunk/Doc/lib/libmsilib.tex Mon May 1 18:12:44 2006 @@ -0,0 +1,485 @@ +\section{\module{msilib} --- + Read and write Microsoft Installer files} + +\declaremodule{standard}{msilib} + \platform{Windows} +\modulesynopsis{Creation of Microsoft Installer files, and CAB files.} +\moduleauthor{Martin v. L\"owis}{martin at v.loewis.de} +\sectionauthor{Martin v. L\"owis}{martin at v.loewis.de} + +\index{msi} + +\versionadded{2.5} + +The \module{msilib} supports the creation of Microsoft Installer +(\code{.msi}) files. Because these files often contain an embedded +``cabinet'' file (\code{.cab}), it also exposes an API to create +CAB files. Support for reading \code{.cab} files is currently not +implemented; read support for the \code{.msi} database is possible. + +This package aims to provide complete access to all tables in an +\code{.msi} file, therefore, it is a fairly low-level API. Two +primary applications of this package are the \module{distutils} +command \code{bdist_msi}, and the creation of Python installer +package itself (although that currently uses a different version +of \code{msilib}). + +The package contents can be roughly split into four parts: +low-level CAB routines, low-level MSI routines, higher-level +MSI routines, and standard table structures. + +\begin{funcdesc}{FCICreate}{cabname, files} + Create a new CAB file named \var{cabname}. \var{files} must + be a list of tuples, each containing the name of the file on + disk, and the name of the file inside the CAB file. + + The files are added to the CAB file in the order they have + in the list. All files are added into a single CAB file, + using the MSZIP compression algorithm. + + Callbacks to Python for the various steps of MSI creation + are currently not exposed. +\end{funcdesc} + +\begin{funcdesc}{UUIDCreate}{} + Return the string representation of a new unique identifier. + This wraps the Windows API functions \code{UuidCreate} and + \code{UuidToString}. +\end{funcdesc} + +\begin{funcdesc}{OpenDatabase}{path, persist} + Return a new database object by calling MsiOpenDatabase. + \var{path} is the file name of the + MSI file; persist can be one of the constants + \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE}, + \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or + \code{MSIDBOPEN_TRANSACT}, and may include the flag + \code{MSIDBOPEN_PATCHFILE}. See the Microsoft documentation for + the meaning of these flags; depending on the flags, + an existing database is opened, or a new one created. +\end{funcdesc} + +\begin{funcdesc}{CreateRecord}{count} + Return a new record object by calling MSICreateRecord. + \var{count} is the number of fields of the record. +\end{funcdesc} + +\begin{funcdesc}{init_database}{name, schema, ProductName, ProductCode, ProductVersion, Manufacturer} + Create and return a new database \var{name}, initialize it + with \var{schema}, and set the properties \var{ProductName}, + \var{ProductCode}, \var{ProductVersion}, and \var{Manufacturer}. + + \var{schema} must be a module object containing \code{tables} and + \code{_Validation_records} attributes; typically, + \module{msilib.schema} should be used. + + The database will contain just the schema and the validation + records when this function returns. +\end{funcdesc} + +\begin{funcdesc}{add_data}{database, records} + Add all \var{records} to \var{database}. \var{records} should + be a list of tuples, each one containing all fields of a record + according to the schema of the table. For optional fields, + \code{None} can be passed. + + Field values can be int or long numbers, strings, or instances + of the Binary class. +\end{funcdesc} + +\begin{classdesc}{Binary}{filename} + Represents entries into the Binary table; inserting such + an object using \function{add_data} reads the file named + \var{filename} into the table. +\end{classdesc} + +\begin{funcdesc}{add_tables}{database, module} + Add all table content from \var{module} to \var{database}. + \var{module} must contain an attribute \var{tables} + listing all tables for which content should be added, + and one attribute per table that has the actual content. + + This is typically used to install the sequence +\end{funcdesc} + +\begin{funcdesc}{add_stream}{database, name, path} + Add the file \var{path} into the \code{_Stream} table + of \var{database}, with the stream name \var{name}. +\end{funcdesc} + +\begin{funcdesc}{gen_uuid}{} + Return a new UUID, in the format that MSI typically + requires (i.e. in curly braces, and with all hexdigits + in upper-case). +\end{funcdesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devnotes/winprog/fcicreate.asp]{FCICreateFile}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidcreate.asp]{UuidCreate}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rpc/rpc/uuidtostring.asp]{UuidToString}{} +\end{seealso} + +\subsection{Database Objects\label{database-objects}} + +\begin{methoddesc}{OpenView}{sql} + Return a view object, by calling MSIDatabaseOpenView. + \var{sql} is the SQL statement to execute. +\end{methoddesc} + +\begin{methoddesc}{Commit}{} + Commit the changes pending in the current transaction, + by calling MSIDatabaseCommit. +\end{methoddesc} + +\begin{methoddesc}{GetSummaryInformation}{count} + Return a new summary information object, by calling + MsiGetSummaryInformation. \var{count} is the maximum number of + updated values. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiopenview.asp]{MSIOpenView}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msidatabasecommit.asp]{MSIDatabaseCommit}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msigetsummaryinformation.asp]{MSIGetSummaryInformation}{} +\end{seealso} + +\subsection{View Objects\label{view-objects}} + +\begin{methoddesc}{Execute}{\optional{params=None}} + Execute the SQL query of the view, through MSIViewExecute. + \var{params} is an optional record describing actual values + of the parameter tokens in the query. +\end{methoddesc} + +\begin{methoddesc}{GetColumnInfo}{kind} + Return a record describing the columns of the view, through + calling MsiViewGetColumnInfo. \var{kind} can be either + \code{MSICOLINFO_NAMES} or \code{MSICOLINFO_TYPES} +\end{methoddesc} + +\begin{methoddesc}{Fetch}{} + Return a result record of the query, through calling + MsiViewFetch. +\end{methoddesc} + +\begin{methoddesc}{Modify}{kind, data} + Modify the view, by calling MsiViewModify. \var{kind} + can be one of \code{MSIMODIFY_SEEK}, \code{MSIMODIFY_REFRESH}, + \code{MSIMODIFY_INSERT}, \code{MSIMODIFY_UPDATE}, \code{MSIMODIFY_ASSIGN}, + \code{MSIMODIFY_REPLACE}, \code{MSIMODIFY_MERGE}, \code{MSIMODIFY_DELETE}, + \code{MSIMODIFY_INSERT_TEMPORARY}, \code{MSIMODIFY_VALIDATE}, + \code{MSIMODIFY_VALIDATE_NEW}, \code{MSIMODIFY_VALIDATE_FIELD}, or + \code{MSIMODIFY_VALIDATE_DELETE}. + + \var{data} must be a record describing the new data. +\end{methoddesc} + +\begin{methoddesc}{Close}{} + Close the view, through MsiViewClose. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewexecute.asp]{MsiViewExecute}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewgetcolumninfo.asp]{MSIViewGetColumnInfo}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewfetch.asp]{MsiViewFetch}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewmodify.asp]{MsiViewModify}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msiviewclose.asp]{MsiViewClose}{} +\end{seealso} + +\subsection{Summary Information Objects\label{summary-objects}} + +\begin{methoddesc}{GetProperty}{field} + Return a property of the summary, through MsiSummaryInfoGetProperty. + \var{field} is the name of the property, and can be one of the + constants + \code{PID_CODEPAGE}, \code{PID_TITLE}, \code{PID_SUBJECT}, + \code{PID_AUTHOR}, \code{PID_KEYWORDS}, \code{PID_COMMENTS}, + \code{PID_TEMPLATE}, \code{PID_LASTAUTHOR}, \code{PID_REVNUMBER}, + \code{PID_LASTPRINTED}, \code{PID_CREATE_DTM}, \code{PID_LASTSAVE_DTM}, + \code{PID_PAGECOUNT}, \code{PID_WORDCOUNT}, \code{PID_CHARCOUNT}, + \code{PID_APPNAME}, or \code{PID_SECURITY}. +\end{methoddesc} + +\begin{methoddesc}{GetPropertyCount}{} + Return the number of summary properties, through + MsiSummaryInfoGetPropertyCount. +\end{methoddesc} + +\begin{methoddesc}{SetProperty}{field, value} + Set a property through MsiSummaryInfoSetProperty. \var{field} + can have the same values as in \method{GetProperty}, \var{value} + is the new value of the property. Possible value types are integer + and string. +\end{methoddesc} + +\begin{methoddesc}{Persist}{} + Write the modified properties to the summary information stream, + using MsiSummaryInfoPersist. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetproperty.asp]{MsiSummaryInfoGetProperty}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfogetpropertycount.asp]{MsiSummaryInfoGetPropertyCount}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfosetproperty.asp]{MsiSummaryInfoSetProperty}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msisummaryinfopersist.asp]{MsiSummaryInfoPersist}{} +\end{seealso} + +\subsection{Record Objects\label{record-objects}} + +\begin{methoddesc}{GetFieldCount}{} + Return the number of fields of the record, through MsiRecordGetFieldCount. +\end{methoddesc} + +\begin{methoddesc}{SetString}{field, value} + Set \var{field} to \var{value} through MsiRecordSetString. + \var{field} must be an integer; \var{value} a string. +\end{methoddesc} + +\begin{methoddesc}{SetStream}{field, value} + Set \var{field} to the contents of the file named \var{value}, + through MsiRecordSetStream. + \var{field} must be an integer; \var{value} a string. +\end{methoddesc} + +\begin{methoddesc}{SetInteger}{field, value} + Set \var{field} to \var{value} through MsiRecordSetInteger. + Both \var{field} and \var{value} must be an integers. +\end{methoddesc} + +\begin{methoddesc}{ClearData}{} + Set all fields of the record to 0, through MsiRecordClearData. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordgetfieldcount.asp]{MsiRecordGetFieldCount}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstring.asp]{MsiRecordSetString}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetstream.asp]{MsiRecordSetStream}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordsetinteger.asp]{MsiRecordSetInteger}{} + \seetitle[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/msirecordclear.asp]{MsiRecordClear}{} +\end{seealso} + +\subsection{Errors\label{msi-errors}} + +All wrappers around MSI functions raise \exception{MsiError}; +the string inside the exception will contain more detail. + +\subsection{CAB Objects\label{cab}} + +\begin{classdesc}{CAB}{name} + The class \class{CAB} represents a CAB file. During MSI construction, + files will be added simultaneously to the \code{Files} table, and + to a CAB file. Then, when all files have been added, the CAB file + can be written, then added to the MSI file. + + \var{name} is the name of the CAB file in the MSI file. +\end{classdesc} + +\begin{methoddesc}[CAB]{append}{full, logical} + Add the file with the pathname \var{full} to the CAB file, + under the name \var{logical}. If there is already a file + named \var{logical}, a new file name is created. + + Return the index of the file in the CAB file, and the + new name of the file inside the CAB file. +\end{methoddesc} + +\begin{methoddesc}[CAB]{append}{database} + Generate a CAB file, add it as a stream to the MSI file, + put it into the \code{Media} table, and remove the generated + file from the disk. +\end{methoddesc} + +\subsection{Directory Objects\label{msi-directory}} + +\begin{classdesc}{Directory}{database, cab, basedir, physical, + logical, default, component, \optional{flags}} + Create a new directory in the Directory table. There is a current + component at each point in time for the directory, which is either + explicitly created through start_component, or implicitly when files + are added for the first time. Files are added into the current + component, and into the cab file. To create a directory, a base + directory object needs to be specified (can be None), the path to + the physical directory, and a logical directory name. Default + specifies the DefaultDir slot in the directory table. componentflags + specifies the default flags that new components get. +\end{classdesc} + +\begin{methoddesc}[Directory]{start_component}{\optional{component\optional{, + feature\optional{, flags\optional{, keyfile\optional{, uuid}}}}}} + Add an entry to the Component table, and make this component the + current for this directory. If no component name is given, the + directory name is used. If no feature is given, the current feature + is used. If no flags are given, the directory's default flags are + used. If no keyfile is given, the KeyPath is left null in the + Component table. +\end{methoddesc} + +\begin{methoddesc}[Directory]{add_file}{file\optional{, src\optional{, + version\optional{, language}}}} + Add a file to the current component of the directory, starting a new + one one if there is no current component. By default, the file name + in the source and the file table will be identical. If the src file + is specified, it is interpreted relative to the current + directory. Optionally, a version and a language can be specified for + the entry in the File table. +\end{methoddesc} + +\begin{methoddesc}[Directory]{glob}{pattern\optional{, exclude}} + Add a list of files to the current component as specified in the glob + pattern. Individual files can be excluded in the exclude list. +\end{methoddesc} + +\begin{methoddesc}[Directory]{remove_pyc}{} + Remove .pyc/.pyo files on uninstall +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/directory_table.asp]{Directory Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/file_table.asp]{File Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/component_table.asp]{Component Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/featurecomponents_table.asp]{FeatureComponents Table}{} +\end{seealso} + + +\subsection{Features\label{features}} + +\begin{classdesc}{Feature}{database, id, title, desc, display\optional{, + level=1\optional{, parent\optional\{, directory\optional{, + attributes=0}}}} + + Add a new record to the \code{Feature} table, using the values + \var{id}, \var{parent.id}, \var{title}, \var{desc}, \var{display}, + \var{level}, \var{directory}, and \var{attributes}. The resulting + feature object can be passed to the \method{start_component} method + of \class{Directory}. +\end{classdesc} + +\begin{methoddesc}[Feature]{set_current}{} + Make this feature the current feature of \module{msilib}. + New components are automatically added to the default feature, + unless a feature is explicitly specified. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/feature_table.asp]{Feature Table}{} +\end{seealso} + +\subsection{GUI classes\label{msi-gui}} + +\module{msilib} provides several classes that wrap the GUI tables in +an MSI database. However, no standard user interface is provided; use +\module{bdist_msi} to create MSI files with a user-interface for +installing Python packages. + +\begin{classdesc}{Control}{dlg, name} + Base class of the dialog controls. \var{dlg} is the dialog object + the control belongs to, and \var{name} is the control's name. +\end{classdesc} + +\begin{methoddesc}[Control]{event}{event, argument\optional{, + condition = ``1''\optional{, ordering}}} + + Make an entry into the \code{ControlEvent} table for this control. +\end{methoddesc} + +\begin{methoddesc}[Control]{mapping}{event, attribute} + Make an entry into the \code{EventMapping} table for this control. +\end{methoddesc} + +\begin{methoddesc}[Control]{condition}{action, condition} + Make an entry into the \code{ControlCondition} table for this control. +\end{methoddesc} + + +\begin{classdesc}{RadioButtonGroup}{dlg, name, property} + Create a radio button control named \var{name}. \var{property} + is the installer property that gets set when a radio button + is selected. +\end{classdesc} + +\begin{methoddesc}[RadioButtonGroup]{add}{name, x, y, width, height, text + \optional{, value}} + Add a radio button named \var{name} to the group, at the + coordinates \var{x}, \var{y}, \var{width}, \var{height}, and + with the label \var{text}. If \var{value} is omitted, it + defaults to \var{name}. +\end{methoddesc} + +\begin{classdesc}{Dialog}{db, name, x, y, w, h, attr, title, first, + default, cancel} + Return a new Dialog object. An entry in the \code{Dialog} table + is made, with the specified coordinates, dialog attributes, title, + name of the first, default, and cancel controls. +\end{classdesc} + +\begin{methoddesc}[Dialog]{control}{name, type, x, y, width, height, + attributes, property, text, control_next, help} + Return a new Control object. An entry in the \code{Control} table + is made with the specified parameters. + + This is a generic method; for specific types, specialized methods + are provided. +\end{methoddesc} + + +\begin{methoddesc}[Dialog]{text}{name, x, y, width, height, attributes, text} + Add and return a \code{Text} control. +\end{methoddesc} + +\begin{methoddesc}[Dialog]{bitmap}{name, x, y, width, height, text} + Add and return a \code{Bitmap} control. +\end{methoddesc} + +\begin{methoddesc}[Dialog]{line}{name, x, y, width, height} + Add and return a \code{Line} control. +\end{methoddesc} + +\begin{methoddesc}[Dialog]{pushbutton}{name, x, y, width, height, attributes, + text, next_control} + Add and return a \code{PushButton} control. +\end{methoddesc} + +\begin{methoddesc}[Dialog]{radiogroup}{name, x, y, width, height, + attributes, property, text, next_control} + Add and return a \code{RadioButtonGroup} control. +\end{methoddesc} + +\begin{methoddesc}[Dialog]{checkbox}{name, x, y, width, height, + attributes, property, text, next_control} + Add and return a \code{CheckBox} control. +\end{methoddesc} + +\begin{seealso} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/dialog_table.asp]{Dialog Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/control_table.asp]{Control Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controls.asp]{Control Types}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlcondition_table.asp]{ControlCondition Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/controlevent_table.asp]{ControlEvent Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/eventmapping_table.asp]{EventMapping Table}{} + \seetitle[http://msdn.microsoft.com/library/en-us/msi/setup/radiobutton_table.asp]{RadioButton Table}{} +\end{seealso} + +\subsection{Precomputed tables\label{msi-tables}} + +\module{msilib} provides a few subpackages that contain +only schema and table definitions. Currently, these definitions +are based on MSI version 2.0. + +\begin{datadesc}{schema} + This is the standard MSI schema for MSI 2.0, with the + \var{tables} variable providing a list of table definitions, + and \var{_Validation_records} providing the data for + MSI validation. +\end{datadesc} + +\begin{datadesc}{sequence} + This module contains table contents for the standard sequence + tables: \var{AdminExecuteSequence}, \var{AdminUISequence}, + \var{AdvtExecuteSequence}, \var{InstallExecuteSequence}, and + \var{InstallUISequence}. +\end{datadesc} + +\begin{datadesc}{text} + This module contains definitions for the UIText and ActionText + tables, for the standard installer actions. +\end{datadesc} \ No newline at end of file From python-checkins at python.org Mon May 1 18:14:16 2006 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 1 May 2006 18:14:16 +0200 (CEST) Subject: [Python-checkins] r45840 - in python/trunk/Lib: distutils/command/bdist_msi.py msilib/__init__.py Message-ID: <20060501161416.D25401E4010@bag.python.org> Author: martin.v.loewis Date: Mon May 1 18:14:16 2006 New Revision: 45840 Modified: python/trunk/Lib/distutils/command/bdist_msi.py python/trunk/Lib/msilib/__init__.py Log: Rename parameters to match the documentation (which in turn matches Microsoft's documentation). Drop unused parameter in CAB.append. Modified: python/trunk/Lib/distutils/command/bdist_msi.py ============================================================================== --- python/trunk/Lib/distutils/command/bdist_msi.py (original) +++ python/trunk/Lib/distutils/command/bdist_msi.py Mon May 1 18:14:16 2006 @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2005 Martin v. Löwis +# Copyright (C) 2005, 2006 Martin v. Löwis # Licensed to PSF under a Contributor Agreement. # The bdist_wininst command proper # based on bdist_wininst @@ -16,7 +16,7 @@ from distutils.errors import DistutilsOptionError from distutils import log import msilib -from msilib import schema, sequence, uisample +from msilib import schema, sequence, text from msilib import Directory, Feature, Dialog, add_data class PyDialog(Dialog): @@ -374,8 +374,8 @@ ("MaintenanceTypeDlg", "Installed AND NOT RESUME AND NOT Preselected", 1250), ("ProgressDlg", None, 1280)]) - add_data(db, 'ActionText', uisample.ActionText) - add_data(db, 'UIText', uisample.UIText) + add_data(db, 'ActionText', text.ActionText) + add_data(db, 'UIText', text.UIText) ##################################################################### # Standard dialogs: FatalError, UserExit, ExitDialog fatal=PyDialog(db, "FatalError", x, y, w, h, modal, title, @@ -502,9 +502,9 @@ seldlg.back("< Back", None, active=0) c = seldlg.next("Next >", "Cancel") - c.event("SetTargetPath", "TARGETDIR", order=1) - c.event("SpawnWaitDialog", "WaitForCostingDlg", order=2) - c.event("EndDialog", "Return", order=3) + c.event("SetTargetPath", "TARGETDIR", ordering=1) + c.event("SpawnWaitDialog", "WaitForCostingDlg", ordering=2) + c.event("EndDialog", "Return", ordering=3) c = seldlg.cancel("Cancel", "DirectoryCombo") c.event("SpawnDialog", "CancelDlg") @@ -561,7 +561,7 @@ c = whichusers.next("Next >", "Cancel") c.event("[ALLUSERS]", "1", 'WhichUsers="ALL"', 1) - c.event("EndDialog", "Return", order = 2) + c.event("EndDialog", "Return", ordering = 2) c = whichusers.cancel("Cancel", "AdminInstall") c.event("SpawnDialog", "CancelDlg") Modified: python/trunk/Lib/msilib/__init__.py ============================================================================== --- python/trunk/Lib/msilib/__init__.py (original) +++ python/trunk/Lib/msilib/__init__.py Mon May 1 18:14:16 2006 @@ -196,11 +196,9 @@ self.filenames.add(logical) return logical - def append(self, full, file, logical = None): + def append(self, full, logical): if os.path.isdir(full): return - if not logical: - logical = self.gen_id(dir, file) self.index += 1 self.files.append((full, logical)) return self.index, logical @@ -330,7 +328,7 @@ logical = self.keyfiles[file] else: logical = None - sequence, logical = self.cab.append(absolute, file, logical) + sequence, logical = self.cab.append(absolute, logical) assert logical not in self.ids self.ids.add(logical) short = self.make_short(file) @@ -400,13 +398,14 @@ self.dlg = dlg self.name = name - def event(self, ev, arg, cond = "1", order = None): + def event(self, event, argument, condition = "1", ordering = None): add_data(self.dlg.db, "ControlEvent", - [(self.dlg.name, self.name, ev, arg, cond, order)]) + [(self.dlg.name, self.name, event, argument, + condition, ordering)]) - def mapping(self, ev, attr): + def mapping(self, mapping, attribute): add_data(self.dlg.db, "EventMapping", - [(self.dlg.name, self.name, ev, attr)]) + [(self.dlg.name, self.name, event, attribute)]) def condition(self, action, condition): add_data(self.dlg.db, "ControlCondition", From buildbot at python.org Mon May 1 18:26:27 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 16:26:27 +0000 Subject: [Python-checkins] buildbot warnings in x86 Ubuntu dapper (icc) trunk Message-ID: <20060501162628.18DA31E400F@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%2520trunk/builds/299 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: gerhard.haering Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Mon May 1 18:28:54 2006 From: python-checkins at python.org (fred.drake) Date: Mon, 1 May 2006 18:28:54 +0200 (CEST) Subject: [Python-checkins] r45841 - python/trunk/Doc/Makefile.deps Message-ID: <20060501162854.A86E51E400F@bag.python.org> Author: fred.drake Date: Mon May 1 18:28:54 2006 New Revision: 45841 Modified: python/trunk/Doc/Makefile.deps Log: add dependency Modified: python/trunk/Doc/Makefile.deps ============================================================================== --- python/trunk/Doc/Makefile.deps (original) +++ python/trunk/Doc/Makefile.deps Mon May 1 18:28:54 2006 @@ -308,6 +308,7 @@ lib/libgetpass.tex \ lib/libshutil.tex \ lib/librepr.tex \ + lib/libmsilib.tex \ lib/libmsvcrt.tex \ lib/libwinreg.tex \ lib/libwinsound.tex \ From python-checkins at python.org Mon May 1 18:30:26 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 18:30:26 +0200 (CEST) Subject: [Python-checkins] r45842 - python/trunk/Doc/lib/libmsilib.tex Message-ID: <20060501163026.6D7001E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 18:30:25 2006 New Revision: 45842 Modified: python/trunk/Doc/lib/libmsilib.tex Log: Markup fixes; add some XXX comments noting problems Modified: python/trunk/Doc/lib/libmsilib.tex ============================================================================== --- python/trunk/Doc/lib/libmsilib.tex (original) +++ python/trunk/Doc/lib/libmsilib.tex Mon May 1 18:30:25 2006 @@ -43,14 +43,14 @@ \begin{funcdesc}{UUIDCreate}{} Return the string representation of a new unique identifier. - This wraps the Windows API functions \code{UuidCreate} and - \code{UuidToString}. + This wraps the Windows API functions \cfunction{UuidCreate} and + \cfunction{UuidToString}. \end{funcdesc} \begin{funcdesc}{OpenDatabase}{path, persist} Return a new database object by calling MsiOpenDatabase. \var{path} is the file name of the - MSI file; persist can be one of the constants + MSI file; \var{persist} can be one of the constants \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE}, \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or \code{MSIDBOPEN_TRANSACT}, and may include the flag @@ -60,7 +60,7 @@ \end{funcdesc} \begin{funcdesc}{CreateRecord}{count} - Return a new record object by calling MSICreateRecord. + Return a new record object by calling \cfunction{MSICreateRecord}. \var{count} is the number of fields of the record. \end{funcdesc} @@ -88,7 +88,7 @@ \end{funcdesc} \begin{classdesc}{Binary}{filename} - Represents entries into the Binary table; inserting such + Represents entries in the Binary table; inserting such an object using \function{add_data} reads the file named \var{filename} into the table. \end{classdesc} @@ -100,6 +100,7 @@ and one attribute per table that has the actual content. This is typically used to install the sequence + % XXX unfinished sentence \end{funcdesc} \begin{funcdesc}{add_stream}{database, name, path} @@ -122,18 +123,18 @@ \subsection{Database Objects\label{database-objects}} \begin{methoddesc}{OpenView}{sql} - Return a view object, by calling MSIDatabaseOpenView. + Return a view object, by calling \cfunction{MSIDatabaseOpenView}. \var{sql} is the SQL statement to execute. \end{methoddesc} \begin{methoddesc}{Commit}{} Commit the changes pending in the current transaction, - by calling MSIDatabaseCommit. + by calling \cfunction{MSIDatabaseCommit}. \end{methoddesc} \begin{methoddesc}{GetSummaryInformation}{count} Return a new summary information object, by calling - MsiGetSummaryInformation. \var{count} is the maximum number of + \cfunction{MsiGetSummaryInformation}. \var{count} is the maximum number of updated values. \end{methoddesc} @@ -146,24 +147,24 @@ \subsection{View Objects\label{view-objects}} \begin{methoddesc}{Execute}{\optional{params=None}} - Execute the SQL query of the view, through MSIViewExecute. + Execute the SQL query of the view, through \cfunction{MSIViewExecute}. \var{params} is an optional record describing actual values of the parameter tokens in the query. \end{methoddesc} \begin{methoddesc}{GetColumnInfo}{kind} Return a record describing the columns of the view, through - calling MsiViewGetColumnInfo. \var{kind} can be either - \code{MSICOLINFO_NAMES} or \code{MSICOLINFO_TYPES} + calling \cfunction{MsiViewGetColumnInfo}. \var{kind} can be either + \code{MSICOLINFO_NAMES} or \code{MSICOLINFO_TYPES}. \end{methoddesc} \begin{methoddesc}{Fetch}{} Return a result record of the query, through calling - MsiViewFetch. + \cfunction{MsiViewFetch}. \end{methoddesc} \begin{methoddesc}{Modify}{kind, data} - Modify the view, by calling MsiViewModify. \var{kind} + Modify the view, by calling \cfunction{MsiViewModify}. \var{kind} can be one of \code{MSIMODIFY_SEEK}, \code{MSIMODIFY_REFRESH}, \code{MSIMODIFY_INSERT}, \code{MSIMODIFY_UPDATE}, \code{MSIMODIFY_ASSIGN}, \code{MSIMODIFY_REPLACE}, \code{MSIMODIFY_MERGE}, \code{MSIMODIFY_DELETE}, @@ -175,7 +176,7 @@ \end{methoddesc} \begin{methoddesc}{Close}{} - Close the view, through MsiViewClose. + Close the view, through \cfunction{MsiViewClose}. \end{methoddesc} \begin{seealso} @@ -189,7 +190,7 @@ \subsection{Summary Information Objects\label{summary-objects}} \begin{methoddesc}{GetProperty}{field} - Return a property of the summary, through MsiSummaryInfoGetProperty. + Return a property of the summary, through \cfunction{MsiSummaryInfoGetProperty}. \var{field} is the name of the property, and can be one of the constants \code{PID_CODEPAGE}, \code{PID_TITLE}, \code{PID_SUBJECT}, @@ -202,11 +203,11 @@ \begin{methoddesc}{GetPropertyCount}{} Return the number of summary properties, through - MsiSummaryInfoGetPropertyCount. + \cfunction{MsiSummaryInfoGetPropertyCount}. \end{methoddesc} \begin{methoddesc}{SetProperty}{field, value} - Set a property through MsiSummaryInfoSetProperty. \var{field} + Set a property through \cfunction{MsiSummaryInfoSetProperty}. \var{field} can have the same values as in \method{GetProperty}, \var{value} is the new value of the property. Possible value types are integer and string. @@ -214,7 +215,7 @@ \begin{methoddesc}{Persist}{} Write the modified properties to the summary information stream, - using MsiSummaryInfoPersist. + using \cfunction{MsiSummaryInfoPersist}. \end{methoddesc} \begin{seealso} @@ -227,27 +228,27 @@ \subsection{Record Objects\label{record-objects}} \begin{methoddesc}{GetFieldCount}{} - Return the number of fields of the record, through MsiRecordGetFieldCount. + Return the number of fields of the record, through \cfunction{MsiRecordGetFieldCount}. \end{methoddesc} \begin{methoddesc}{SetString}{field, value} - Set \var{field} to \var{value} through MsiRecordSetString. + Set \var{field} to \var{value} through \cfunction{MsiRecordSetString}. \var{field} must be an integer; \var{value} a string. \end{methoddesc} \begin{methoddesc}{SetStream}{field, value} Set \var{field} to the contents of the file named \var{value}, - through MsiRecordSetStream. + through \cfunction{MsiRecordSetStream}. \var{field} must be an integer; \var{value} a string. \end{methoddesc} \begin{methoddesc}{SetInteger}{field, value} - Set \var{field} to \var{value} through MsiRecordSetInteger. - Both \var{field} and \var{value} must be an integers. + Set \var{field} to \var{value} through \cfunction{MsiRecordSetInteger}. + Both \var{field} and \var{value} must be an integer. \end{methoddesc} \begin{methoddesc}{ClearData}{} - Set all fields of the record to 0, through MsiRecordClearData. + Set all fields of the record to 0, through \cfunction{MsiRecordClearData}. \end{methoddesc} \begin{seealso} @@ -295,13 +296,14 @@ logical, default, component, \optional{flags}} Create a new directory in the Directory table. There is a current component at each point in time for the directory, which is either - explicitly created through start_component, or implicitly when files + explicitly created through \function{start_component}, or implicitly when files are added for the first time. Files are added into the current component, and into the cab file. To create a directory, a base - directory object needs to be specified (can be None), the path to - the physical directory, and a logical directory name. Default + directory object needs to be specified (can be \code{None}), the path to + the physical directory, and a logical directory name. \var{default} specifies the DefaultDir slot in the directory table. componentflags specifies the default flags that new components get. + % XXX signature says 'component', 'flags'; text says 'componentflags'. \end{classdesc} \begin{methoddesc}[Directory]{start_component}{\optional{component\optional{, From python-checkins at python.org Mon May 1 18:32:49 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 18:32:49 +0200 (CEST) Subject: [Python-checkins] r45843 - python/trunk/Doc/whatsnew/whatsnew25.tex Message-ID: <20060501163249.C7FCA1E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 18:32:49 2006 New Revision: 45843 Modified: python/trunk/Doc/whatsnew/whatsnew25.tex Log: Add item Modified: python/trunk/Doc/whatsnew/whatsnew25.tex ============================================================================== --- python/trunk/Doc/whatsnew/whatsnew25.tex (original) +++ python/trunk/Doc/whatsnew/whatsnew25.tex Mon May 1 18:32:49 2006 @@ -1378,6 +1378,11 @@ (Contributed by Gregory K. Johnson. Funding was provided by Google's 2005 Summer of Code.) +\item New module: the \module{msilib} module allows creating +Microsoft Installer \file{.msi} files and CAB files. Some support +for reading the \file{.msi} database is also included. +(Contributed by Martin von~L\"owis.) + \item The \module{nis} module now supports accessing domains other than the system default domain by supplying a \var{domain} argument to the \function{nis.match()} and \function{nis.maps()} functions. From buildbot at python.org Mon May 1 18:44:10 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 16:44:10 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060501164410.C84091E400F@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/341 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: gerhard.haering Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Mon May 1 19:06:54 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 19:06:54 +0200 (CEST) Subject: [Python-checkins] r45844 - python/trunk/Doc/lib/libmsilib.tex Message-ID: <20060501170654.F39881E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 19:06:54 2006 New Revision: 45844 Modified: python/trunk/Doc/lib/libmsilib.tex Log: Markup fixes Modified: python/trunk/Doc/lib/libmsilib.tex ============================================================================== --- python/trunk/Doc/lib/libmsilib.tex (original) +++ python/trunk/Doc/lib/libmsilib.tex Mon May 1 19:06:54 2006 @@ -296,7 +296,7 @@ logical, default, component, \optional{flags}} Create a new directory in the Directory table. There is a current component at each point in time for the directory, which is either - explicitly created through \function{start_component}, or implicitly when files + explicitly created through \method{start_component}, or implicitly when files are added for the first time. Files are added into the current component, and into the cab file. To create a directory, a base directory object needs to be specified (can be \code{None}), the path to @@ -309,30 +309,30 @@ \begin{methoddesc}[Directory]{start_component}{\optional{component\optional{, feature\optional{, flags\optional{, keyfile\optional{, uuid}}}}}} Add an entry to the Component table, and make this component the - current for this directory. If no component name is given, the - directory name is used. If no feature is given, the current feature - is used. If no flags are given, the directory's default flags are - used. If no keyfile is given, the KeyPath is left null in the + current component for this directory. If no component name is given, the + directory name is used. If no \var{feature} is given, the current feature + is used. If no \var{flags} are given, the directory's default flags are + used. If no \var{keyfile} is given, the KeyPath is left null in the Component table. \end{methoddesc} \begin{methoddesc}[Directory]{add_file}{file\optional{, src\optional{, version\optional{, language}}}} Add a file to the current component of the directory, starting a new - one one if there is no current component. By default, the file name - in the source and the file table will be identical. If the src file + one if there is no current component. By default, the file name + in the source and the file table will be identical. If the \var{src} file is specified, it is interpreted relative to the current - directory. Optionally, a version and a language can be specified for + directory. Optionally, a \var{version} and a \var{language} can be specified for the entry in the File table. \end{methoddesc} \begin{methoddesc}[Directory]{glob}{pattern\optional{, exclude}} Add a list of files to the current component as specified in the glob - pattern. Individual files can be excluded in the exclude list. + pattern. Individual files can be excluded in the \var{exclude} list. \end{methoddesc} \begin{methoddesc}[Directory]{remove_pyc}{} - Remove .pyc/.pyo files on uninstall + Remove \code{.pyc}/\code{.pyo} files on uninstall. \end{methoddesc} \begin{seealso} @@ -409,14 +409,14 @@ \begin{classdesc}{Dialog}{db, name, x, y, w, h, attr, title, first, default, cancel} - Return a new Dialog object. An entry in the \code{Dialog} table + Return a new \class{Dialog} object. An entry in the \code{Dialog} table is made, with the specified coordinates, dialog attributes, title, name of the first, default, and cancel controls. \end{classdesc} \begin{methoddesc}[Dialog]{control}{name, type, x, y, width, height, attributes, property, text, control_next, help} - Return a new Control object. An entry in the \code{Control} table + Return a new \class{Control} object. An entry in the \code{Control} table is made with the specified parameters. This is a generic method; for specific types, specialized methods From python-checkins at python.org Mon May 1 19:26:22 2006 From: python-checkins at python.org (guido.van.rossum) Date: Mon, 1 May 2006 19:26:22 +0200 (CEST) Subject: [Python-checkins] r45845 - peps/trunk/pep-3099.txt Message-ID: <20060501172622.E94981E400F@bag.python.org> Author: guido.van.rossum Date: Mon May 1 19:26:22 2006 New Revision: 45845 Modified: peps/trunk/pep-3099.txt Log: Clarify the sentence "python won't be unicode" which could be interpreted too broadly. Modified: peps/trunk/pep-3099.txt ============================================================================== --- peps/trunk/pep-3099.txt (original) +++ peps/trunk/pep-3099.txt Mon May 1 19:26:22 2006 @@ -47,8 +47,8 @@ Thread: "Adding sorting to generator comprehension", http://mail.python.org/pipermail/python-3000/2006-April/001295.html -* Python won't use Unicode characters for anything except string - literals or comments. +* Python 3000 source code won't use non-ASCII Unicode characters for + anything except string literals or comments. Thread: sets in P3K? http://mail.python.org/pipermail/python-3000/2006-April/01474.html From jimjjewett at gmail.com Mon May 1 19:42:13 2006 From: jimjjewett at gmail.com (Jim Jewett) Date: Mon, 1 May 2006 13:42:13 -0400 Subject: [Python-checkins] r45845 - peps/trunk/pep-3099.txt In-Reply-To: <20060501172622.E94981E400F@bag.python.org> References: <20060501172622.E94981E400F@bag.python.org> Message-ID: thank you. On 5/1/06, guido.van.rossum wrote: > Author: guido.van.rossum > Date: Mon May 1 19:26:22 2006 > New Revision: 45845 > > Modified: > peps/trunk/pep-3099.txt > Log: > Clarify the sentence "python won't be unicode" which could be interpreted > too broadly. > > > Modified: peps/trunk/pep-3099.txt > ============================================================================== > --- peps/trunk/pep-3099.txt (original) > +++ peps/trunk/pep-3099.txt Mon May 1 19:26:22 2006 > @@ -47,8 +47,8 @@ > Thread: "Adding sorting to generator comprehension", > http://mail.python.org/pipermail/python-3000/2006-April/001295.html > > -* Python won't use Unicode characters for anything except string > - literals or comments. > +* Python 3000 source code won't use non-ASCII Unicode characters for > + anything except string literals or comments. > > Thread: sets in P3K? > http://mail.python.org/pipermail/python-3000/2006-April/01474.html > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From buildbot at python.org Mon May 1 19:54:19 2006 From: buildbot at python.org (buildbot at python.org) Date: Mon, 01 May 2006 17:54:19 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060501175419.AD7741E400F@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/343 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: andrew.kuchling Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Mon May 1 21:59:50 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 21:59:50 +0200 (CEST) Subject: [Python-checkins] r45846 - peps/trunk/pep-0230.txt Message-ID: <20060501195950.904841E4010@bag.python.org> Author: andrew.kuchling Date: Mon May 1 21:59:50 2006 New Revision: 45846 Modified: peps/trunk/pep-0230.txt Log: Remove duplicate Status header; mark as Final to match statue in PEP 0 Modified: peps/trunk/pep-0230.txt ============================================================================== --- peps/trunk/pep-0230.txt (original) +++ peps/trunk/pep-0230.txt Mon May 1 21:59:50 2006 @@ -3,10 +3,9 @@ Version: $Revision$ Last-Modified: $Date$ Author: guido at python.org (Guido van Rossum) -Status: Draft Type: Standards Track Python-Version: 2.1 -Status: Incomplete +Status: Final Post-History: 05-Nov-2000 From python-checkins at python.org Mon May 1 22:00:15 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 22:00:15 +0200 (CEST) Subject: [Python-checkins] r45847 - peps/trunk/pep-0231.txt Message-ID: <20060501200015.40BB01E4023@bag.python.org> Author: andrew.kuchling Date: Mon May 1 22:00:14 2006 New Revision: 45847 Modified: peps/trunk/pep-0231.txt Log: Mark as Rejected to match statue in PEP 0 Modified: peps/trunk/pep-0231.txt ============================================================================== --- peps/trunk/pep-0231.txt (original) +++ peps/trunk/pep-0231.txt Mon May 1 22:00:14 2006 @@ -4,7 +4,7 @@ Last-Modified: $Date$ Author: barry at python.org (Barry A. Warsaw) Python-Version: 2.1 -Status: Draft +Status: Rejected Type: Standards Created: 30-Nov-2000 Post-History: From python-checkins at python.org Mon May 1 22:03:46 2006 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 May 2006 22:03:46 +0200 (CEST) Subject: [Python-checkins] r45848 - peps/trunk/pep-0211.txt peps/trunk/pep-0212.txt peps/trunk/pep-0213.txt peps/trunk/pep-0219.txt peps/trunk/pep-0225.txt peps/trunk/pep-0262.txt Message-ID: <20060501200346.AC5771E400F@bag.python.org> Author: andrew.kuchling Date: Mon May 1 22:03:44 2006 New Revision: 45848 Modified: peps/trunk/pep-0211.txt peps/trunk/pep-0212.txt peps/trunk/pep-0213.txt peps/trunk/pep-0219.txt peps/trunk/pep-0225.txt peps/trunk/pep-0262.txt Log: Mark as Deferred to match status in PEP 0 Modified: peps/trunk/pep-0211.txt ============================================================================== --- peps/trunk/pep-0211.txt (original) +++ peps/trunk/pep-0211.txt Mon May 1 22:03:44 2006 @@ -3,7 +3,7 @@ Version: $Revision$ Last-Modified: $Date$ Author: gvwilson at ddj.com (Greg Wilson) -Status: Draft +Status: Deferred Type: Standards Track Python-Version: 2.1 Created: 15-Jul-2000 Modified: peps/trunk/pep-0212.txt ============================================================================== --- peps/trunk/pep-0212.txt (original) +++ peps/trunk/pep-0212.txt Mon May 1 22:03:44 2006 @@ -3,7 +3,7 @@ Version: $Revision$ Last-Modified: $Date$ Author: nowonder at nowonder.de (Peter Schneider-Kamp) -Status: Draft +Status: Deferred Type: Standards Track Created: 22-Aug-2000 Python-Version: 2.1 Modified: peps/trunk/pep-0213.txt ============================================================================== --- peps/trunk/pep-0213.txt (original) +++ peps/trunk/pep-0213.txt Mon May 1 22:03:44 2006 @@ -3,7 +3,7 @@ Version: $Revision$ Last-Modified: $Date$ Author: paul at prescod.net (Paul Prescod) -Status: Draft +Status: Deferred Type: Standards Track Python-Version: 2.1 Created: 21-Jul-2000 Modified: peps/trunk/pep-0219.txt ============================================================================== --- peps/trunk/pep-0219.txt (original) +++ peps/trunk/pep-0219.txt Mon May 1 22:03:44 2006 @@ -3,7 +3,7 @@ Version: $Revision$ Last-Modified: $Date$ Author: gmcm at hypernet.com (Gordon McMillan) -Status: Draft +Status: Deferred Type: Standards Track Created: 14-Aug-2000 Python-Version: 2.1 Modified: peps/trunk/pep-0225.txt ============================================================================== --- peps/trunk/pep-0225.txt (original) +++ peps/trunk/pep-0225.txt Mon May 1 22:03:44 2006 @@ -4,7 +4,7 @@ Last-Modified: $Date$ Author: hzhu at users.sourceforge.net (Huaiyu Zhu), gregory.lielens at fft.be (Gregory Lielens) -Status: Draft +Status: Deferred Type: Standards Track Python-Version: 2.1 Created: 19-Sep-2000 Modified: peps/trunk/pep-0262.txt ============================================================================== --- peps/trunk/pep-0262.txt (original) +++ peps/trunk/pep-0262.txt Mon May 1 22:03:44 2006 @@ -5,7 +5,7 @@ Author: A.M. Kuchling Type: Standards Track Created: 08-Jul-2001 -Status: Draft +Status: Deferred Post-History: 27-Mar-2002 Introduction From python-checkins at python.org Mon May 1 22:04:27 2006 From: python-checkins at python.org (guido.van.rossum) Date: Mon, 1 May 2006 22:04:27 +0200 (CEST) Subject: [Python-checkins] r45849 - peps/trunk/pep-3099.txt Message-ID: <20060501200427.58D601E4024@bag.python.org> Author: guido.van.rossum Date: Mon May 1 22:04:27 2006 New Revision: 45849 Modified: peps/trunk/pep-3099.txt Log: Slices won't go away. Modified: peps/trunk/pep-3099.txt ============================================================================== --- peps/trunk/pep-3099.txt (original) +++ peps/trunk/pep-3099.txt Mon May 1 22:04:27 2006 @@ -53,6 +53,13 @@ Thread: sets in P3K? http://mail.python.org/pipermail/python-3000/2006-April/01474.html +* Slices and extended slices won't go away (even if the __getslice__ + and __setslice__ APIs may be replaced) nor will they return views + for the standard object types. + + Thread: Future of slices + http://mail.python.org/pipermail/python-3000/2006-May/001563.html + Builtins ======== From neal at metaslash.com Mon May 1 22:12:21 2006 From: neal at metaslash.com (Neal Norwitz) Date: Mon, 1 May 2006 16:12:21 -0400 Subject: [Python-checkins] Python Regression Test Failures basics (1) Message-ID: <20060501201221.GA31661@python.psfb.org> case $MAKEFLAGS in \ *-s*) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py -q build;; \ *) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py build;; \ esac running build running build_ext db.h: found (4, 1) in /usr/include db lib: using (4, 1) db-4.1 sqlite: found /usr/include/sqlite3.h /usr/include/sqlite3.h: version 3.2.1 INFO: Can't locate Tcl/Tk libs and/or headers running build_scripts [33709 refs] ./python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform [8459 refs] find ./Lib -name '*.py[co]' -print | xargs rm -f ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test test_ctypes failed -- Traceback (most recent call last): File "/home/neal/python/trunk/Lib/ctypes/test/test_python_api.py", line 41, in test_PyInt_Long self.failUnlessEqual(grc(42), ref42) AssertionError: 336 != 337 test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8464 refs] [8464 refs] [8464 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8800 refs] [8800 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8675 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] this bit of output is from a test of stdout in a different process ... [8459 refs] [8459 refs] [8675 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8459 refs] [8459 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8459 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 284 tests OK. 1 test failed: test_ctypes 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [421880 refs] make: [test] Error 1 (ignored) ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8464 refs] [8464 refs] [8464 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8800 refs] [8800 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8675 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] this bit of output is from a test of stdout in a different process ... [8459 refs] [8459 refs] [8675 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8459 refs] [8459 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8459 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 285 tests OK. 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [421313 refs] From python-checkins at python.org Tue May 2 06:43:16 2006 From: python-checkins at python.org (neal.norwitz) Date: Tue, 2 May 2006 06:43:16 +0200 (CEST) Subject: [Python-checkins] r45850 - in python/trunk: Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWS Objects/fileobject.c Python/bltinmodule.c Message-ID: <20060502044316.408951E4010@bag.python.org> Author: neal.norwitz Date: Tue May 2 06:43:14 2006 New Revision: 45850 Modified: python/trunk/Doc/lib/libfuncs.tex python/trunk/Lib/test/test_subprocess.py python/trunk/Misc/NEWS python/trunk/Objects/fileobject.c python/trunk/Python/bltinmodule.c Log: SF #1479181: split open() and file() from being aliases for each other. Modified: python/trunk/Doc/lib/libfuncs.tex ============================================================================== --- python/trunk/Doc/lib/libfuncs.tex (original) +++ python/trunk/Doc/lib/libfuncs.tex Tue May 2 06:43:14 2006 @@ -455,12 +455,7 @@ after any I/O has been performed, and there's no reliable way to determine whether this is the case.} - The \function{file()} constructor is new in Python 2.2 and is an - alias for \function{open()}. Both spellings are equivalent. The - intent is for \function{open()} to continue to be preferred for use - as a factory function which returns a new \class{file} object. The - spelling, \class{file} is more suited to type testing (for example, - writing \samp{isinstance(f, file)}). + \versionadded{2.2} \end{funcdesc} \begin{funcdesc}{filter}{function, list} @@ -725,7 +720,10 @@ \end{funcdesc} \begin{funcdesc}{open}{filename\optional{, mode\optional{, bufsize}}} - An alias for the \function{file()} function above. + A wrapper for the \function{file()} function above. The intent is + for \function{open()} to be preferred for use as a factory function + returning a new \class{file} object. \class{file} is more suited to + type testing (for example, writing \samp{isinstance(f, file)}). \end{funcdesc} \begin{funcdesc}{ord}{c} Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Tue May 2 06:43:14 2006 @@ -347,7 +347,7 @@ stdout=subprocess.PIPE, universal_newlines=1) stdout = p.stdout.read() - if hasattr(open, 'newlines'): + if hasattr(p.stdout, 'newlines'): # Interpreter with universal newline support self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") @@ -374,7 +374,7 @@ stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=1) (stdout, stderr) = p.communicate() - if hasattr(open, 'newlines'): + if hasattr(stdout, 'newlines'): # Interpreter with universal newline support self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Tue May 2 06:43:14 2006 @@ -12,6 +12,8 @@ Core and builtins ----------------- +- Patch #1479181: split open() and file() from being aliases for each other. + - Bug #1465834: 'bdist_wininst preinstall script support' was fixed by converting these apis from macros into exported functions again: Modified: python/trunk/Objects/fileobject.c ============================================================================== --- python/trunk/Objects/fileobject.c (original) +++ python/trunk/Objects/fileobject.c Tue May 2 06:43:14 2006 @@ -2025,10 +2025,6 @@ "'\\r', '\\n', '\\r\\n' or a tuple containing all the newline types seen.\n" "\n" "'U' cannot be combined with 'w' or '+' mode.\n" -) -PyDoc_STR( -"\n" -"Note: open() is an alias for file()." ); PyTypeObject PyFile_Type = { Modified: python/trunk/Python/bltinmodule.c ============================================================================== --- python/trunk/Python/bltinmodule.c (original) +++ python/trunk/Python/bltinmodule.c Tue May 2 06:43:14 2006 @@ -1342,6 +1342,18 @@ static PyObject * +builtin_open(PyObject *self, PyObject *args, PyObject *kwds) +{ + return PyObject_Call((PyObject*)&PyFile_Type, args, kwds); +} + +PyDoc_STRVAR(open_doc, +"open(name[, mode[, buffering]]) -> file object\n\ +\n\ +Open a file using the file() type, returns a file object."); + + +static PyObject * builtin_ord(PyObject *self, PyObject* obj) { long ord; @@ -2247,6 +2259,7 @@ {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc}, {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc}, {"oct", builtin_oct, METH_O, oct_doc}, + {"open", (PyCFunction)builtin_open, METH_VARARGS | METH_KEYWORDS, open_doc}, {"ord", builtin_ord, METH_O, ord_doc}, {"pow", builtin_pow, METH_VARARGS, pow_doc}, {"range", builtin_range, METH_VARARGS, range_doc}, @@ -2313,6 +2326,7 @@ #endif SETBUILTIN("dict", &PyDict_Type); SETBUILTIN("enumerate", &PyEnum_Type); + SETBUILTIN("file", &PyFile_Type); SETBUILTIN("float", &PyFloat_Type); SETBUILTIN("frozenset", &PyFrozenSet_Type); SETBUILTIN("property", &PyProperty_Type); @@ -2329,10 +2343,6 @@ SETBUILTIN("tuple", &PyTuple_Type); SETBUILTIN("type", &PyType_Type); SETBUILTIN("xrange", &PyRange_Type); - - /* Note that open() is just an alias of file(). */ - SETBUILTIN("open", &PyFile_Type); - SETBUILTIN("file", &PyFile_Type); #ifdef Py_USING_UNICODE SETBUILTIN("unicode", &PyUnicode_Type); #endif From python-checkins at python.org Tue May 2 06:57:06 2006 From: python-checkins at python.org (neal.norwitz) Date: Tue, 2 May 2006 06:57:06 +0200 (CEST) Subject: [Python-checkins] r45851 - peps/trunk/pep-0356.txt Message-ID: <20060502045706.760611E4010@bag.python.org> Author: neal.norwitz Date: Tue May 2 06:57:06 2006 New Revision: 45851 Modified: peps/trunk/pep-0356.txt Log: I just checked this in Modified: peps/trunk/pep-0356.txt ============================================================================== --- peps/trunk/pep-0356.txt (original) +++ peps/trunk/pep-0356.txt Tue May 2 06:57:06 2006 @@ -131,10 +131,6 @@ remove the ones that don't. (Owner: Anthony) - - file() vs. open(), round 7 - http://mail.python.org/pipermail/python-dev/2005-December/thread.html#59073 - (Owner: Aahz) - - All modules in Modules/ should be updated to be ssize_t clean. (Owner: Neal) From buildbot at python.org Tue May 2 07:04:51 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 05:04:51 +0000 Subject: [Python-checkins] buildbot warnings in x86 XP-2 trunk Message-ID: <20060502050451.9508E1E4010@bag.python.org> The Buildbot has detected a new failure of x86 XP-2 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520XP-2%2520trunk/builds/415 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Tue May 2 07:11:51 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 05:11:51 +0000 Subject: [Python-checkins] buildbot warnings in x86 W2k trunk Message-ID: <20060502051151.259CB1E4010@bag.python.org> The Buildbot has detected a new failure of x86 W2k trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520W2k%2520trunk/builds/621 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Tue May 2 07:19:11 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 05:19:11 +0000 Subject: [Python-checkins] buildbot warnings in x86 XP trunk Message-ID: <20060502051911.C04D41E4010@bag.python.org> The Buildbot has detected a new failure of x86 XP trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520XP%2520trunk/builds/632 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Tue May 2 07:31:24 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 05:31:24 +0000 Subject: [Python-checkins] buildbot warnings in alpha Tru64 5.1 trunk Message-ID: <20060502053124.457361E4010@bag.python.org> The Buildbot has detected a new failure of alpha Tru64 5.1 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Tru64%25205.1%2520trunk/builds/402 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From tim.peters at gmail.com Tue May 2 07:52:57 2006 From: tim.peters at gmail.com (Tim Peters) Date: Tue, 2 May 2006 01:52:57 -0400 Subject: [Python-checkins] r45850 - in python/trunk: Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWS Objects/fileobject.c Python/bltinmodule.c In-Reply-To: <20060502044316.408951E4010@bag.python.org> References: <20060502044316.408951E4010@bag.python.org> Message-ID: <1f7befae0605012252s1c563b04o8ed6a797d2861f87@mail.gmail.com> > Author: neal.norwitz > Date: Tue May 2 06:43:14 2006 > New Revision: 45850 > > Modified: > python/trunk/Doc/lib/libfuncs.tex > python/trunk/Lib/test/test_subprocess.py > python/trunk/Misc/NEWS > python/trunk/Objects/fileobject.c > python/trunk/Python/bltinmodule.c > Log: > SF #1479181: split open() and file() from being aliases for each other. Umm ... why? I suppose I wouldn't care, except it left test_subprocess failing on all the Windows buildbots, and I don't feel like figuring out why. To a first approximation, test_universal_newlines_communicate() now takes the # Interpreter without universal newline support branch on Windows, but shouldn't. From python-checkins at python.org Tue May 2 08:23:23 2006 From: python-checkins at python.org (neal.norwitz) Date: Tue, 2 May 2006 08:23:23 +0200 (CEST) Subject: [Python-checkins] r45852 - in python/trunk/Lib: subprocess.py test/test_subprocess.py Message-ID: <20060502062323.7F02A1E4010@bag.python.org> Author: neal.norwitz Date: Tue May 2 08:23:22 2006 New Revision: 45852 Modified: python/trunk/Lib/subprocess.py python/trunk/Lib/test/test_subprocess.py Log: Try to fix breakage caused by patch #1479181, r45850 Modified: python/trunk/Lib/subprocess.py ============================================================================== --- python/trunk/Lib/subprocess.py (original) +++ python/trunk/Lib/subprocess.py Tue May 2 08:23:22 2006 @@ -872,7 +872,7 @@ # object do the translation: It is based on stdio, which is # impossible to combine with select (unless forcing no # buffering). - if self.universal_newlines and hasattr(open, 'newlines'): + if self.universal_newlines and hasattr(file, 'newlines'): if stdout: stdout = self._translate_newlines(stdout) if stderr: @@ -1141,7 +1141,7 @@ # object do the translation: It is based on stdio, which is # impossible to combine with select (unless forcing no # buffering). - if self.universal_newlines and hasattr(open, 'newlines'): + if self.universal_newlines and hasattr(file, 'newlines'): if stdout: stdout = self._translate_newlines(stdout) if stderr: Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Tue May 2 08:23:22 2006 @@ -347,7 +347,7 @@ stdout=subprocess.PIPE, universal_newlines=1) stdout = p.stdout.read() - if hasattr(p.stdout, 'newlines'): + if hasattr(file, 'newlines'): # Interpreter with universal newline support self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") @@ -374,7 +374,7 @@ stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=1) (stdout, stderr) = p.communicate() - if hasattr(stdout, 'newlines'): + if hasattr(file, 'newlines'): # Interpreter with universal newline support self.assertEqual(stdout, "line1\nline2\nline3\nline4\nline5\nline6") From nnorwitz at gmail.com Tue May 2 08:25:47 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Mon, 1 May 2006 23:25:47 -0700 Subject: [Python-checkins] [Python-Dev] r45850 - in python/trunk: Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWS Objects/fileobject.c Python/bltinmodule.c In-Reply-To: <1f7befae0605012252s1c563b04o8ed6a797d2861f87@mail.gmail.com> References: <20060502044316.408951E4010@bag.python.org> <1f7befae0605012252s1c563b04o8ed6a797d2861f87@mail.gmail.com> Message-ID: On 5/1/06, Tim Peters wrote: > > Author: neal.norwitz > > Date: Tue May 2 06:43:14 2006 > > New Revision: 45850 > > > > Modified: > > python/trunk/Doc/lib/libfuncs.tex > > python/trunk/Lib/test/test_subprocess.py > > python/trunk/Misc/NEWS > > python/trunk/Objects/fileobject.c > > python/trunk/Python/bltinmodule.c > > Log: > > SF #1479181: split open() and file() from being aliases for each other. > > Umm ... why? I suppose I wouldn't care, except it left I'll let Aahz answer that, it's his patch. > test_subprocess failing on all the Windows buildbots, and I don't feel > like figuring out why. To a first approximation, > test_universal_newlines_communicate() now takes the > > # Interpreter without universal newline support > > branch on Windows, but shouldn't. I tried to fix that breakage. n From python-checkins at python.org Tue May 2 08:54:00 2006 From: python-checkins at python.org (fred.drake) Date: Tue, 2 May 2006 08:54:00 +0200 (CEST) Subject: [Python-checkins] r45853 - in python/trunk: Doc/lib/libweakref.tex Lib/test/test_weakref.py Lib/weakref.py Message-ID: <20060502065400.33AD41E4010@bag.python.org> Author: fred.drake Date: Tue May 2 08:53:59 2006 New Revision: 45853 Modified: python/trunk/Doc/lib/libweakref.tex python/trunk/Lib/test/test_weakref.py python/trunk/Lib/weakref.py Log: SF #1479988: add methods to allow access to weakrefs for the weakref.WeakKeyDictionary and weakref.WeakValueDictionary Modified: python/trunk/Doc/lib/libweakref.tex ============================================================================== --- python/trunk/Doc/lib/libweakref.tex (original) +++ python/trunk/Doc/lib/libweakref.tex Tue May 2 08:53:59 2006 @@ -147,6 +147,24 @@ to vanish "by magic" (as a side effect of garbage collection).} \end{classdesc} +\class{WeakKeyDictionary} objects have the following additional +methods. These expose the internal references directly. The +references are not guaranteed to be ``live'' at the time they are +used, so the result of calling the references needs to be checked +before being used. This can be used to avoid creating references that +will cause the garbage collector to keep the keys around longer than +needed. + +\begin{methoddesc}{iterkeyrefs}{} + Return an iterator that yields the weak references to the keys. + \versionadded{2.5} +\end{methoddesc} + +\begin{methoddesc}{keyrefs}{} + Return a list of weak references to the keys. + \versionadded{2.5} +\end{methoddesc} + \begin{classdesc}{WeakValueDictionary}{\optional{dict}} Mapping class that references values weakly. Entries in the dictionary will be discarded when no strong reference to the value @@ -160,6 +178,21 @@ to vanish "by magic" (as a side effect of garbage collection).} \end{classdesc} +\class{WeakValueDictionary} objects have the following additional +methods. These method have the same issues as the +\method{iterkeyrefs()} and \method{keyrefs()} methods of +\class{WeakKeyDictionary} objects. + +\begin{methoddesc}{itervaluerefs}{} + Return an iterator that yields the weak references to the values. + \versionadded{2.5} +\end{methoddesc} + +\begin{methoddesc}{valuerefs}{} + Return a list of weak references to the values. + \versionadded{2.5} +\end{methoddesc} + \begin{datadesc}{ReferenceType} The type object for weak references objects. \end{datadesc} Modified: python/trunk/Lib/test/test_weakref.py ============================================================================== --- python/trunk/Lib/test/test_weakref.py (original) +++ python/trunk/Lib/test/test_weakref.py Tue May 2 08:53:59 2006 @@ -769,10 +769,54 @@ dict, objects = self.make_weak_keyed_dict() self.check_iters(dict) + # Test keyrefs() + refs = dict.keyrefs() + self.assertEqual(len(refs), len(objects)) + objects2 = list(objects) + for wr in refs: + ob = wr() + self.assert_(dict.has_key(ob)) + self.assert_(ob in dict) + self.assertEqual(ob.arg, dict[ob]) + objects2.remove(ob) + self.assertEqual(len(objects2), 0) + + # Test iterkeyrefs() + objects2 = list(objects) + self.assertEqual(len(list(dict.iterkeyrefs())), len(objects)) + for wr in dict.iterkeyrefs(): + ob = wr() + self.assert_(dict.has_key(ob)) + self.assert_(ob in dict) + self.assertEqual(ob.arg, dict[ob]) + objects2.remove(ob) + self.assertEqual(len(objects2), 0) + def test_weak_valued_iters(self): dict, objects = self.make_weak_valued_dict() self.check_iters(dict) + # Test valuerefs() + refs = dict.valuerefs() + self.assertEqual(len(refs), len(objects)) + objects2 = list(objects) + for wr in refs: + ob = wr() + self.assertEqual(ob, dict[ob.arg]) + self.assertEqual(ob.arg, dict[ob.arg].arg) + objects2.remove(ob) + self.assertEqual(len(objects2), 0) + + # Test itervaluerefs() + objects2 = list(objects) + self.assertEqual(len(list(dict.itervaluerefs())), len(objects)) + for wr in dict.itervaluerefs(): + ob = wr() + self.assertEqual(ob, dict[ob.arg]) + self.assertEqual(ob.arg, dict[ob.arg].arg) + objects2.remove(ob) + self.assertEqual(len(objects2), 0) + def check_iters(self, dict): # item iterator: items = dict.items() Modified: python/trunk/Lib/weakref.py ============================================================================== --- python/trunk/Lib/weakref.py (original) +++ python/trunk/Lib/weakref.py Tue May 2 08:53:59 2006 @@ -118,6 +118,18 @@ def __iter__(self): return self.data.iterkeys() + def itervaluerefs(self): + """Return an iterator that yields the weak references to the values. + + The references are not guaranteed to be 'live' at the time + they are used, so the result of calling the references needs + to be checked before being used. This can be used to avoid + creating references that will cause the garbage collector to + keep the values around longer than needed. + + """ + return self.data.itervalues() + def itervalues(self): for wr in self.data.itervalues(): obj = wr() @@ -162,6 +174,18 @@ if len(kwargs): self.update(kwargs) + def valuerefs(self): + """Return a list of weak references to the values. + + The references are not guaranteed to be 'live' at the time + they are used, so the result of calling the references needs + to be checked before being used. This can be used to avoid + creating references that will cause the garbage collector to + keep the values around longer than needed. + + """ + return self.data.values() + def values(self): L = [] for wr in self.data.values(): @@ -263,6 +287,18 @@ if key is not None: yield key, value + def iterkeyrefs(self): + """Return an iterator that yields the weak references to the keys. + + The references are not guaranteed to be 'live' at the time + they are used, so the result of calling the references needs + to be checked before being used. This can be used to avoid + creating references that will cause the garbage collector to + keep the keys around longer than needed. + + """ + return self.data.iterkeys() + def iterkeys(self): for wr in self.data.iterkeys(): obj = wr() @@ -275,6 +311,18 @@ def itervalues(self): return self.data.itervalues() + def keyrefs(self): + """Return a list of weak references to the keys. + + The references are not guaranteed to be 'live' at the time + they are used, so the result of calling the references needs + to be checked before being used. This can be used to avoid + creating references that will cause the garbage collector to + keep the keys around longer than needed. + + """ + return self.data.keys() + def keys(self): L = [] for wr in self.data.keys(): From fredrik at pythonware.com Tue May 2 08:59:12 2006 From: fredrik at pythonware.com (Fredrik Lundh) Date: Tue, 2 May 2006 08:59:12 +0200 Subject: [Python-checkins] r45850 - in python/trunk:Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWSObjects/fileobject.c Python/bltinmodule.c References: <20060502044316.408951E4010@bag.python.org> <1f7befae0605012252s1c563b04o8ed6a797d2861f87@mail.gmail.com> Message-ID: Tim Peters wrote: > > SF #1479181: split open() and file() from being aliases for each other. > > Umm ... why? so that introspection tools can support GvR's pronouncement that "open" should be used to open files, and "file" should be used as a type representing standard (current stdio-based) file handles. From buildbot at python.org Tue May 2 09:11:59 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 07:11:59 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060502071159.BB2481E4010@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/345 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Tue May 2 09:27:48 2006 From: python-checkins at python.org (neal.norwitz) Date: Tue, 2 May 2006 09:27:48 +0200 (CEST) Subject: [Python-checkins] r45854 - python/trunk/Modules/expat/xmlparse.c python/trunk/Modules/expat/xmlrole.c python/trunk/Modules/expat/xmltok.c Message-ID: <20060502072748.E45801E4010@bag.python.org> Author: neal.norwitz Date: Tue May 2 09:27:47 2006 New Revision: 45854 Modified: python/trunk/Modules/expat/xmlparse.c python/trunk/Modules/expat/xmlrole.c python/trunk/Modules/expat/xmltok.c Log: Fix breakage from patch 1471883 (r45800 & r45808) on OSF/1. The problem was that pyconfig.h was being included before some system headers which caused redefinitions and other breakage. This moves system headers after expat_config.h which includes pyconfig.h. Modified: python/trunk/Modules/expat/xmlparse.c ============================================================================== --- python/trunk/Modules/expat/xmlparse.c (original) +++ python/trunk/Modules/expat/xmlparse.c Tue May 2 09:27:47 2006 @@ -2,10 +2,6 @@ See the file COPYING for copying permission. */ -#include -#include /* memset(), memcpy() */ -#include - #define XML_BUILDING_EXPAT 1 #ifdef COMPILED_FROM_DSP @@ -16,6 +12,10 @@ #include #endif /* ndef COMPILED_FROM_DSP */ +#include +#include /* memset(), memcpy() */ +#include + #include "expat.h" #ifdef XML_UNICODE Modified: python/trunk/Modules/expat/xmlrole.c ============================================================================== --- python/trunk/Modules/expat/xmlrole.c (original) +++ python/trunk/Modules/expat/xmlrole.c Tue May 2 09:27:47 2006 @@ -2,8 +2,6 @@ See the file COPYING for copying permission. */ -#include - #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) @@ -14,6 +12,8 @@ #endif #endif /* ndef COMPILED_FROM_DSP */ +#include + #include "expat_external.h" #include "internal.h" #include "xmlrole.h" Modified: python/trunk/Modules/expat/xmltok.c ============================================================================== --- python/trunk/Modules/expat/xmltok.c (original) +++ python/trunk/Modules/expat/xmltok.c Tue May 2 09:27:47 2006 @@ -2,8 +2,6 @@ See the file COPYING for copying permission. */ -#include - #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) @@ -14,6 +12,8 @@ #endif #endif /* ndef COMPILED_FROM_DSP */ +#include + #include "expat_external.h" #include "internal.h" #include "xmltok.h" From tim.peters at gmail.com Tue May 2 09:47:42 2006 From: tim.peters at gmail.com (Tim Peters) Date: Tue, 2 May 2006 03:47:42 -0400 Subject: [Python-checkins] r45850 - in python/trunk:Doc/lib/libfuncs.tex Lib/test/test_subprocess.py Misc/NEWSObjects/fileobject.c Python/bltinmodule.c In-Reply-To: References: <20060502044316.408951E4010@bag.python.org> <1f7befae0605012252s1c563b04o8ed6a797d2861f87@mail.gmail.com> Message-ID: <1f7befae0605020047o4c138450vd4dbc1385fa422a9@mail.gmail.com> >>> SF #1479181: split open() and file() from being aliases for each other. >> Umm ... why? [/F] > so that introspection tools can support GvR's pronouncement that "open" > should be used to open files, and "file" should be used as a type representing > standard (current stdio-based) file handles. Maybe some of the intended changes are missing? The post-patch docstrings don't draw this distinction, and I'm lost about what else introspection tools could be looking at to make the distinction (special-casing the names? but they could have done that before): """ >>> print open.__doc__ open(name[, mode[, buffering]]) -> file object Open a file using the file() type, returns a file object. >>> print file.__doc__ file(name[, mode[, buffering]]) -> file object Open a file. The mode can be 'r', 'w' or 'a' for reading (default), writing or appending. The file will be created if it doesn't exist when opened for writing or appending; it will be truncated when opened for writing. Add a 'b' to the mode for binary files. Add a '+' to the mode to allow simultaneous reading and writing. If the buffering argument is given, 0 means unbuffered, 1 means line buffered, and larger numbers specify the buffer size. Add a 'U' to mode to open the file for input with universal newline support. Any line ending in the input file will be seen as a '\n' in Python. Also, a file so opened gains the attribute 'newlines'; the value for this attribute is one of None (no newline read yet), '\r', '\n', '\r\n' or a tuple containing all the newline types seen. 'U' cannot be combined with 'w' or '+' mode. >>> """ In Python 2.4, the docstrings were of course the same (the current trunk's file.__doc__ except for a line at the end). Since all useful info about how to open a file has been purged from open()'s docstring, if you've got the intent right, looks like the implementation got it backwards ;-) OK, maybe this is what you have in mind: >>> type(open) >>> type(file) Fine, if that's all there really is to this, but I think it's a net loss if open()'s docstring regression stands -- someone should finish this job, or it should be reverted. From neal at metaslash.com Tue May 2 10:12:24 2006 From: neal at metaslash.com (Neal Norwitz) Date: Tue, 2 May 2006 04:12:24 -0400 Subject: [Python-checkins] Python Regression Test Failures basics (1) Message-ID: <20060502081224.GA8539@python.psfb.org> case $MAKEFLAGS in \ *-s*) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py -q build;; \ *) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py build;; \ esac running build running build_ext db.h: found (4, 1) in /usr/include db lib: using (4, 1) db-4.1 sqlite: found /usr/include/sqlite3.h /usr/include/sqlite3.h: version 3.2.1 INFO: Can't locate Tcl/Tk libs and/or headers running build_scripts [33709 refs] ./python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform [8459 refs] find ./Lib -name '*.py[co]' -print | xargs rm -f ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8464 refs] [8464 refs] [8464 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8800 refs] [8800 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8675 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] this bit of output is from a test of stdout in a different process ... [8459 refs] [8459 refs] [8675 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8459 refs] [8459 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8459 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 285 tests OK. 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [422013 refs] ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test test_ctypes failed -- Traceback (most recent call last): File "/home/neal/python/trunk/Lib/ctypes/test/test_python_api.py", line 41, in test_PyInt_Long self.failUnlessEqual(grc(42), ref42) AssertionError: 336 != 337 test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8464 refs] [8464 refs] [8464 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8800 refs] [8800 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8675 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] [8459 refs] this bit of output is from a test of stdout in a different process ... [8459 refs] [8459 refs] [8675 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8459 refs] [8459 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8459 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 284 tests OK. 1 test failed: test_ctypes 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [421412 refs] make: *** [test] Error 1 From python-checkins at python.org Tue May 2 10:35:37 2006 From: python-checkins at python.org (vinay.sajip) Date: Tue, 2 May 2006 10:35:37 +0200 (CEST) Subject: [Python-checkins] r45855 - python/trunk/Lib/logging/handlers.py Message-ID: <20060502083537.8AAB61E4012@bag.python.org> Author: vinay.sajip Date: Tue May 2 10:35:36 2006 New Revision: 45855 Modified: python/trunk/Lib/logging/handlers.py Log: Replaced my dumb way of calculating seconds to midnight with Tim Peters' much more sensible suggestion. What was I thinking ?!? Modified: python/trunk/Lib/logging/handlers.py ============================================================================== --- python/trunk/Lib/logging/handlers.py (original) +++ python/trunk/Lib/logging/handlers.py Tue May 2 10:35:36 2006 @@ -44,6 +44,8 @@ DEFAULT_SOAP_LOGGING_PORT = 9023 SYSLOG_UDP_PORT = 514 +_MIDNIGHT = 24 * 60 * 60 # number of seconds in a day + class BaseRotatingHandler(logging.FileHandler): """ Base class for handlers that rotate log files at a certain point. @@ -217,12 +219,8 @@ currentMinute = t[4] currentSecond = t[5] # r is the number of seconds left between now and midnight - if (currentMinute == 0) and (currentSecond == 0): - r = (24 - currentHour) * 60 * 60 # number of hours in seconds - else: - r = (23 - currentHour) * 60 * 60 - r = r + (59 - currentMinute) * 60 # plus the number of minutes (in secs) - r = r + (60 - currentSecond) # plus the number of seconds + r = _MIDNIGHT - ((currentHour * 60 + currentMinute) * 60 + + currentSecond) self.rolloverAt = currentTime + r # If we are rolling over on a certain day, add in the number of days until # the next rollover, but offset by 1 since we just calculated the time From buildbot at python.org Tue May 2 10:55:02 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 08:55:02 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060502085502.9A98E1E4012@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/347 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: neal.norwitz Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Tue May 2 12:35:23 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 10:35:23 +0000 Subject: [Python-checkins] buildbot warnings in alpha Debian trunk Message-ID: <20060502103523.2D6BA1E4012@bag.python.org> The Buildbot has detected a new failure of alpha Debian trunk. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Debian%2520trunk/builds/67 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: vinay.sajip Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Tue May 2 13:30:04 2006 From: python-checkins at python.org (andrew.kuchling) Date: Tue, 2 May 2006 13:30:04 +0200 (CEST) Subject: [Python-checkins] r45856 - python/trunk/Doc/whatsnew/whatsnew25.tex Message-ID: <20060502113004.BF2C51E4017@bag.python.org> Author: andrew.kuchling Date: Tue May 2 13:30:03 2006 New Revision: 45856 Modified: python/trunk/Doc/whatsnew/whatsnew25.tex Log: Provide encoding as keyword argument; soften warning paragraph about encodings Modified: python/trunk/Doc/whatsnew/whatsnew25.tex ============================================================================== --- python/trunk/Doc/whatsnew/whatsnew25.tex (original) +++ python/trunk/Doc/whatsnew/whatsnew25.tex Tue May 2 13:30:03 2006 @@ -1724,14 +1724,15 @@ # Encoding is UTF-8 f = open('output.xml', 'w') -tree.write(f, 'utf-8') +tree.write(f, encoding='utf-8') \end{verbatim} -(Caution: the default encoding used for output is ASCII, which isn't -very useful for general XML work, raising an exception if there are -any characters with values greater than 127. You should always -specify a different encoding such as UTF-8 that can handle any Unicode -character.) +(Caution: the default encoding used for output is ASCII. For general +XML work, where an element's name may contain arbitrary Unicode +characters, ASCII isn't a very useful encoding because it will raise +an exception if an element's name contains any characters with values +greater than 127. Therefore, it's best to specify a different +encoding such as UTF-8 that can handle any Unicode character.) This section is only a partial description of the ElementTree interfaces. Please read the package's official documentation for more details. From buildbot at python.org Tue May 2 14:42:28 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 12:42:28 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060502124228.C1BD21E4012@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/349 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: andrew.kuchling Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Tue May 2 16:28:50 2006 From: python-checkins at python.org (nick.coghlan) Date: Tue, 2 May 2006 16:28:50 +0200 (CEST) Subject: [Python-checkins] r45857 - peps/trunk/pep-0343.txt Message-ID: <20060502142850.4F5D51E4012@bag.python.org> Author: nick.coghlan Date: Tue May 2 16:28:47 2006 New Revision: 45857 Modified: peps/trunk/pep-0343.txt Log: Remove the __context__ method from PEP 343, and update the terminology section (again). Record a couple of remaining open issues, and try to clarify the resolved issues sections by only giving a very brief overview of all the rejected options that aren't relevant any more. Modified: peps/trunk/pep-0343.txt ============================================================================== --- peps/trunk/pep-0343.txt (original) +++ peps/trunk/pep-0343.txt Tue May 2 16:28:47 2006 @@ -7,18 +7,16 @@ Type: Standards Track Content-Type: text/plain Created: 13-May-2005 -Post-History: 2-Jun-2005, 16-Oct-2005, 29-Oct-2005, 23-Apr-2006 +Post-History: 2-Jun-2005, 16-Oct-2005, 29-Oct-2005, 23-Apr-2006, 1-May-2006 Abstract This PEP adds a new statement "with" to the Python language to make it possible to factor out standard uses of try/finally statements. - The PEP was approved in principle by the BDFL, but there were - still a couple of implementation details to be worked out (see the - section on Resolved Issues). It's still at Draft status until - Guido gives a final blessing to the updated PEP. - + In this PEP, context managers provide __enter__() and __exit__() + methods that are invoked on entry to and exit from the managed + context that forms the body of the with statement. Author's Note @@ -29,13 +27,17 @@ Python's alpha release cycle revealed terminology problems in this PEP and in the associated documentation and implementation [14]. - So while the PEP is already accepted, this refers to the - implementation rather than the exact terminology. + So while the PEP is already accepted in principle, it won't really + be considered stable until the status becomes Final. - The current version of the PEP reflects the implementation and - documentation as at Python 2.5a2. The PEP will be updated to - reflect any changes made to the terminology prior to the final - Python 2.5 release. + The current version of the PEP reflects the discussions that + occurred on python-dev shortly after the release of Python 2.5a2. + The PEP will continue to be updated to reflect any changes made to + the details of the feature prior to the final Python 2.5 release. + + Yes, the verb tense is messed up in a few places. We've been + working on this PEP for nearly a year now, so things that were + originally in the future are now in the past :) Introduction @@ -48,11 +50,8 @@ [2] and universally approved of. I'm also changing the keyword to 'with'. - On-line discussion of this PEP should take place in the Python - Wiki [3]. - - If this PEP is approved, the following PEPs will be rejected due - to overlap: + Following acceptance of this PEP, the following PEPs have been + rejected due to overlap: - PEP 310, Reliable Acquisition/Release Pairs. This is the original with-statement proposal. @@ -66,7 +65,11 @@ important; in fact it may be better to always be explicit about the mutex being used. - (PEP 340 and PEP 346 have already been withdrawn.) + PEP 340 and PEP 346 also overlapped with this PEP, but were + voluntarily withdrawn when this PEP was submitted. + + Some discussion of earlier incarnations of this PEP took place on + the Python Wiki [3]. Motivation and Summary @@ -92,7 +95,7 @@ control flow, in the end, the control flow resumes as if the finally-suite wasn't there at all. - Remember, PEP 310 proposes rougly this syntax (the "VAR =" part is + Remember, PEP 310 proposes roughly this syntax (the "VAR =" part is optional): with VAR = EXPR: @@ -213,6 +216,9 @@ not make the same guarantee. This applies to Jython, IronPython, and probably to Python running on Parrot. + (The details of the changes made to generators can now be found in + PEP 342 rather than in the current PEP) + Use Cases See the Examples section near the end. @@ -236,7 +242,7 @@ The translation of the above statement is: - mgr = (EXPR).__context__() + mgr = (EXPR) exit = mgr.__exit__ # Not calling it yet value = mgr.__enter__() exc = True @@ -260,9 +266,9 @@ implemented as special registers or stack positions. The details of the above translation are intended to prescribe the - exact semantics. If any of the relevant methods are not found as - expected, the interpreter will raise AttributeError, in the order - that they are tried (__context__, __exit__, __enter__). + exact semantics. If either of the relevant methods are not found + as expected, the interpreter will raise AttributeError, in the + order that they are tried (__exit__, __enter__). Similarly, if any of the calls raises an exception, the effect is exactly as it would be in the above code. Finally, if BLOCK contains a break, continue or return statement, the __exit__() @@ -270,15 +276,6 @@ completed normally. (I.e. these "pseudo-exceptions" are not seen as exceptions by __exit__().) - The call to the __context__() method serves a similar purpose to - that of the __iter__() method of iterator and iterables. A context - specifier with simple state requirements (such as - threading.RLock) may provide its own __enter__() and __exit__() - methods, and simply return 'self' from its __context__ method. On - the other hand, a context specifier with more complex state - requirements (such as decimal.Context) may return a distinct - context manager each time its __context__ method is invoked. - If the "as VAR" part of the syntax is omitted, the "VAR =" part of the translation is omitted (but mgr.__enter__() is still called). @@ -324,38 +321,25 @@ of a database transaction roll-back decision. To facilitate chaining of contexts in Python code that directly - manipulates context specifiers and managers, __exit__() methods - should *not* re-raise the error that is passed in to them, because - it is always the responsibility of the *caller* to do any reraising - in that case. + manipulates context managers, __exit__() methods should *not* + re-raise the error that is passed in to them. It is always the + responsibility of the *caller* of the __exit__() method to do any + reraising in that case. That way, if the caller needs to tell whether the __exit__() invocation *failed* (as opposed to successfully cleaning up before propagating the original error), it can do so. If __exit__() returns without an error, this can then be - interpreted as success of the __exit__() method itself (whether the - original error is to be propagated or suppressed). + interpreted as success of the __exit__() method itself (regardless + of whether or not the original error is to be propagated or + suppressed). However, if __exit__() propagates an exception to its caller, this means that __exit__() *itself* has failed. Thus, __exit__() methods should avoid raising errors unless they have actually failed. (And allowing the original error to proceed isn't a failure.) - - Objects returned by __context__() methods should also provide a - __context__() method that returns self. This allows a program to - retrieve the context manager directly without breaking anything. - For example, the following should work just as well as the normal - case where the extra variable isn't used: - - mgr = (EXPR).__context__() - with mgr as VAR: - BLOCK - - The with statement implementation and examples like the nested() - function require this behaviour in order to be able to deal - transparently with both context specifiers and context managers. Transition Plan @@ -382,9 +366,6 @@ def __init__(self, gen): self.gen = gen - def __context__(self): - return self - def __enter__(self): try: return self.gen.next() @@ -435,17 +416,7 @@ A robust implementation of this decorator will be made part of the standard library. - Just as generator-iterator functions are very useful for writing - __iter__() methods for iterables, generator context functions will - be very useful for writing __context__() methods for context - specifiers. These methods will still need to be decorated using the - contextmanager decorator. To ensure an obvious error message if the - decorator is left out, generator-iterator objects will NOT be given - a native context - if you want to ensure a generator is closed - promptly, use something similar to the duck-typed "closing" context - manager in the examples. - -Optional Extensions +Context Managers in the Standard Library It would be possible to endow certain objects, like files, sockets, and locks, with __enter__() and __exit__() methods so @@ -476,133 +447,110 @@ second with-statement calls f.__enter__() again. A similar error can be raised if __enter__ is invoked on a closed file object. - For Python 2.5, the following candidates have been identified for - native context managers: + For Python 2.5, the following types have been identified as + context managers: - file - - decimal.Context - thread.LockType - threading.Lock - threading.RLock - threading.Condition - - threading.Semaphore and threading.BoundedSemaphore + - threading.Semaphore + - threading.BoundedSemaphore -Standard Terminology + A context manager will also be added to the decimal module to + support using a local decimal arithmetic context within the body + of a with statement, automatically restoring the original context + when the with statement is exited. - Discussions about iterators and iterables are aided by the standard - terminology used to discuss them. The protocol used by the for - statement is called the iterator protocol and an iterator is any - object that properly implements that protocol. The term "iterable" - then encompasses all objects with an __iter__() method that - returns an iterator. +Standard Terminology This PEP proposes that the protocol consisting of the __enter__() - and __exit__() methods, and a __context__() method that returns - self be known as the "context management protocol", and that - objects that implement that protocol be known as "context - managers". - - The term "context specifier" then encompasses all objects with a - __context__() method that returns a context manager. The protocol - these objects implement is called the "context specification - protocol". This means that all context managers are context - specifiers, but not all context specifiers are context managers, - just as all iterators are iterables, but not all iterables are - iterators. - - These terms are based on the concept that the context specifier - defines a context of execution for the code that forms the body of - the with statement. The role of the context manager is to - translate the context specifier's stored state into an active - manipulation of the runtime environment to setup and tear down the - desired runtime context for the duration of the with statement. - For example, a synchronisation lock's context manager acquires the - lock when entering the with statement, and releases the lock when - leaving it. The runtime context established within the body of the - with statement is that the synchronisation lock is currently held. + and __exit__() methods be known as the "context management protocol", + and that objects that implement that protocol be known as "context + managers". [4] + + The code in the body of the with statement is a "managed context". + This term refers primarily to the code location, rather than to the + runtime environment established by the context manager. + + The expression immediately following the with keyword in the + statement is a "context expression" as that expression provides the + main clue as to the runtime environment the context manager + establishes for the duration of the managed context. + + The value assigned to the target list after the as keyword is the + "context entry value", as that value is returned as the result of + entering the context. + + These terms are based on the idea that the context expression + provides a context manager to appropriately handle entry into the + managed context. The context manager may also provide a meaningful + context entry value and perform clean up operations on exit from + the managed context. The general term "context" is unfortunately ambiguous. If necessary, - it can be made more explicit by using the terms "context specifier" - for objects providing a __context__() method and "runtime context" - for the runtime environment modifications made by the context - manager. When solely discussing use of the with statement, the - distinction between the two shouldn't matter as the context - specifier fully defines the changes made to the runtime context. - The distinction is more important when discussing the process of - implementing context specifiers and context managers. + it can be made more explicit by using the terms "context manager" + for the concrete object created by the context expression, + "managed context" for the code in the body of the with statement, + and "runtime context" or (preferebly) "runtime environment" for the + actual state modifications made by the context manager. When solely + discussing use of the with statement, the distinction between these + shouldn't matter too much as the context manager fully defines the + changes made to the runtime environment, and those changes apply for + the duration of the managed context. The distinction is more + important when discussing the process of implementing context + managers and the mechanics of the with statement itself. + +Caching Context Managers + + Many context managers (such as files and generator-based contexts) + will be single-use objects. Once the __exit__() method has been + called, the context manager will no longer be in a usable state + (e.g. the file has been closed, or the underlying generator has + finished execution). + + Requiring a fresh manager object for each with statement is the + easiest way to avoid problems with multi-threaded code and nested + with statements trying to use the same context manager. It isn't + coincidental that all of the standard library context managers + that support reuse come from the threading module - they're all + already designed to deal with the problems created by threaded + and nested usage. + + This means that in order to save a context manager with particular + initialisation arguments to be used in multiple with statements, it + will typically be necessary to store it in a zero-argument callable + that is then called in the context expression of each statement + rather than caching the context manager directly. + + When this restriction does not apply, the documentation of the + affected context manager should make that clear. + Open Issues - 1. After this PEP was originally approved, a subsequent discussion - on python-dev [4] settled on the term "context manager" for - objects which provide __enter__ and __exit__ methods, and - "context management protocol" for the protocol itself. With the - addition of the __context__ method to the protocol, the natural - adjustment is to call all objects which provide a __context__ - method "context managers", and the objects with __enter__ and - __exit__ methods "contexts" (or "manageable contexts" in - situations where the general term "context" would be ambiguous). - - As noted above, the Python 2.5 release cycle revealed problems - with the previously agreed terminology. The updated standard - terminology section has not yet met with consensus on - python-dev. It will be refined throughout the Python 2.5 release - cycle based on user feedback on the usability of the - documentation. - The first change made as a result of the current discussion is - replacement of the term "context object" with - "context specifier". - - 2. The original resolution was for the decorator to make a context - manager from a generator to be a builtin called "contextmanager". - The shorter term "context" was considered too ambiguous and - potentially confusing [9]. - The different flavours of generators could then be described as: - - A "generator function" is an undecorated function containing - the 'yield' keyword, and the objects produced by - such functions are "generator-iterators". The term - "generator" may refer to either a generator function or a - generator-iterator depending on the situation. - - A "generator context function" is a generator function to - which the "contextmanager" decorator is applied and the - objects produced by such functions are "generator-context- - managers". The term "generator context" may refer to either - a generator context function or a generator-context-manager - depending on the situation. - - In the Python 2.5 implementation, the decorator is actually part - of the standard library module contextlib. The ongoing - terminology review may lead to it being renamed - "contextlib.context" (with the existence of the underlying context - manager being an implementation detail). + 1. Greg Ewing raised the question of whether or not the term + "context manager" was too generic and suggested "context guard" + as an alternative name. + + 2. In Python 2.5a2, the decorator in contextlib to create a + context manager from a generator function is called + @contextfactory. This made sense when the __context__() + method existed and the result of the factory function was + a managed context object. + With the elimination of the __context__() method, the + result of the factory function is once again a context + manager, suggesting the decorator should be renamed to + either @contextmanager or @managerfactory. + The PEP currently uses @contextmanager. Resolved Issues - The following issues were resolved either by BDFL approval, - consensus on python-dev, or a simple lack of objection to - proposals in the original version of this PEP. - - 1. The __exit__() method of the GeneratorContextManager class - catches StopIteration and considers it equivalent to re-raising - the exception passed to throw(). Is allowing StopIteration - right here? - - This is so that a generator doing cleanup depending on the - exception thrown (like the transactional() example below) can - *catch* the exception thrown if it wants to and doesn't have to - worry about re-raising it. I find this more convenient for the - generator writer. Against this was brought in that the - generator *appears* to suppress an exception that it cannot - suppress: the transactional() example would be more clear - according to this view if it re-raised the original exception - after the call to db.rollback(). I personally would find the - requirement to re-raise the exception an annoyance in a - generator used as a with-template, since all the code after - yield is used for is cleanup, and it is invoked from a - finally-clause (the one implicit in the with-statement) which - re-raises the original exception anyway. + The following issues were resolved by BDFL approval (and a lack + of any major objections on python-dev). - 2. What exception should GeneratorContextManager raise when the + 1. What exception should GeneratorContextManager raise when the underlying generator-iterator misbehaves? The following quote is the reason behind Guido's choice of RuntimeError for both this and for the generator close() method in PEP 342 (from [8]): @@ -617,61 +565,32 @@ and for uninitialized objects (and for a variety of miscellaneous conditions)." - 3. See item 1 in open issues :) - - - 4. The originally approved version of this PEP did not include a - __context__ method - the method was only added to the PEP after - Jason Orendorff pointed out the difficulty of writing - appropriate __enter__ and __exit__ methods for decimal.Context - [5]. This approach allows a class to define a native context - manager using generator syntax. It also allows a class to use an - existing independent context as its native context object by - applying the independent context to 'self' in its __context__ - method. It even allows a class written in C to - use a generator context manager written in Python. - The __context__ method parallels the __iter__ method which forms - part of the iterator protocol. - An earlier version of this PEP called this the __with__ method. - This was later changed to match the name of the protocol rather - than the keyword for the statement [9]. - - 5. The suggestion was made by Jason Orendorff that the __enter__ - and __exit__ methods could be removed from the context - management protocol, and the protocol instead defined directly - in terms of the enhanced generator interface described in PEP - 342 [6]. - Guido rejected this idea [7]. The following are some of benefits - of keeping the __enter__ and __exit__ methods: - - it makes it easy to implement a simple context in C - without having to rely on a separate coroutine builder - - it makes it easy to provide a low-overhead implementation - for contexts that don't need to maintain any - special state between the __enter__ and __exit__ methods - (having to use a generator for these would impose - unnecessary overhead without any compensating benefit) - - it makes it possible to understand how the with statement - works without having to first understand the mechanics of - how generator context managers are implemented. - - 6. See item 2 in open issues :) - - 7. A generator function used to implement a __context__ method will - need to be decorated with the contextmanager decorator in order - to have the correct behaviour. Otherwise, you will get an - AttributeError when using the class in a with statement, as - normal generator-iterators will NOT have __enter__ or __exit__ - methods. - Getting deterministic closure of generators will require a - separate context manager such as the closing example below. - As Guido put it, "too much magic is bad for your health" [10]. - - 8. It is fine to raise AttributeError instead of TypeError if the + 2. It is fine to raise AttributeError instead of TypeError if the relevant methods aren't present on a class involved in a with statement. The fact that the abstract object C API raises TypeError rather than AttributeError is an accident of history, rather than a deliberate design decision [11]. +Rejected Options + + For several months, the PEP prohibited suppression of exceptions + in order to avoid hidden flow control. Implementation + revealed this to be a right royal pain, so Guido restored the + ability [13]. + + Another aspect of the PEP that caused no end of questions and + terminology debates was providing a __context__() method that + was analogous to an iterable's __iter__() method [5, 7, 9]. + The ongoing problems [10, 13] with explaining what it was and why + it was and how it was meant to work eventually lead to Guido + killing the concept outright [15] (and there was much rejoicing!). + + The notion of using the PEP 342 generator API directly to define + the with statement was also briefly entertained [6], but quickly + dismissed as making it too difficult to write non-generator + based context managers. + + Examples The generator based examples rely on PEP 342. Also, some of the @@ -703,10 +622,6 @@ # guaranteed to be released when the block is left (even # if via return or by an uncaught exception). - PEP 319 gives a use case for also having an unlocked() - context; this can be written very similarly (just swap the - acquire() and release() calls). - 2. A template for opening a file that ensures the file is closed when the block is left: @@ -743,14 +658,10 @@ class locked: def __init__(self, lock): self.lock = lock - def __context__(self): - return self def __enter__(self): self.lock.acquire() def __exit__(self, type, value, tb): self.lock.release() - if type is not None: - raise type, value, tb (This example is easily modified to implement the other relatively stateless examples; it shows that it is easy to avoid @@ -844,52 +755,59 @@ # so this must be outside the with-statement: return +s - 9. Here's a proposed native context manager for decimal.Context: + 9. Here's a proposed context manager for the decimal module: # This would be a new decimal.Context method @contextmanager - def __context__(self): + def localcontext(ctx=None): + """Set a new local decimal context for the block""" + # Default to using the current context + if ctx is None: + ctx = getcontext() # We set the thread context to a copy of this context # to ensure that changes within the block are kept - # local to the block. This also gives us thread safety - # and supports nested usage of a given context. - newctx = self.copy() + # local to the block. + newctx = ctx.copy() oldctx = decimal.getcontext() decimal.setcontext(newctx) try: yield newctx finally: + # Always restore the original context decimal.setcontext(oldctx) Sample usage: + from decimal import localcontext, ExtendedContext + def sin(x): - with decimal.getcontext() as ctx: + with localcontext() as ctx: ctx.prec += 2 # Rest of sin calculation algorithm # uses a precision 2 greater than normal return +s # Convert result to normal precision def sin(x): - with decimal.ExtendedContext: + with localcontext(ExtendedContext): # Rest of sin calculation algorithm # uses the Extended Context from the # General Decimal Arithmetic Specification return +s # Convert result to normal context - 10. A generic "object-closing" template: + 10. A generic "object-closing" context manager: - @contextmanager - def closing(obj): - try: - yield obj - finally: + class closing(object): + def __init__(self, obj): + self.obj = obj + def __enter__(self): + return self.obj + def __exit__(self, *exc_info): try: - close = obj.close + close_it = self.obj.close except AttributeError: pass else: - close() + close_it() This can be used to deterministically close anything with a close method, be it file, generator, or something else. It @@ -907,20 +825,27 @@ for datum in data: process(datum) - 11. Native contexts for objects with acquire/release methods: + (Python 2.5's contextlib module contains a version + of this context manager) - # This would be a new method of e.g., threading.RLock - def __context__(self): - return locked(self) + 11. PEP 319 gives a use case for also having a released() + context to temporarily release a previously acquired lock; + this can be written very similarly to the locked context + manager above by swapping the acquire() and release() calls. - def released(self): - return unlocked(self) + class released: + def __init__(self, lock): + self.lock = lock + def __enter__(self): + self.lock.release() + def __exit__(self, type, value, tb): + self.lock.acquire() Sample usage: with my_lock: # Operations with the lock held - with my_lock.released(): + with released(my_lock): # Operations without the lock # e.g. blocking I/O # Lock is held again here @@ -973,56 +898,81 @@ with c as z: # Perform operation + (Python 2.5's contextlib module contains a version + of this context manager) Reference Implementation This PEP was first accepted by Guido at his EuroPython keynote, 27 June 2005. It was accepted again later, with the __context__ method added. - The PEP was implemented for Python 2.5a1 + The PEP was implemented in subversion for Python 2.5a1 + The __context__() method will be removed in Python 2.5a3 + + +Ackowledgements + + Many people contributed to the ideas and concepts in this PEP, + including all those mentioned in the acknowledgements for PEP 340 + and PEP 346. + + Additional thanks goes to (in no meaningful order): Paul Moore, + Phillip J. Eby, Greg Ewing, Jason Orendorff, Michael Hudson, + Raymond Hettinger, Walter Dörwald, Aahz, Georg Brandl, Terry Reedy, + A.M. Kuchling, Brett Cannon, and all those that participated in the + discussions on python-dev. References - [1] http://blogs.msdn.com/oldnewthing/archive/2005/01/06/347666.aspx + [1] Raymond Chen's article on hidden flow control + http://blogs.msdn.com/oldnewthing/archive/2005/01/06/347666.aspx - [2] http://mail.python.org/pipermail/python-dev/2005-May/053885.html + [2] Guido suggests some generator changes that ended up in PEP 342 + http://mail.python.org/pipermail/python-dev/2005-May/053885.html - [3] http://wiki.python.org/moin/WithStatement + [3] Wiki discussion of PEP 343 + http://wiki.python.org/moin/WithStatement - [4] + [4] Early draft of some documentation for the with statement http://mail.python.org/pipermail/python-dev/2005-July/054658.html - [5] + [5] Proposal to add the __with__ method http://mail.python.org/pipermail/python-dev/2005-October/056947.html - [6] + [6] Proposal to use the PEP 342 enhanced generator API directly http://mail.python.org/pipermail/python-dev/2005-October/056969.html - [7] + [7] Guido lets me (Nick Coghlan) talk him into a bad idea ;) http://mail.python.org/pipermail/python-dev/2005-October/057018.html - [8] + [8] Guido raises some exception handling questions http://mail.python.org/pipermail/python-dev/2005-June/054064.html - [9] + [9] Guido answers some questions about the __context__ method http://mail.python.org/pipermail/python-dev/2005-October/057520.html - [10] + [10] Guido answers more questions about the __context__ method http://mail.python.org/pipermail/python-dev/2005-October/057535.html - [11] + [11] Guido says AttributeError is fine for missing special methods http://mail.python.org/pipermail/python-dev/2005-October/057625.html - [12] + [12] Original PEP 342 implementation patch http://sourceforge.net/tracker/index.php?func=detail&aid=1223381&group_id=5470&atid=305470 - [13] - http://mail.python.org/pipermail/python-dev/2006-February/061903.html + [13] Guido restores the ability to suppress exceptions + http://mail.python.org/pipermail/python-dev/2006-February/061909.html - [14] + [14] A simple question kickstarts a thorough review of PEP 343 http://mail.python.org/pipermail/python-dev/2006-April/063859.html + [15] Guido kills the __context__() method + http://mail.python.org/pipermail/python-dev/2006-April/064632.html + + [16] Greg propose 'context guard' instead of 'context manager' + http://mail.python.org/pipermail/python-dev/2006-May/064676.html + Copyright This document has been placed in the public domain. From jimjjewett at gmail.com Tue May 2 16:51:12 2006 From: jimjjewett at gmail.com (Jim Jewett) Date: Tue, 2 May 2006 10:51:12 -0400 Subject: [Python-checkins] r45839 - python/trunk/Doc/lib/lib.tex python/trunk/Doc/lib/libmsilib.tex In-Reply-To: <20060501161245.7AF361E4011@bag.python.org> References: <20060501161245.7AF361E4011@bag.python.org> Message-ID: a few nitpicks On 5/1/06, martin.v.loewis wrote: > Author: martin.v.loewis > Date: Mon May 1 18:12:44 2006 > New Revision: 45839 > > Added: > python/trunk/Doc/lib/libmsilib.tex (contents, props changed) > Log: > Add msilib documentation. ============================================================================== > --- (empty file) > +++ python/trunk/Doc/lib/libmsilib.tex Mon May 1 18:12:44 2006 > +\index{msi} > + > +\versionadded{2.5} > + > +The \module{msilib} supports the creation of Microsoft Installer > +(\code{.msi}) files. Because these files often contain an embedded > +``cabinet'' file (\code{.cab}), it also exposes an API to create > +CAB files. Support for reading \code{.cab} files is currently not > +implemented; read support for the \code{.msi} database is possible. Is there an URL describing these formats? [Note: I apologize if it should have been obvious from the seealso urls; for some reason I get only a top level table of contents on any of them; I suspect this is a local problem, though, since I'm not using MSIE and it seems to apply to all of MSDN.] > +\begin{funcdesc}{FCICreate}{cabname, files} > + Create a new CAB file named \var{cabname}. \var{files} must > + be a list of tuples, each containing the name of the file on > + disk, and the name of the file inside the CAB file. > + > + The files are added to the CAB file in the order they have > + in the list. All files are added into a single CAB file, > + using the MSZIP compression algorithm. Should that be "in the order that they appear in the list"/ Is there a good URL for the MSZIP format? google pointed at non-MS sources, though one suggested http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp > +\begin{funcdesc}{OpenDatabase}{path, persist} > + Return a new database object by calling MsiOpenDatabase. > + \var{path} is the file name of the > + MSI file; persist can be one of the constants > + \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE}, > + \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or > + \code{MSIDBOPEN_TRANSACT}, and may include the flag > + \code{MSIDBOPEN_PATCHFILE}. See the Microsoft documentation for > + the meaning of these flags; depending on the flags, > + an existing database is opened, or a new one created. > +\end{funcdesc} Any particular place in the documentation? Preferably an URL > +\begin{funcdesc}{add_tables}{database, module} > + Add all table content from \var{module} to \var{database}. > + \var{module} must contain an attribute \var{tables} > + listing all tables for which content should be added, > + and one attribute per table that has the actual content. > + > + This is typically used to install the sequence > +\end{funcdesc} Is that last sentence complete? -jJ From python-checkins at python.org Tue May 2 19:36:10 2006 From: python-checkins at python.org (guido.van.rossum) Date: Tue, 2 May 2006 19:36:10 +0200 (CEST) Subject: [Python-checkins] r45858 - in python/trunk/Lib: test/test_traceback.py traceback.py Message-ID: <20060502173610.7F9501E4012@bag.python.org> Author: guido.van.rossum Date: Tue May 2 19:36:09 2006 New Revision: 45858 Modified: python/trunk/Lib/test/test_traceback.py python/trunk/Lib/traceback.py Log: Fix the formatting of KeyboardInterrupt -- a bad issubclass() call. Modified: python/trunk/Lib/test/test_traceback.py ============================================================================== --- python/trunk/Lib/test/test_traceback.py (original) +++ python/trunk/Lib/test/test_traceback.py Tue May 2 19:36:09 2006 @@ -103,6 +103,12 @@ import sys sys.exc_traceback.__members__ + def test_base_exception(self): + # Test that exceptions derived from BaseException are formatted right + e = KeyboardInterrupt() + lst = traceback.format_exception_only(e.__class__, e) + self.assertEqual(lst, ['KeyboardInterrupt\n']) + def test_main(): run_unittest(TracebackCases) Modified: python/trunk/Lib/traceback.py ============================================================================== --- python/trunk/Lib/traceback.py (original) +++ python/trunk/Lib/traceback.py Tue May 2 19:36:09 2006 @@ -158,7 +158,7 @@ """ list = [] if (type(etype) == types.ClassType - or (isinstance(etype, type) and issubclass(etype, Exception))): + or (isinstance(etype, type) and issubclass(etype, BaseException))): stype = etype.__name__ else: stype = etype From python-checkins at python.org Tue May 2 20:01:36 2006 From: python-checkins at python.org (david.goodger) Date: Tue, 2 May 2006 20:01:36 +0200 (CEST) Subject: [Python-checkins] r45859 - peps/trunk/pep-0343.txt Message-ID: <20060502180136.58D491E4013@bag.python.org> Author: david.goodger Date: Tue May 2 20:01:35 2006 New Revision: 45859 Modified: peps/trunk/pep-0343.txt Log: changed encoding to UTF-8; added emacs stanza Modified: peps/trunk/pep-0343.txt ============================================================================== --- peps/trunk/pep-0343.txt (original) +++ peps/trunk/pep-0343.txt Tue May 2 20:01:35 2006 @@ -918,7 +918,7 @@ Additional thanks goes to (in no meaningful order): Paul Moore, Phillip J. Eby, Greg Ewing, Jason Orendorff, Michael Hudson, - Raymond Hettinger, Walter Dörwald, Aahz, Georg Brandl, Terry Reedy, + Raymond Hettinger, Walter Dörwald, Aahz, Georg Brandl, Terry Reedy, A.M. Kuchling, Brett Cannon, and all those that participated in the discussions on python-dev. @@ -976,3 +976,13 @@ Copyright This document has been placed in the public domain. + + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + coding: utf-8 + End: From python-checkins at python.org Tue May 2 20:32:40 2006 From: python-checkins at python.org (david.goodger) Date: Tue, 2 May 2006 20:32:40 +0200 (CEST) Subject: [Python-checkins] r45860 - peps/trunk/pep-3100.txt Message-ID: <20060502183240.5145A1E4012@bag.python.org> Author: david.goodger Date: Tue May 2 20:32:39 2006 New Revision: 45860 Modified: peps/trunk/pep-3100.txt Log: markup fix Modified: peps/trunk/pep-3100.txt ============================================================================== --- peps/trunk/pep-3100.txt (original) +++ peps/trunk/pep-3100.txt Tue May 2 20:32:39 2006 @@ -314,7 +314,7 @@ .. [26] python-3000 email ("More wishful thinking") http://mail.python.org/pipermail/python-3000/2006-April/000810.html - [27] python-3000 email ("sets in P3K?") +.. [27] python-3000 email ("sets in P3K?") http://mail.python.org/pipermail/python-3000/2006-April/001286.html .. [#pep238] PEP 238 (Changing the Division Operator) @@ -329,8 +329,8 @@ .. [#pep352] PEP 352 (Required Superclass for Exceptions) http://www.python.org/dev/peps/pep-0352 -.. [#pep3001] PEP 3001 (Process for reviewing and improving standard library modules) - http://www.python.org/dev/peps/pep-3001 +.. [#pep3001] PEP 3001 (Process for reviewing and improving standard + library modules) http://www.python.org/dev/peps/pep-3001 .. [#pep3099] PEP 3099 (Things that will Not Change in Python 3000) http://www.python.org/dev/peps/pep-3099 From python-checkins at python.org Tue May 2 20:34:23 2006 From: python-checkins at python.org (david.goodger) Date: Tue, 2 May 2006 20:34:23 +0200 (CEST) Subject: [Python-checkins] r45861 - peps/trunk/pep2pyramid.py Message-ID: <20060502183423.279471E4012@bag.python.org> Author: david.goodger Date: Tue May 2 20:34:22 2006 New Revision: 45861 Modified: peps/trunk/pep2pyramid.py Log: create destdir & ancestors Modified: peps/trunk/pep2pyramid.py ============================================================================== --- peps/trunk/pep2pyramid.py (original) +++ peps/trunk/pep2pyramid.py Tue May 2 20:34:22 2006 @@ -409,7 +409,7 @@ needSvn = 0 if not os.path.exists(destDir): needSvn = 1 - os.mkdir(destDir) + os.makedirs(destDir) # write content.html foofilename = os.path.join(destDir, 'content.html') From python-checkins at python.org Tue May 2 21:47:56 2006 From: python-checkins at python.org (guido.van.rossum) Date: Tue, 2 May 2006 21:47:56 +0200 (CEST) Subject: [Python-checkins] r45862 - in python/trunk: Doc/lib/libcontextlib.tex Doc/ref/ref3.tex Doc/ref/ref7.tex Lib/calendar.py Lib/compiler/pycodegen.py Lib/contextlib.py Lib/decimal.py Lib/dummy_thread.py Lib/test/test_contextlib.py Lib/test/test_with.py Lib/threading.py Misc/Vim/syntax_test.py Modules/threadmodule.c Objects/fileobject.c Python/compile.c Message-ID: <20060502194756.4450C1E4025@bag.python.org> Author: guido.van.rossum Date: Tue May 2 21:47:52 2006 New Revision: 45862 Modified: python/trunk/Doc/lib/libcontextlib.tex python/trunk/Doc/ref/ref3.tex python/trunk/Doc/ref/ref7.tex python/trunk/Lib/calendar.py python/trunk/Lib/compiler/pycodegen.py python/trunk/Lib/contextlib.py python/trunk/Lib/decimal.py python/trunk/Lib/dummy_thread.py python/trunk/Lib/test/test_contextlib.py python/trunk/Lib/test/test_with.py python/trunk/Lib/threading.py python/trunk/Misc/Vim/syntax_test.py python/trunk/Modules/threadmodule.c python/trunk/Objects/fileobject.c python/trunk/Python/compile.c Log: Get rid of __context__, per the latest changes to PEP 343 and python-dev discussion. There are two places of documentation that still mention __context__: Doc/lib/libstdtypes.tex -- I wasn't quite sure how to rewrite that without spending a whole lot of time thinking about it; and whatsnew, which Andrew usually likes to change himself. Modified: python/trunk/Doc/lib/libcontextlib.tex ============================================================================== --- python/trunk/Doc/lib/libcontextlib.tex (original) +++ python/trunk/Doc/lib/libcontextlib.tex Tue May 2 21:47:52 2006 @@ -54,34 +54,6 @@ reraise that exception. Otherwise the \keyword{with} statement will treat the exception as having been handled, and resume execution with the statement immediately following the \keyword{with} statement. - -Note that you can use \code{@contextfactory} to define a context -manager's \method{__context__} method. This is usually more -convenient than creating another class just to serve as a context -object. For example: - -\begin{verbatim} -from __future__ import with_statement -from contextlib import contextfactory - -class Tag: - def __init__(self, name): - self.name = name - - @contextfactory - def __context__(self): - print "<%s>" % self.name - yield self - print "" % self.name - -h1 = Tag("h1") - ->>> with h1 as me: -... print "hello from", me -

-hello from <__main__.Tag instance at 0x402ce8ec> -

-\end{verbatim} \end{funcdesc} \begin{funcdesc}{nested}{ctx1\optional{, ctx2\optional{, ...}}} @@ -147,25 +119,6 @@ without needing to explicitly close \code{page}. Even if an error occurs, \code{page.close()} will be called when the \keyword{with} block is exited. - -Context managers with a close method can use this context factory -to easily implement their own \method{__context__()} method. -\begin{verbatim} -from __future__ import with_statement -from contextlib import closing - -class MyClass: - def close(self): - print "Closing", self - def __context__(self): - return closing(self) - ->>> with MyClass() as x: -... print "Hello from", x -... -Hello from <__main__.MyClass instance at 0xb7df02ec> -Closing <__main__.MyClass instance at 0xb7df02ec> -\end{verbatim} \end{funcdesc} \begin{seealso} Modified: python/trunk/Doc/ref/ref3.tex ============================================================================== --- python/trunk/Doc/ref/ref3.tex (original) +++ python/trunk/Doc/ref/ref3.tex Tue May 2 21:47:52 2006 @@ -2138,22 +2138,6 @@ see ``\ulink{Context Types}{../lib/typecontext.html}'' in the \citetitle[../lib/lib.html]{Python Library Reference}. -\begin{methoddesc}[context manager]{__context__}{self} -Invoked when the object is used as the context expression of a -\keyword{with} statement. The returned object must implement -\method{__enter__()} and \method{__exit__()} methods. - -Context managers written in Python can also implement this method -using a generator function decorated with the -\function{contextlib.contextfactory} decorator, as this can be simpler -than writing individual \method{__enter__()} and \method{__exit__()} -methods on a separate object when the state to be managed is complex. - -\keyword{with} statement context objects also need to implement this -method; they are required to return themselves (that is, this method -will simply return \var{self}). -\end{methoddesc} - \begin{methoddesc}[with statement context]{__enter__}{self} Enter the runtime context related to this object. The \keyword{with} statement will bind this method's return value to the target(s) Modified: python/trunk/Doc/ref/ref7.tex ============================================================================== --- python/trunk/Doc/ref/ref7.tex (original) +++ python/trunk/Doc/ref/ref7.tex Tue May 2 21:47:52 2006 @@ -322,21 +322,18 @@ \begin{productionlist} \production{with_stmt} - {"with" \token{expression} ["as" target_list] ":" \token{suite}} + {"with" \token{expression} ["as" target] ":" \token{suite}} \end{productionlist} The execution of the \keyword{with} statement proceeds as follows: \begin{enumerate} -\item The context expression is evaluated, to obtain a context manager. +\item The context expression is evaluated to obtain a context manager. -\item The context manger's \method{__context__()} method is -invoked to obtain a \keyword{with} statement context object. +\item The context manager's \method{__enter__()} method is invoked. -\item The context object's \method{__enter__()} method is invoked. - -\item If a target list was included in the \keyword{with} +\item If a target was included in the \keyword{with} statement, the return value from \method{__enter__()} is assigned to it. \note{The \keyword{with} statement guarantees that if the @@ -347,7 +344,7 @@ \item The suite is executed. -\item The context object's \method{__exit__()} method is invoked. If +\item The context manager's \method{__exit__()} method is invoked. If an exception caused the suite to be exited, its type, value, and traceback are passed as arguments to \method{__exit__()}. Otherwise, three \constant{None} arguments are supplied. Modified: python/trunk/Lib/calendar.py ============================================================================== --- python/trunk/Lib/calendar.py (original) +++ python/trunk/Lib/calendar.py Tue May 2 21:47:52 2006 @@ -484,9 +484,6 @@ def __init__(self, locale): self.locale = locale - def __context__(self): - return self - def __enter__(self): self.oldlocale = locale.setlocale(locale.LC_TIME, self.locale) return locale.getlocale(locale.LC_TIME)[1] Modified: python/trunk/Lib/compiler/pycodegen.py ============================================================================== --- python/trunk/Lib/compiler/pycodegen.py (original) +++ python/trunk/Lib/compiler/pycodegen.py Tue May 2 21:47:52 2006 @@ -833,8 +833,6 @@ self.__with_count += 1 self.set_lineno(node) self.visit(node.expr) - self.emit('LOAD_ATTR', '__context__') - self.emit('CALL_FUNCTION', 0) self.emit('DUP_TOP') self.emit('LOAD_ATTR', '__exit__') self._implicitNameOp('STORE', exitvar) Modified: python/trunk/Lib/contextlib.py ============================================================================== --- python/trunk/Lib/contextlib.py (original) +++ python/trunk/Lib/contextlib.py Tue May 2 21:47:52 2006 @@ -10,9 +10,6 @@ def __init__(self, gen): self.gen = gen - def __context__(self): - return self - def __enter__(self): try: return self.gen.next() @@ -88,7 +85,7 @@ @contextfactory -def nested(*contexts): +def nested(*managers): """Support multiple context managers in a single with-statement. Code like this: @@ -109,8 +106,7 @@ exc = (None, None, None) try: try: - for context in contexts: - mgr = context.__context__() + for mgr in managers: exit = mgr.__exit__ enter = mgr.__enter__ vars.append(enter()) @@ -152,8 +148,6 @@ """ def __init__(self, thing): self.thing = thing - def __context__(self): - return self def __enter__(self): return self.thing def __exit__(self, *exc_info): Modified: python/trunk/Lib/decimal.py ============================================================================== --- python/trunk/Lib/decimal.py (original) +++ python/trunk/Lib/decimal.py Tue May 2 21:47:52 2006 @@ -2248,7 +2248,7 @@ s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']') return ', '.join(s) + ')' - def __context__(self): + def context_manager(self): return WithStatementContext(self.copy()) def clear_flags(self): Modified: python/trunk/Lib/dummy_thread.py ============================================================================== --- python/trunk/Lib/dummy_thread.py (original) +++ python/trunk/Lib/dummy_thread.py Tue May 2 21:47:52 2006 @@ -118,9 +118,6 @@ def __exit__(self, typ, val, tb): self.release() - def __context__(self): - return self - def release(self): """Release the dummy lock.""" # XXX Perhaps shouldn't actually bother to test? Could lead Modified: python/trunk/Lib/test/test_contextlib.py ============================================================================== --- python/trunk/Lib/test/test_contextlib.py (original) +++ python/trunk/Lib/test/test_contextlib.py Tue May 2 21:47:52 2006 @@ -51,7 +51,7 @@ @contextfactory def whee(): yield - ctx = whee().__context__() + ctx = whee() ctx.__enter__() # Calling __exit__ should not result in an exception self.failIf(ctx.__exit__(TypeError, TypeError("foo"), None)) @@ -63,7 +63,7 @@ yield except: yield - ctx = whoo().__context__() + ctx = whoo() ctx.__enter__() self.assertRaises( RuntimeError, ctx.__exit__, TypeError, TypeError("foo"), None @@ -152,8 +152,6 @@ def a(): yield 1 class b(object): - def __context__(self): - return self def __enter__(self): return 2 def __exit__(self, *exc_info): @@ -341,12 +339,12 @@ orig_context = ctx.copy() try: ctx.prec = save_prec = decimal.ExtendedContext.prec + 5 - with decimal.ExtendedContext: + with decimal.ExtendedContext.context_manager(): self.assertEqual(decimal.getcontext().prec, decimal.ExtendedContext.prec) self.assertEqual(decimal.getcontext().prec, save_prec) try: - with decimal.ExtendedContext: + with decimal.ExtendedContext.context_manager(): self.assertEqual(decimal.getcontext().prec, decimal.ExtendedContext.prec) 1/0 Modified: python/trunk/Lib/test/test_with.py ============================================================================== --- python/trunk/Lib/test/test_with.py (original) +++ python/trunk/Lib/test/test_with.py Tue May 2 21:47:52 2006 @@ -17,15 +17,10 @@ class MockContextManager(GeneratorContext): def __init__(self, gen): GeneratorContext.__init__(self, gen) - self.context_called = False self.enter_called = False self.exit_called = False self.exit_args = None - def __context__(self): - self.context_called = True - return GeneratorContext.__context__(self) - def __enter__(self): self.enter_called = True return GeneratorContext.__enter__(self) @@ -60,21 +55,17 @@ class Nested(object): - def __init__(self, *contexts): - self.contexts = contexts + def __init__(self, *managers): + self.managers = managers self.entered = None - def __context__(self): - return self - def __enter__(self): if self.entered is not None: raise RuntimeError("Context is not reentrant") self.entered = deque() vars = [] try: - for context in self.contexts: - mgr = context.__context__() + for mgr in self.managers: vars.append(mgr.__enter__()) self.entered.appendleft(mgr) except: @@ -99,17 +90,12 @@ class MockNested(Nested): - def __init__(self, *contexts): - Nested.__init__(self, *contexts) - self.context_called = False + def __init__(self, *managers): + Nested.__init__(self, *managers) self.enter_called = False self.exit_called = False self.exit_args = None - def __context__(self): - self.context_called = True - return Nested.__context__(self) - def __enter__(self): self.enter_called = True return Nested.__enter__(self) @@ -126,24 +112,8 @@ with foo: pass self.assertRaises(NameError, fooNotDeclared) - def testContextAttributeError(self): - class LacksContext(object): - def __enter__(self): - pass - - def __exit__(self, type, value, traceback): - pass - - def fooLacksContext(): - foo = LacksContext() - with foo: pass - self.assertRaises(AttributeError, fooLacksContext) - def testEnterAttributeError(self): class LacksEnter(object): - def __context__(self): - pass - def __exit__(self, type, value, traceback): pass @@ -154,9 +124,6 @@ def testExitAttributeError(self): class LacksExit(object): - def __context__(self): - pass - def __enter__(self): pass @@ -192,27 +159,10 @@ 'with mock as (foo, None, bar):\n' ' pass') - def testContextThrows(self): - class ContextThrows(object): - def __context__(self): - raise RuntimeError("Context threw") - - def shouldThrow(): - ct = ContextThrows() - self.foo = None - with ct as self.foo: - pass - self.assertRaises(RuntimeError, shouldThrow) - self.assertEqual(self.foo, None) - def testEnterThrows(self): class EnterThrows(object): - def __context__(self): - return self - def __enter__(self): - raise RuntimeError("Context threw") - + raise RuntimeError("Enter threw") def __exit__(self, *args): pass @@ -226,8 +176,6 @@ def testExitThrows(self): class ExitThrows(object): - def __context__(self): - return self def __enter__(self): return def __exit__(self, *args): @@ -241,13 +189,11 @@ TEST_EXCEPTION = RuntimeError("test exception") def assertInWithManagerInvariants(self, mock_manager): - self.assertTrue(mock_manager.context_called) self.assertTrue(mock_manager.enter_called) self.assertFalse(mock_manager.exit_called) self.assertEqual(mock_manager.exit_args, None) def assertAfterWithManagerInvariants(self, mock_manager, exit_args): - self.assertTrue(mock_manager.context_called) self.assertTrue(mock_manager.enter_called) self.assertTrue(mock_manager.exit_called) self.assertEqual(mock_manager.exit_args, exit_args) @@ -268,7 +214,6 @@ raise self.TEST_EXCEPTION def assertAfterWithManagerInvariantsWithError(self, mock_manager): - self.assertTrue(mock_manager.context_called) self.assertTrue(mock_manager.enter_called) self.assertTrue(mock_manager.exit_called) self.assertEqual(mock_manager.exit_args[0], RuntimeError) @@ -472,7 +417,6 @@ # The inner statement stuff should never have been touched self.assertEqual(self.bar, None) - self.assertFalse(mock_b.context_called) self.assertFalse(mock_b.enter_called) self.assertFalse(mock_b.exit_called) self.assertEqual(mock_b.exit_args, None) @@ -506,13 +450,9 @@ self.assertRaises(StopIteration, shouldThrow) def testRaisedStopIteration2(self): - class cm (object): - def __context__(self): - return self - + class cm(object): def __enter__(self): pass - def __exit__(self, type, value, traceback): pass @@ -535,12 +475,8 @@ def testRaisedGeneratorExit2(self): class cm (object): - def __context__(self): - return self - def __enter__(self): pass - def __exit__(self, type, value, traceback): pass @@ -629,7 +565,6 @@ def testMultipleComplexTargets(self): class C: - def __context__(self): return self def __enter__(self): return 1, 2, 3 def __exit__(self, t, v, tb): pass targets = {1: [0, 1, 2]} @@ -651,7 +586,6 @@ def testExitTrueSwallowsException(self): class AfricanSwallow: - def __context__(self): return self def __enter__(self): pass def __exit__(self, t, v, tb): return True try: @@ -662,7 +596,6 @@ def testExitFalseDoesntSwallowException(self): class EuropeanSwallow: - def __context__(self): return self def __enter__(self): pass def __exit__(self, t, v, tb): return False try: Modified: python/trunk/Lib/threading.py ============================================================================== --- python/trunk/Lib/threading.py (original) +++ python/trunk/Lib/threading.py Tue May 2 21:47:52 2006 @@ -90,9 +90,6 @@ self.__owner and self.__owner.getName(), self.__count) - def __context__(self): - return self - def acquire(self, blocking=1): me = currentThread() if self.__owner is me: @@ -182,8 +179,11 @@ pass self.__waiters = [] - def __context__(self): - return self.__lock.__context__() + def __enter__(self): + return self.__lock.__enter__() + + def __exit__(self, *args): + return self.__lock.__exit__(*args) def __repr__(self): return "" % (self.__lock, len(self.__waiters)) @@ -278,9 +278,6 @@ self.__cond = Condition(Lock()) self.__value = value - def __context__(self): - return self - def acquire(self, blocking=1): rc = False self.__cond.acquire() Modified: python/trunk/Misc/Vim/syntax_test.py ============================================================================== --- python/trunk/Misc/Vim/syntax_test.py (original) +++ python/trunk/Misc/Vim/syntax_test.py Tue May 2 21:47:52 2006 @@ -19,8 +19,6 @@ def foo(): # function definition return [] class Bar(object): # Class definition - def __context__(self): - return self def __enter__(self): pass def __exit__(self, *args): Modified: python/trunk/Modules/threadmodule.c ============================================================================== --- python/trunk/Modules/threadmodule.c (original) +++ python/trunk/Modules/threadmodule.c Tue May 2 21:47:52 2006 @@ -98,13 +98,6 @@ \n\ Return whether the lock is in the locked state."); -static PyObject * -lock_context(lockobject *self) -{ - Py_INCREF(self); - return (PyObject *)self; -} - static PyMethodDef lock_methods[] = { {"acquire_lock", (PyCFunction)lock_PyThread_acquire_lock, METH_VARARGS, acquire_doc}, @@ -118,8 +111,6 @@ METH_NOARGS, locked_doc}, {"locked", (PyCFunction)lock_locked_lock, METH_NOARGS, locked_doc}, - {"__context__", (PyCFunction)lock_context, - METH_NOARGS, PyDoc_STR("__context__() -> self.")}, {"__enter__", (PyCFunction)lock_PyThread_acquire_lock, METH_VARARGS, acquire_doc}, {"__exit__", (PyCFunction)lock_PyThread_release_lock, Modified: python/trunk/Objects/fileobject.c ============================================================================== --- python/trunk/Objects/fileobject.c (original) +++ python/trunk/Objects/fileobject.c Tue May 2 21:47:52 2006 @@ -1706,9 +1706,6 @@ PyDoc_STRVAR(isatty_doc, "isatty() -> true or false. True if the file is connected to a tty device."); -PyDoc_STRVAR(context_doc, - "__context__() -> self."); - PyDoc_STRVAR(enter_doc, "__enter__() -> self."); @@ -1729,7 +1726,6 @@ {"flush", (PyCFunction)file_flush, METH_NOARGS, flush_doc}, {"close", (PyCFunction)file_close, METH_NOARGS, close_doc}, {"isatty", (PyCFunction)file_isatty, METH_NOARGS, isatty_doc}, - {"__context__", (PyCFunction)file_self, METH_NOARGS, context_doc}, {"__enter__", (PyCFunction)file_self, METH_NOARGS, enter_doc}, {"__exit__", (PyCFunction)file_close, METH_VARARGS, close_doc}, {NULL, NULL} /* sentinel */ @@ -2445,4 +2441,3 @@ #ifdef __cplusplus } #endif - Modified: python/trunk/Python/compile.c ============================================================================== --- python/trunk/Python/compile.c (original) +++ python/trunk/Python/compile.c Tue May 2 21:47:52 2006 @@ -3371,7 +3371,7 @@ It is implemented roughly as: - context = (EXPR).__context__() + context = EXPR exit = context.__exit__ # not calling it value = context.__enter__() try: @@ -3387,17 +3387,12 @@ static int compiler_with(struct compiler *c, stmt_ty s) { - static identifier context_attr, enter_attr, exit_attr; + static identifier enter_attr, exit_attr; basicblock *block, *finally; identifier tmpexit, tmpvalue = NULL; assert(s->kind == With_kind); - if (!context_attr) { - context_attr = PyString_InternFromString("__context__"); - if (!context_attr) - return 0; - } if (!enter_attr) { enter_attr = PyString_InternFromString("__enter__"); if (!enter_attr) @@ -3436,10 +3431,8 @@ PyArena_AddPyObject(c->c_arena, tmpvalue); } - /* Evaluate (EXPR).__context__() */ + /* Evaluate EXPR */ VISIT(c, expr, s->v.With.context_expr); - ADDOP_O(c, LOAD_ATTR, context_attr, names); - ADDOP_I(c, CALL_FUNCTION, 0); /* Squirrel away context.__exit__ */ ADDOP(c, DUP_TOP); From python-checkins at python.org Tue May 2 21:52:33 2006 From: python-checkins at python.org (armin.rigo) Date: Tue, 2 May 2006 21:52:33 +0200 (CEST) Subject: [Python-checkins] r45863 - python/trunk/Doc/api/refcounts.dat Message-ID: <20060502195233.25D2C1E4012@bag.python.org> Author: armin.rigo Date: Tue May 2 21:52:32 2006 New Revision: 45863 Modified: python/trunk/Doc/api/refcounts.dat Log: Documentation bug: PySet_Pop() returns a new reference (because the caller becomes the owner of that reference). Modified: python/trunk/Doc/api/refcounts.dat ============================================================================== --- python/trunk/Doc/api/refcounts.dat (original) +++ python/trunk/Doc/api/refcounts.dat Tue May 2 21:52:32 2006 @@ -1147,7 +1147,7 @@ PySet_New:PyObject*::+1: PySet_New:PyObject*:iterable:0: -PySet_Pop:PyObject*::0:or returns NULL and raises KeyError if set is empty +PySet_Pop:PyObject*::+1:or returns NULL and raises KeyError if set is empty PySet_Pop:PyObject*:set:0: PySet_Size:int::: From python-checkins at python.org Tue May 2 22:47:36 2006 From: python-checkins at python.org (guido.van.rossum) Date: Tue, 2 May 2006 22:47:36 +0200 (CEST) Subject: [Python-checkins] r45864 - python/trunk/Lib/test/test_mailbox.py Message-ID: <20060502204736.DAE871E4013@bag.python.org> Author: guido.van.rossum Date: Tue May 2 22:47:36 2006 New Revision: 45864 Modified: python/trunk/Lib/test/test_mailbox.py Log: Hopefully this will fix the spurious failures of test_mailbox.py that I'm experiencing. (This code and mailbox.py itself are full of calls to file() that should be calls to open() -- but I'm not fixing those.) Modified: python/trunk/Lib/test/test_mailbox.py ============================================================================== --- python/trunk/Lib/test/test_mailbox.py (original) +++ python/trunk/Lib/test/test_mailbox.py Tue May 2 22:47:36 2006 @@ -577,14 +577,18 @@ # Remove old files from 'tmp' foo_path = os.path.join(self._path, 'tmp', 'foo') bar_path = os.path.join(self._path, 'tmp', 'bar') - file(foo_path, 'w').close() - file(bar_path, 'w').close() + f = open(foo_path, 'w') + f.write("@") + f.close() + f = open(bar_path, 'w') + f.write("@") + f.close() self._box.clean() self.assert_(os.path.exists(foo_path)) self.assert_(os.path.exists(bar_path)) foo_stat = os.stat(foo_path) - os.utime(os.path.join(foo_path), (time.time() - 129600 - 2, - foo_stat.st_mtime)) + os.utime(foo_path, (time.time() - 129600 - 2, + foo_stat.st_mtime)) self._box.clean() self.assert_(not os.path.exists(foo_path)) self.assert_(os.path.exists(bar_path)) From martin at v.loewis.de Tue May 2 23:28:25 2006 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Tue, 02 May 2006 23:28:25 +0200 Subject: [Python-checkins] r45839 - python/trunk/Doc/lib/lib.tex python/trunk/Doc/lib/libmsilib.tex In-Reply-To: References: <20060501161245.7AF361E4011@bag.python.org> Message-ID: <4457CEF9.4000307@v.loewis.de> Jim Jewett wrote: > Is there an URL describing these formats? Not to my knowledge: they are both undocumented (MSI probably more so than CAB, for which third-party tools exist). >> +\begin{funcdesc}{FCICreate}{cabname, files} >> + Create a new CAB file named \var{cabname}. \var{files} must >> + be a list of tuples, each containing the name of the file on >> + disk, and the name of the file inside the CAB file. >> + >> + The files are added to the CAB file in the order they have >> + in the list. All files are added into a single CAB file, >> + using the MSZIP compression algorithm. > > Should that be "in the order that they appear in the list"/ If that is better English: sure. > Is there a good URL for the MSZIP format? > > google pointed at non-MS sources, though one suggested > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp That's only the SDK, though, and it only has API specs; these are the ones that _msi.c uses. In any case, I want to replace MSZIP with LZX:21 before the release (not that this is better documented). >> +\begin{funcdesc}{OpenDatabase}{path, persist} >> + Return a new database object by calling MsiOpenDatabase. >> + \var{path} is the file name of the >> + MSI file; persist can be one of the constants >> + \code{MSIDBOPEN_CREATEDIRECT}, \code{MSIDBOPEN_CREATE}, >> + \code{MSIDBOPEN_DIRECT}, \code{MSIDBOPEN_READONLY}, or >> + \code{MSIDBOPEN_TRANSACT}, and may include the flag >> + \code{MSIDBOPEN_PATCHFILE}. See the Microsoft documentation for >> + the meaning of these flags; depending on the flags, >> + an existing database is opened, or a new one created. >> +\end{funcdesc} > > Any particular place in the documentation? Preferably an URL That's in the see-also section already, for MsiOpenDatabase. >> + This is typically used to install the sequence >> +\end{funcdesc} > > Is that last sentence complete? Ah, no. It should end with "tables." Thanks, Martin From python-checkins at python.org Tue May 2 23:44:34 2006 From: python-checkins at python.org (andrew.kuchling) Date: Tue, 2 May 2006 23:44:34 +0200 (CEST) Subject: [Python-checkins] r45865 - in python/trunk/Lib: mailbox.py test/test_mailbox.py Message-ID: <20060502214434.0ED891E4005@bag.python.org> Author: andrew.kuchling Date: Tue May 2 23:44:33 2006 New Revision: 45865 Modified: python/trunk/Lib/mailbox.py python/trunk/Lib/test/test_mailbox.py Log: Use open() instead of file() Modified: python/trunk/Lib/mailbox.py ============================================================================== --- python/trunk/Lib/mailbox.py (original) +++ python/trunk/Lib/mailbox.py Tue May 2 23:44:33 2006 @@ -294,7 +294,7 @@ def get_message(self, key): """Return a Message representation or raise a KeyError.""" subpath = self._lookup(key) - f = file(os.path.join(self._path, subpath), 'r') + f = open(os.path.join(self._path, subpath), 'r') try: msg = MaildirMessage(f) finally: @@ -308,7 +308,7 @@ def get_string(self, key): """Return a string representation or raise a KeyError.""" - f = file(os.path.join(self._path, self._lookup(key)), 'r') + f = open(os.path.join(self._path, self._lookup(key)), 'r') try: return f.read() finally: @@ -316,7 +316,7 @@ def get_file(self, key): """Return a file-like representation or raise a KeyError.""" - f = file(os.path.join(self._path, self._lookup(key)), 'rb') + f = open(os.path.join(self._path, self._lookup(key)), 'rb') return _ProxyFile(f) def iterkeys(self): @@ -422,7 +422,7 @@ except OSError, e: if e.errno == errno.ENOENT: Maildir._count += 1 - return file(path, 'wb+') + return open(path, 'wb+') else: raise else: @@ -471,15 +471,15 @@ """Initialize a single-file mailbox.""" Mailbox.__init__(self, path, factory, create) try: - f = file(self._path, 'rb+') + f = open(self._path, 'rb+') except IOError, e: if e.errno == errno.ENOENT: if create: - f = file(self._path, 'wb+') + f = open(self._path, 'wb+') else: raise NoSuchMailboxError(self._path) elif e.errno == errno.EACCES: - f = file(self._path, 'rb') + f = open(self._path, 'rb') else: raise self._file = f @@ -572,7 +572,7 @@ os.rename(new_file.name, self._path) else: raise - self._file = file(self._path, 'rb+') + self._file = open(self._path, 'rb+') self._toc = new_toc self._pending = False if self._locked: @@ -792,7 +792,7 @@ """Remove the keyed message; raise KeyError if it doesn't exist.""" path = os.path.join(self._path, str(key)) try: - f = file(path, 'rb+') + f = open(path, 'rb+') except IOError, e: if e.errno == errno.ENOENT: raise KeyError('No message with key: %s' % key) @@ -814,7 +814,7 @@ """Replace the keyed message; raise KeyError if it doesn't exist.""" path = os.path.join(self._path, str(key)) try: - f = file(path, 'rb+') + f = open(path, 'rb+') except IOError, e: if e.errno == errno.ENOENT: raise KeyError('No message with key: %s' % key) @@ -838,9 +838,9 @@ """Return a Message representation or raise a KeyError.""" try: if self._locked: - f = file(os.path.join(self._path, str(key)), 'r+') + f = open(os.path.join(self._path, str(key)), 'r+') else: - f = file(os.path.join(self._path, str(key)), 'r') + f = open(os.path.join(self._path, str(key)), 'r') except IOError, e: if e.errno == errno.ENOENT: raise KeyError('No message with key: %s' % key) @@ -865,9 +865,9 @@ """Return a string representation or raise a KeyError.""" try: if self._locked: - f = file(os.path.join(self._path, str(key)), 'r+') + f = open(os.path.join(self._path, str(key)), 'r+') else: - f = file(os.path.join(self._path, str(key)), 'r') + f = open(os.path.join(self._path, str(key)), 'r') except IOError, e: if e.errno == errno.ENOENT: raise KeyError('No message with key: %s' % key) @@ -887,7 +887,7 @@ def get_file(self, key): """Return a file-like representation or raise a KeyError.""" try: - f = file(os.path.join(self._path, str(key)), 'rb') + f = open(os.path.join(self._path, str(key)), 'rb') except IOError, e: if e.errno == errno.ENOENT: raise KeyError('No message with key: %s' % key) @@ -911,7 +911,7 @@ def lock(self): """Lock the mailbox.""" if not self._locked: - self._file = file(os.path.join(self._path, '.mh_sequences'), 'rb+') + self._file = open(os.path.join(self._path, '.mh_sequences'), 'rb+') _lock_file(self._file) self._locked = True @@ -963,7 +963,7 @@ def get_sequences(self): """Return a name-to-key-list dictionary to define each sequence.""" results = {} - f = file(os.path.join(self._path, '.mh_sequences'), 'r') + f = open(os.path.join(self._path, '.mh_sequences'), 'r') try: all_keys = set(self.keys()) for line in f: @@ -989,7 +989,7 @@ def set_sequences(self, sequences): """Set sequences using the given name-to-key-list dictionary.""" - f = file(os.path.join(self._path, '.mh_sequences'), 'r+') + f = open(os.path.join(self._path, '.mh_sequences'), 'r+') try: os.close(os.open(f.name, os.O_WRONLY | os.O_TRUNC)) for name, keys in sequences.iteritems(): @@ -1024,7 +1024,7 @@ for key in self.iterkeys(): if key - 1 != prev: changes.append((key, prev + 1)) - f = file(os.path.join(self._path, str(key)), 'r+') + f = open(os.path.join(self._path, str(key)), 'r+') try: if self._locked: _lock_file(f) @@ -1864,7 +1864,7 @@ """Create a file if it doesn't exist and open for reading and writing.""" fd = os.open(path, os.O_CREAT | os.O_EXCL | os.O_RDWR) try: - return file(path, 'rb+') + return open(path, 'rb+') finally: os.close(fd) Modified: python/trunk/Lib/test/test_mailbox.py ============================================================================== --- python/trunk/Lib/test/test_mailbox.py (original) +++ python/trunk/Lib/test/test_mailbox.py Tue May 2 23:44:33 2006 @@ -717,7 +717,7 @@ self._box._file.seek(0) contents = self._box._file.read() self._box.close() - self.assert_(contents == file(self._path, 'rb').read()) + self.assert_(contents == open(self._path, 'rb').read()) self._box = self._factory(self._path) @@ -1473,7 +1473,7 @@ def setUp(self): self._path = test_support.TESTFN - self._file = file(self._path, 'wb+') + self._file = open(self._path, 'wb+') def tearDown(self): self._file.close() @@ -1522,7 +1522,7 @@ def setUp(self): self._path = test_support.TESTFN - self._file = file(self._path, 'wb+') + self._file = open(self._path, 'wb+') def tearDown(self): self._file.close() From python-checkins at python.org Wed May 3 00:47:50 2006 From: python-checkins at python.org (andrew.kuchling) Date: Wed, 3 May 2006 00:47:50 +0200 (CEST) Subject: [Python-checkins] r45866 - python/trunk/Doc/whatsnew/whatsnew25.tex Message-ID: <20060502224750.6819B1E401F@bag.python.org> Author: andrew.kuchling Date: Wed May 3 00:47:49 2006 New Revision: 45866 Modified: python/trunk/Doc/whatsnew/whatsnew25.tex Log: Update context manager section for removal of __context__ Modified: python/trunk/Doc/whatsnew/whatsnew25.tex ============================================================================== --- python/trunk/Doc/whatsnew/whatsnew25.tex (original) +++ python/trunk/Doc/whatsnew/whatsnew25.tex Wed May 3 00:47:49 2006 @@ -638,7 +638,8 @@ the block is complete. The \module{decimal} module's contexts, which encapsulate the desired -precision and rounding characteristics for computations, also work. +precision and rounding characteristics for computations, provide a +\method{context_manager()} method for getting a context manager: \begin{verbatim} import decimal @@ -647,7 +648,8 @@ v1 = decimal.Decimal('578') print v1.sqrt() -with decimal.Context(prec=16): +ctx = decimal.Context(prec=16) +with ctx.context_manager(): # All code in this block uses a precision of 16 digits. # The original context is restored on exiting the block. print v1.sqrt() @@ -665,14 +667,12 @@ A high-level explanation of the context management protocol is: \begin{itemize} -\item The expression is evaluated and should result in an object -with a \method{__context__()} method (called a ``context manager''). -\item The context specifier's \method{__context__()} method is called, -and must return another object (called a ``with-statement context object'') that has +\item The expression is evaluated and should result in an object +called a ``context manager''. The context manager must have \method{__enter__()} and \method{__exit__()} methods. -\item The context object's \method{__enter__()} method is called. The value +\item The context manager's \method{__enter__()} method is called. The value returned is assigned to \var{VAR}. If no \code{'as \var{VAR}'} clause is present, the value is simply discarded. @@ -680,7 +680,7 @@ \item If \var{BLOCK} raises an exception, the \method{__exit__(\var{type}, \var{value}, \var{traceback})} is called -with the exception's information, the same values returned by +with the exception details, the same values returned by \function{sys.exc_info()}. The method's return value controls whether the exception is re-raised: any false value re-raises the exception, and \code{True} will result in suppressing it. You'll only rarely @@ -719,20 +719,11 @@ The transaction should be committed if the code in the block runs flawlessly or rolled back if there's an exception. - -First, the \class{DatabaseConnection} needs a \method{__context__()} -method. Sometimes an object can simply return \code{self}; the -\module{threading} module's lock objects do this, for example. For -our database example, though, we need to create a new object; I'll -call this class \class{DatabaseContext}. Our \method{__context__()} -method must therefore look like this: +Here's the basic interface +for \class{DatabaseConnection} that I'll assume: \begin{verbatim} class DatabaseConnection: - ... - def __context__ (self): - return DatabaseContext(self) - # Database interface def cursor (self): "Returns a cursor object and starts a new transaction" @@ -742,16 +733,6 @@ "Rolls back current transaction" \end{verbatim} -Instances of \class{DatabaseContext} need the connection object so that -the connection object's \method{commit()} or \method{rollback()} -methods can be called: - -\begin{verbatim} -class DatabaseContext: - def __init__ (self, connection): - self.connection = connection -\end{verbatim} - The \method {__enter__()} method is pretty easy, having only to start a new transaction. For this application the resulting cursor object would be a useful result, so the method will return it. The user can @@ -759,11 +740,11 @@ the cursor to a variable name. \begin{verbatim} -class DatabaseContext: +class DatabaseConnection: ... def __enter__ (self): # Code to start a new transaction - cursor = self.connection.cursor() + cursor = self.cursor() return cursor \end{verbatim} @@ -779,15 +760,15 @@ statement at the marked location. \begin{verbatim} -class DatabaseContext: +class DatabaseConnection: ... def __exit__ (self, type, value, tb): if tb is None: # No exception, so commit - self.connection.commit() + self.commit() else: # Exception occurred, so rollback. - self.connection.rollback() + self.rollback() # return False \end{verbatim} @@ -830,27 +811,8 @@ ... \end{verbatim} -You can also use this decorator to write the \method{__context__()} -method for a class: - -\begin{verbatim} -class DatabaseConnection: - - @contextfactory - def __context__ (self): - cursor = self.cursor() - try: - yield cursor - except: - self.rollback() - raise - else: - self.commit() -\end{verbatim} - - The \module{contextlib} module also has a \function{nested(\var{mgr1}, -\var{mgr2}, ...)} function that combines a number of contexts so you +\var{mgr2}, ...)} function that combines a number of context managers so you don't need to write nested '\keyword{with}' statements. In this example, the single '\keyword{with}' statement both starts a database transaction and acquires a thread lock: From buildbot at python.org Wed May 3 01:31:45 2006 From: buildbot at python.org (buildbot at python.org) Date: Tue, 02 May 2006 23:31:45 +0000 Subject: [Python-checkins] buildbot warnings in ia64 Debian unstable trunk Message-ID: <20060502233145.CEAF61E4005@bag.python.org> The Buildbot has detected a new failure of ia64 Debian unstable trunk. Full details are available at: http://www.python.org/dev/buildbot/all/ia64%2520Debian%2520unstable%2520trunk/builds/340 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: andrew.kuchling Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Wed May 3 03:46:52 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 03:46:52 +0200 (CEST) Subject: [Python-checkins] r45867 - python/trunk/Doc/perl/python.perl Message-ID: <20060503014652.DE6B01E4005@bag.python.org> Author: fred.drake Date: Wed May 3 03:46:52 2006 New Revision: 45867 Modified: python/trunk/Doc/perl/python.perl Log: remove unnecessary assignment Modified: python/trunk/Doc/perl/python.perl ============================================================================== --- python/trunk/Doc/perl/python.perl (original) +++ python/trunk/Doc/perl/python.perl Wed May 3 03:46:52 2006 @@ -530,7 +530,6 @@ sub new_link_name_info(){ my $name = "l2h-" . ++$globals{'max_id'}; - my $aname = ""; my $ahref = gen_link($CURRENT_FILE, $name); return ($name, $ahref); } From python-checkins at python.org Wed May 3 03:48:24 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 03:48:24 +0200 (CEST) Subject: [Python-checkins] r45868 - python/trunk/Doc/perl/l2hinit.perl Message-ID: <20060503014824.BBB601E4005@bag.python.org> Author: fred.drake Date: Wed May 3 03:48:24 2006 New Revision: 45868 Modified: python/trunk/Doc/perl/l2hinit.perl Log: tell LaTeX2HTML to: - use UTF-8 output - not mess with the >>> prompt! Modified: python/trunk/Doc/perl/l2hinit.perl ============================================================================== --- python/trunk/Doc/perl/l2hinit.perl (original) +++ python/trunk/Doc/perl/l2hinit.perl Wed May 3 03:48:24 2006 @@ -4,7 +4,14 @@ use L2hos; -$HTML_VERSION = 4.0; +$HTML_VERSION = 4.01; +$LOWER_CASE_TAGS = 1; +$NO_FRENCH_QUOTES = 1; + +# Force Unicode support to be loaded; request UTF-8 output. +do_require_extension('unicode'); +do_require_extension('utf8'); +$HTML_OPTIONS = 'utf8'; $MAX_LINK_DEPTH = 2; $ADDRESS = ''; @@ -106,6 +113,13 @@ $ENV{'TEXINPUTS'} = undef; } print "\nSetting \$TEXINPUTS to $TEXINPUTS\n"; + + # Not sure why we need to deal with this both here and at the top, + # but this is needed to actually make it work. + do_require_extension('utf8'); + $charset = $utf8_str; + $CHARSET = $utf8_str; + $USE_UTF = 1; } From buildbot at python.org Wed May 3 04:03:16 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 02:03:16 +0000 Subject: [Python-checkins] buildbot warnings in x86 XP-2 trunk Message-ID: <20060503020316.3A3EA1E4023@bag.python.org> The Buildbot has detected a new failure of x86 XP-2 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520XP-2%2520trunk/builds/423 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: fred.drake Build Had Warnings: warnings failed slave lost sincerely, -The Buildbot From python-checkins at python.org Wed May 3 04:04:48 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 04:04:48 +0200 (CEST) Subject: [Python-checkins] r45869 - in python/trunk/Doc: api/abstract.tex ext/windows.tex lib/libcodeop.tex lib/libdoctest.tex lib/libhtmlparser.tex lib/liboperator.tex lib/libsys.tex lib/libtrace.tex ref/ref3.tex ref/ref5.tex ref/ref6.tex tut/glossary.tex tut/tut.tex whatsnew/whatsnew20.tex Message-ID: <20060503020448.36B981E4012@bag.python.org> Author: fred.drake Date: Wed May 3 04:04:40 2006 New Revision: 45869 Modified: python/trunk/Doc/api/abstract.tex python/trunk/Doc/ext/windows.tex python/trunk/Doc/lib/libcodeop.tex python/trunk/Doc/lib/libdoctest.tex python/trunk/Doc/lib/libhtmlparser.tex python/trunk/Doc/lib/liboperator.tex python/trunk/Doc/lib/libsys.tex python/trunk/Doc/lib/libtrace.tex python/trunk/Doc/ref/ref3.tex python/trunk/Doc/ref/ref5.tex python/trunk/Doc/ref/ref6.tex python/trunk/Doc/tut/glossary.tex python/trunk/Doc/tut/tut.tex python/trunk/Doc/whatsnew/whatsnew20.tex Log: avoid ugly markup based on the unfortunate conversions of ">>" and "<<" to guillemets; no need for magic here Modified: python/trunk/Doc/api/abstract.tex ============================================================================== --- python/trunk/Doc/api/abstract.tex (original) +++ python/trunk/Doc/api/abstract.tex Wed May 3 04:04:40 2006 @@ -630,7 +630,7 @@ Returns the result of right shifting \var{o1} by \var{o2} on success, or \NULL{} on failure. The operation is done \emph{in-place} when \var{o1} supports it. This is the equivalent - of the Python statement \samp{\var{o1} >\code{>=} \var{o2}}. + of the Python statement \samp{\var{o1} >>= \var{o2}}. \end{cfuncdesc} Modified: python/trunk/Doc/ext/windows.tex ============================================================================== --- python/trunk/Doc/ext/windows.tex (original) +++ python/trunk/Doc/ext/windows.tex Wed May 3 04:04:40 2006 @@ -88,7 +88,7 @@ Once the Debug build has succeeded, bring up a DOS box, and change to the \file{example_nt\textbackslash Debug} directory. You should now be able to repeat the following session (\code{C>} is - the DOS prompt, \code{>\code{>}>} is the Python prompt; note that + the DOS prompt, \code{>>>} is the Python prompt; note that build information and various debug output from Python may not match this screen dump exactly): Modified: python/trunk/Doc/lib/libcodeop.tex ============================================================================== --- python/trunk/Doc/lib/libcodeop.tex (original) +++ python/trunk/Doc/lib/libcodeop.tex Wed May 3 04:04:40 2006 @@ -19,7 +19,7 @@ \begin{enumerate} \item Being able to tell if a line of input completes a Python statement: in short, telling whether to print - `\code{>\code{>}>~}' or `\code{...~}' next. + `\code{>>>~}' or `\code{...~}' next. \item Remembering which future statements the user has entered, so subsequent input can be compiled with these in effect. \end{enumerate} Modified: python/trunk/Doc/lib/libdoctest.tex ============================================================================== --- python/trunk/Doc/lib/libdoctest.tex (original) +++ python/trunk/Doc/lib/libdoctest.tex Wed May 3 04:04:40 2006 @@ -333,8 +333,8 @@ \end{verbatim} Any expected output must immediately follow the final -\code{'>\code{>}>~'} or \code{'...~'} line containing the code, and -the expected output (if any) extends to the next \code{'>\code{>}>~'} +\code{'>>>~'} or \code{'...~'} line containing the code, and +the expected output (if any) extends to the next \code{'>>>~'} or all-whitespace line. The fine print: @@ -386,7 +386,7 @@ \end{verbatim} and as many leading whitespace characters are stripped from the -expected output as appeared in the initial \code{'>\code{>}>~'} line +expected output as appeared in the initial \code{'>>>~'} line that started the example. \end{itemize} Modified: python/trunk/Doc/lib/libhtmlparser.tex ============================================================================== --- python/trunk/Doc/lib/libhtmlparser.tex (original) +++ python/trunk/Doc/lib/libhtmlparser.tex Wed May 3 04:04:40 2006 @@ -132,7 +132,7 @@ \begin{methoddesc}{handle_decl}{decl} Method called when an SGML declaration is read by the parser. The \var{decl} parameter will be the entire contents of the declaration -inside the \code{} markup.It is intended to be overridden +inside the \code{} markup. It is intended to be overridden by a derived class; the base class implementation does nothing. \end{methoddesc} Modified: python/trunk/Doc/lib/liboperator.tex ============================================================================== --- python/trunk/Doc/lib/liboperator.tex (original) +++ python/trunk/Doc/lib/liboperator.tex Wed May 3 04:04:40 2006 @@ -320,7 +320,7 @@ \begin{funcdesc}{irshift}{a, b} \funcline{__irshift__}{a, b} -\code{a = irshift(a, b)} is equivalent to \code{a >}\code{>= b}. +\code{a = irshift(a, b)} is equivalent to \code{a >>= b}. \versionadded{2.5} \end{funcdesc} @@ -499,7 +499,7 @@ {\code{neg(\var{a})}} \lineiii{Negation (Logical)}{\code{not \var{a}}} {\code{not_(\var{a})}} - \lineiii{Right Shift}{\code{\var{a} >\code{>} \var{b}}} + \lineiii{Right Shift}{\code{\var{a} >> \var{b}}} {\code{rshift(\var{a}, \var{b})}} \lineiii{Sequence Repitition}{\code{\var{seq} * \var{i}}} {\code{repeat(\var{seq}, \var{i})}} Modified: python/trunk/Doc/lib/libsys.tex ============================================================================== --- python/trunk/Doc/lib/libsys.tex (original) +++ python/trunk/Doc/lib/libsys.tex Wed May 3 04:04:40 2006 @@ -410,7 +410,7 @@ Strings specifying the primary and secondary prompt of the interpreter. These are only defined if the interpreter is in interactive mode. Their initial values in this case are - \code{'>\code{>}> '} and \code{'... '}. If a non-string object is + \code{'>>>~'} and \code{'... '}. If a non-string object is assigned to either variable, its \function{str()} is re-evaluated each time the interpreter prepares to read a new interactive command; this can be used to implement a dynamic prompt. Modified: python/trunk/Doc/lib/libtrace.tex ============================================================================== --- python/trunk/Doc/lib/libtrace.tex (original) +++ python/trunk/Doc/lib/libtrace.tex Wed May 3 04:04:40 2006 @@ -54,7 +54,7 @@ \item[\longprogramopt{missing}, \programopt{-m}] When generating annotated listings, mark lines which -were not executed with \code{>}\code{>}\code{>}\code{>}\code{>}\code{>}. +were not executed with `\code{>>>>>>}'. \item[\longprogramopt{summary}, \programopt{-s}] When using \longprogramopt{count} or \longprogramopt{report}, write a Modified: python/trunk/Doc/ref/ref3.tex ============================================================================== --- python/trunk/Doc/ref/ref3.tex (original) +++ python/trunk/Doc/ref/ref3.tex Wed May 3 04:04:40 2006 @@ -1875,8 +1875,8 @@ called to implement the binary arithmetic operations (\code{+}, \code{-}, \code{*}, \code{//}, \code{\%}, \function{divmod()}\bifuncindex{divmod}, -\function{pow()}\bifuncindex{pow}, \code{**}, \code{<}\code{<}, -\code{>}\code{>}, \code{\&}, \code{\^}, \code{|}). For instance, to +\function{pow()}\bifuncindex{pow}, \code{**}, \code{<<}, +\code{>>}, \code{\&}, \code{\^}, \code{|}). For instance, to evaluate the expression \var{x}\code{+}\var{y}, where \var{x} is an instance of a class that has an \method{__add__()} method, \code{\var{x}.__add__(\var{y})} is called. The \method{__divmod__()} @@ -1915,8 +1915,8 @@ called to implement the binary arithmetic operations (\code{+}, \code{-}, \code{*}, \code{/}, \code{\%}, \function{divmod()}\bifuncindex{divmod}, -\function{pow()}\bifuncindex{pow}, \code{**}, \code{<}\code{<}, -\code{>}\code{>}, \code{\&}, \code{\^}, \code{|}) with reflected +\function{pow()}\bifuncindex{pow}, \code{**}, \code{<<}, +\code{>>}, \code{\&}, \code{\^}, \code{|}) with reflected (swapped) operands. These functions are only called if the left operand does not support the corresponding operation. For instance, to evaluate the expression \var{x}\code{-}\var{y}, where \var{y} is an @@ -1942,7 +1942,7 @@ \methodline[numeric object]{__ior__}{self, other} These methods are called to implement the augmented arithmetic operations (\code{+=}, \code{-=}, \code{*=}, \code{/=}, \code{\%=}, -\code{**=}, \code{<}\code{<=}, \code{>}\code{>=}, \code{\&=}, +\code{**=}, \code{<<=}, \code{>>=}, \code{\&=}, \code{\textasciicircum=}, \code{|=}). These methods should attempt to do the operation in-place (modifying \var{self}) and return the result (which could be, but does not have to be, \var{self}). If a specific method Modified: python/trunk/Doc/ref/ref5.tex ============================================================================== --- python/trunk/Doc/ref/ref5.tex (original) +++ python/trunk/Doc/ref/ref5.tex Wed May 3 04:04:40 2006 @@ -1158,7 +1158,7 @@ \hline \lineii{\code{\&}} {Bitwise AND} \hline - \lineii{\code{<}\code{<}, \code{>}\code{>}} {Shifts} + \lineii{\code{<<}, \code{>>}} {Shifts} \hline \lineii{\code{+}, \code{-}}{Addition and subtraction} \hline Modified: python/trunk/Doc/ref/ref6.tex ============================================================================== --- python/trunk/Doc/ref/ref6.tex (original) +++ python/trunk/Doc/ref/ref6.tex Wed May 3 04:04:40 2006 @@ -377,7 +377,7 @@ \begin{productionlist} \production{print_stmt} {"print" ( \optional{\token{expression} ("," \token{expression})* \optional{","}}} - \productioncont{| ">\code{>}" \token{expression} + \productioncont{| ">>" \token{expression} \optional{("," \token{expression})+ \optional{","}} )} \end{productionlist} Modified: python/trunk/Doc/tut/glossary.tex ============================================================================== --- python/trunk/Doc/tut/glossary.tex (original) +++ python/trunk/Doc/tut/glossary.tex Wed May 3 04:04:40 2006 @@ -7,7 +7,7 @@ \index{>>>} -\item[\code{>\code{>}>}] +\item[\code{>>>}] The typical Python prompt of the interactive shell. Often seen for code examples that can be tried right away in the interpreter. Modified: python/trunk/Doc/tut/tut.tex ============================================================================== --- python/trunk/Doc/tut/tut.tex (original) +++ python/trunk/Doc/tut/tut.tex Wed May 3 04:04:40 2006 @@ -264,7 +264,7 @@ When commands are read from a tty, the interpreter is said to be in \emph{interactive mode}. In this mode it prompts for the next command with the \emph{primary prompt}, usually three greater-than signs -(\samp{>\code{>}>~}); for continuation lines it prompts with the +(\samp{>>>~}); for continuation lines it prompts with the \emph{secondary prompt}, by default three dots (\samp{...~}). The interpreter prints a welcome message stating its version number and a copyright notice before printing the first prompt: @@ -423,7 +423,7 @@ \chapter{An Informal Introduction to Python \label{informal}} In the following examples, input and output are distinguished by the -presence or absence of prompts (\samp{>\code{>}>~} and \samp{...~}): to repeat +presence or absence of prompts (\samp{>>>~} and \samp{...~}): to repeat the example, you must type everything after the prompt, when the prompt appears; lines that do not begin with a prompt are output from the interpreter. % @@ -455,7 +455,7 @@ \section{Using Python as a Calculator \label{calculator}} Let's try some simple Python commands. Start the interpreter and wait -for the primary prompt, \samp{>\code{>}>~}. (It shouldn't take long.) +for the primary prompt, \samp{>>>~}. (It shouldn't take long.) \subsection{Numbers \label{numbers}} Modified: python/trunk/Doc/whatsnew/whatsnew20.tex ============================================================================== --- python/trunk/Doc/whatsnew/whatsnew20.tex (original) +++ python/trunk/Doc/whatsnew/whatsnew20.tex Wed May 3 04:04:40 2006 @@ -400,7 +400,7 @@ % The empty groups below prevent conversion to guillemets. The full list of supported assignment operators is \code{+=}, \code{-=}, \code{*=}, \code{/=}, \code{\%=}, \code{**=}, \code{\&=}, -\code{|=}, \verb|^=|, \code{>{}>=}, and \code{<{}<=}. Python classes can +\code{|=}, \verb|^=|, \code{>>=}, and \code{<<=}. Python classes can override the augmented assignment operators by defining methods named \method{__iadd__}, \method{__isub__}, etc. For example, the following \class{Number} class stores a number and supports using += to create a From python-checkins at python.org Wed May 3 04:12:49 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 04:12:49 +0200 (CEST) Subject: [Python-checkins] r45870 - python/trunk/Doc/perl/l2hinit.perl Message-ID: <20060503021249.F19CF1E4012@bag.python.org> Author: fred.drake Date: Wed May 3 04:12:47 2006 New Revision: 45870 Modified: python/trunk/Doc/perl/l2hinit.perl Log: at least comment on why curly-quotes are not enabled Modified: python/trunk/Doc/perl/l2hinit.perl ============================================================================== --- python/trunk/Doc/perl/l2hinit.perl (original) +++ python/trunk/Doc/perl/l2hinit.perl Wed May 3 04:12:47 2006 @@ -8,6 +8,9 @@ $LOWER_CASE_TAGS = 1; $NO_FRENCH_QUOTES = 1; +# '' in \code{...} is still converted, so we can't use this yet. +#$USE_CURLY_QUOTES = 1; + # Force Unicode support to be loaded; request UTF-8 output. do_require_extension('unicode'); do_require_extension('utf8'); From python-checkins at python.org Wed May 3 04:27:42 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 04:27:42 +0200 (CEST) Subject: [Python-checkins] r45871 - python/trunk/Doc/ref/ref6.tex Message-ID: <20060503022742.1ECC61E4005@bag.python.org> Author: fred.drake Date: Wed May 3 04:27:40 2006 New Revision: 45871 Modified: python/trunk/Doc/ref/ref6.tex Log: one more place to avoid extra markup Modified: python/trunk/Doc/ref/ref6.tex ============================================================================== --- python/trunk/Doc/ref/ref6.tex (original) +++ python/trunk/Doc/ref/ref6.tex Wed May 3 04:27:40 2006 @@ -417,7 +417,7 @@ \keyword{print} also has an extended\index{extended print statement} form, defined by the second portion of the syntax described above. This form is sometimes referred to as ``\keyword{print} chevron.'' -In this form, the first expression after the \code{>}\code{>} must +In this form, the first expression after the \code{>>} must evaluate to a ``file-like'' object, specifically an object that has a \method{write()} method as described above. With this extended form, the subsequent expressions are printed to this file object. If the From python-checkins at python.org Wed May 3 04:29:10 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 04:29:10 +0200 (CEST) Subject: [Python-checkins] r45872 - python/trunk/Doc/lib/libdis.tex Message-ID: <20060503022910.5738C1E4005@bag.python.org> Author: fred.drake Date: Wed May 3 04:29:09 2006 New Revision: 45872 Modified: python/trunk/Doc/lib/libdis.tex Log: one more place to avoid extra markup (how many will there be?) Modified: python/trunk/Doc/lib/libdis.tex ============================================================================== --- python/trunk/Doc/lib/libdis.tex (original) +++ python/trunk/Doc/lib/libdis.tex Wed May 3 04:29:09 2006 @@ -55,7 +55,7 @@ \begin{enumerate} \item the line number, for the first instruction of each line \item the current instruction, indicated as \samp{-->}, -\item a labelled instruction, indicated with \samp{>\code{>}}, +\item a labelled instruction, indicated with \samp{>>}, \item the address of the instruction, \item the operation code name, \item operation parameters, and From python-checkins at python.org Wed May 3 04:29:40 2006 From: python-checkins at python.org (fred.drake) Date: Wed, 3 May 2006 04:29:40 +0200 (CEST) Subject: [Python-checkins] r45873 - python/trunk/Doc/lib/libsys.tex Message-ID: <20060503022940.42CDC1E4005@bag.python.org> Author: fred.drake Date: Wed May 3 04:29:39 2006 New Revision: 45873 Modified: python/trunk/Doc/lib/libsys.tex Log: fix up whitespace in prompt strings Modified: python/trunk/Doc/lib/libsys.tex ============================================================================== --- python/trunk/Doc/lib/libsys.tex (original) +++ python/trunk/Doc/lib/libsys.tex Wed May 3 04:29:39 2006 @@ -410,7 +410,7 @@ Strings specifying the primary and secondary prompt of the interpreter. These are only defined if the interpreter is in interactive mode. Their initial values in this case are - \code{'>>>~'} and \code{'... '}. If a non-string object is + \code{'>>>~'} and \code{'...~'}. If a non-string object is assigned to either variable, its \function{str()} is re-evaluated each time the interpreter prepares to read a new interactive command; this can be used to implement a dynamic prompt. From buildbot at python.org Wed May 3 05:07:19 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 03:07:19 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060503030719.A26AB1E4005@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/355 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: fred.drake Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Wed May 3 05:52:48 2006 From: python-checkins at python.org (sean.reifschneider) Date: Wed, 3 May 2006 05:52:48 +0200 (CEST) Subject: [Python-checkins] r45874 - peps/trunk/pep-0243.txt Message-ID: <20060503035248.BE19B1E4005@bag.python.org> Author: sean.reifschneider Date: Wed May 3 05:52:47 2006 New Revision: 45874 Modified: peps/trunk/pep-0243.txt Log: Withdrawing. Modified: peps/trunk/pep-0243.txt ============================================================================== --- peps/trunk/pep-0243.txt (original) +++ peps/trunk/pep-0243.txt Wed May 3 05:52:47 2006 @@ -4,7 +4,7 @@ Last-Modified: $Date$ Author: jafo-pep at tummy.com (Sean Reifschneider) Discussions-To: distutils-sig at python.org -Status: Draft +Status: Withdrawn Type: Standards Track Created: 18-Mar-2001 Python-Version: 2.1 From python-checkins at python.org Wed May 3 06:44:17 2006 From: python-checkins at python.org (neal.norwitz) Date: Wed, 3 May 2006 06:44:17 +0200 (CEST) Subject: [Python-checkins] r45875 - peps/trunk/pep-0000.txt Message-ID: <20060503044417.B109E1E4005@bag.python.org> Author: neal.norwitz Date: Wed May 3 06:44:17 2006 New Revision: 45875 Modified: peps/trunk/pep-0000.txt Log: 243 was withdrawn Modified: peps/trunk/pep-0000.txt ============================================================================== --- peps/trunk/pep-0000.txt (original) +++ peps/trunk/pep-0000.txt Wed May 3 06:44:17 2006 @@ -75,7 +75,6 @@ S 228 Reworking Python's Numeric Model Zadka, GvR S 237 Unifying Long Integers and Integers Zadka, GvR - S 243 Module Repository Upload Mechanism Reifschneider S 256 Docstring Processing System Framework Goodger S 258 Docutils Design Specification Goodger S 267 Optimized Access to Module Namespaces Hylton @@ -192,6 +191,7 @@ SR 239 Adding a Rational Type to Python Craig, Zadka SR 240 Adding a Rational Literal to Python Craig, Zadka SR 242 Numeric Kinds Dubois + SW 243 Module Repository Upload Mechanism Reifschneider SR 244 The `directive' Statement von Loewis SR 245 Python Interface Syntax Pelletier SR 246 Object Adaptation Evans @@ -304,7 +304,7 @@ SR 240 Adding a Rational Literal to Python Craig, Zadka SF 241 Metadata for Python Software Packages Kuchling SR 242 Numeric Kinds Dubois - S 243 Module Repository Upload Mechanism Reifschneider + SW 243 Module Repository Upload Mechanism Reifschneider SR 244 The `directive' Statement von Loewis SR 245 Python Interface Syntax Pelletier SR 246 Object Adaptation Evans From python-checkins at python.org Wed May 3 06:46:15 2006 From: python-checkins at python.org (tim.peters) Date: Wed, 3 May 2006 06:46:15 +0200 (CEST) Subject: [Python-checkins] r45876 - in python/trunk: Doc/lib/sqlite3/adapter_point_1.py Doc/lib/sqlite3/adapter_point_2.py Doc/lib/sqlite3/execute_2.py Doc/lib/sqlite3/execute_3.py Doc/lib/sqlite3/insert_more_people.py Doc/lib/sqlite3/shortcut_methods.py Doc/lib/sqlite3/text_factory.py Lib/test/test_unicode.py Message-ID: <20060503044615.BEABD1E4005@bag.python.org> Author: tim.peters Date: Wed May 3 06:46:14 2006 New Revision: 45876 Modified: python/trunk/Doc/lib/sqlite3/adapter_point_1.py python/trunk/Doc/lib/sqlite3/adapter_point_2.py python/trunk/Doc/lib/sqlite3/execute_2.py python/trunk/Doc/lib/sqlite3/execute_3.py python/trunk/Doc/lib/sqlite3/insert_more_people.py python/trunk/Doc/lib/sqlite3/shortcut_methods.py python/trunk/Doc/lib/sqlite3/text_factory.py python/trunk/Lib/test/test_unicode.py Log: Whitespace normalization. Modified: python/trunk/Doc/lib/sqlite3/adapter_point_1.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/adapter_point_1.py (original) +++ python/trunk/Doc/lib/sqlite3/adapter_point_1.py Wed May 3 06:46:14 2006 @@ -14,4 +14,3 @@ p = Point(4.0, -3.2) cur.execute("select ?", (p,)) print cur.fetchone()[0] - Modified: python/trunk/Doc/lib/sqlite3/adapter_point_2.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/adapter_point_2.py (original) +++ python/trunk/Doc/lib/sqlite3/adapter_point_2.py Wed May 3 06:46:14 2006 @@ -15,4 +15,3 @@ p = Point(4.0, -3.2) cur.execute("select ?", (p,)) print cur.fetchone()[0] - Modified: python/trunk/Doc/lib/sqlite3/execute_2.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/execute_2.py (original) +++ python/trunk/Doc/lib/sqlite3/execute_2.py Wed May 3 06:46:14 2006 @@ -10,4 +10,3 @@ cur.execute("select name_last, age from people where name_last=:who and age=:age", {"who": who, "age": age}) print cur.fetchone() - Modified: python/trunk/Doc/lib/sqlite3/execute_3.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/execute_3.py (original) +++ python/trunk/Doc/lib/sqlite3/execute_3.py Wed May 3 06:46:14 2006 @@ -10,5 +10,3 @@ cur.execute("select name_last, age from people where name_last=:who and age=:age", locals()) print cur.fetchone() - - Modified: python/trunk/Doc/lib/sqlite3/insert_more_people.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/insert_more_people.py (original) +++ python/trunk/Doc/lib/sqlite3/insert_more_people.py Wed May 3 06:46:14 2006 @@ -14,4 +14,3 @@ # The changes will not be saved unless the transaction is committed explicitly: con.commit() - Modified: python/trunk/Doc/lib/sqlite3/shortcut_methods.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/shortcut_methods.py (original) +++ python/trunk/Doc/lib/sqlite3/shortcut_methods.py Wed May 3 06:46:14 2006 @@ -1,22 +1,21 @@ -import sqlite3 - -persons = [ - ("Hugo", "Boss"), - ("Calvin", "Klein") - ] - -con = sqlite3.connect(":memory:") - -# Create the table -con.execute("create table person(firstname, lastname)") - -# Fill the table -con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) - -# Print the table contents -for row in con.execute("select firstname, lastname from person"): - print row - -# Using a dummy WHERE clause to not let SQLite take the shortcut table deletes. -print "I just deleted", con.execute("delete from person where 1=1").rowcount, "rows" - +import sqlite3 + +persons = [ + ("Hugo", "Boss"), + ("Calvin", "Klein") + ] + +con = sqlite3.connect(":memory:") + +# Create the table +con.execute("create table person(firstname, lastname)") + +# Fill the table +con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) + +# Print the table contents +for row in con.execute("select firstname, lastname from person"): + print row + +# Using a dummy WHERE clause to not let SQLite take the shortcut table deletes. +print "I just deleted", con.execute("delete from person where 1=1").rowcount, "rows" Modified: python/trunk/Doc/lib/sqlite3/text_factory.py ============================================================================== --- python/trunk/Doc/lib/sqlite3/text_factory.py (original) +++ python/trunk/Doc/lib/sqlite3/text_factory.py Wed May 3 06:46:14 2006 @@ -1,43 +1,42 @@ -import sqlite3 - -con = sqlite3.connect(":memory:") -cur = con.cursor() - -# Create the table -con.execute("create table person(lastname, firstname)") - -AUSTRIA = u"\xd6sterreich" - -# by default, rows are returned as Unicode -cur.execute("select ?", (AUSTRIA,)) -row = cur.fetchone() -assert row[0] == AUSTRIA - -# but we can make pysqlite always return bytestrings ... -con.text_factory = str -cur.execute("select ?", (AUSTRIA,)) -row = cur.fetchone() -assert type(row[0]) == str -# the bytestrings will be encoded in UTF-8, unless you stored garbage in the -# database ... -assert row[0] == AUSTRIA.encode("utf-8") - -# we can also implement a custom text_factory ... -# here we implement one that will ignore Unicode characters that cannot be -# decoded from UTF-8 -con.text_factory = lambda x: unicode(x, "utf-8", "ignore") -cur.execute("select ?", ("this is latin1 and would normally create errors" + u"\xe4\xf6\xfc".encode("latin1"),)) -row = cur.fetchone() -assert type(row[0]) == unicode - -# pysqlite offers a builtin optimized text_factory that will return bytestring -# objects, if the data is in ASCII only, and otherwise return unicode objects -con.text_factory = sqlite3.OptimizedUnicode -cur.execute("select ?", (AUSTRIA,)) -row = cur.fetchone() -assert type(row[0]) == unicode - -cur.execute("select ?", ("Germany",)) -row = cur.fetchone() -assert type(row[0]) == str - +import sqlite3 + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +# Create the table +con.execute("create table person(lastname, firstname)") + +AUSTRIA = u"\xd6sterreich" + +# by default, rows are returned as Unicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert row[0] == AUSTRIA + +# but we can make pysqlite always return bytestrings ... +con.text_factory = str +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == str +# the bytestrings will be encoded in UTF-8, unless you stored garbage in the +# database ... +assert row[0] == AUSTRIA.encode("utf-8") + +# we can also implement a custom text_factory ... +# here we implement one that will ignore Unicode characters that cannot be +# decoded from UTF-8 +con.text_factory = lambda x: unicode(x, "utf-8", "ignore") +cur.execute("select ?", ("this is latin1 and would normally create errors" + u"\xe4\xf6\xfc".encode("latin1"),)) +row = cur.fetchone() +assert type(row[0]) == unicode + +# pysqlite offers a builtin optimized text_factory that will return bytestring +# objects, if the data is in ASCII only, and otherwise return unicode objects +con.text_factory = sqlite3.OptimizedUnicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == unicode + +cur.execute("select ?", ("Germany",)) +row = cur.fetchone() +assert type(row[0]) == str Modified: python/trunk/Lib/test/test_unicode.py ============================================================================== --- python/trunk/Lib/test/test_unicode.py (original) +++ python/trunk/Lib/test/test_unicode.py Wed May 3 06:46:14 2006 @@ -410,7 +410,7 @@ def __str__(self): return u'\u1234' self.assertEqual('%s' % Wrapper(), u'\u1234') - + @test_support.run_with_locale('LC_ALL', 'de_DE', 'fr_FR') def test_format_float(self): # should not format with a comma, but always with C locale From python-checkins at python.org Wed May 3 06:52:06 2006 From: python-checkins at python.org (martin.v.loewis) Date: Wed, 3 May 2006 06:52:06 +0200 (CEST) Subject: [Python-checkins] r45877 - python/trunk/Doc/lib/libmsilib.tex Message-ID: <20060503045206.37D3C1E4005@bag.python.org> Author: martin.v.loewis Date: Wed May 3 06:52:04 2006 New Revision: 45877 Modified: python/trunk/Doc/lib/libmsilib.tex Log: Correct some formulations, fix XXX comments. Modified: python/trunk/Doc/lib/libmsilib.tex ============================================================================== --- python/trunk/Doc/lib/libmsilib.tex (original) +++ python/trunk/Doc/lib/libmsilib.tex Wed May 3 06:52:04 2006 @@ -33,7 +33,7 @@ be a list of tuples, each containing the name of the file on disk, and the name of the file inside the CAB file. - The files are added to the CAB file in the order they have + The files are added to the CAB file in the order they appear in the list. All files are added into a single CAB file, using the MSZIP compression algorithm. @@ -99,8 +99,7 @@ listing all tables for which content should be added, and one attribute per table that has the actual content. - This is typically used to install the sequence - % XXX unfinished sentence + This is typically used to install the sequence tables. \end{funcdesc} \begin{funcdesc}{add_stream}{database, name, path} @@ -293,7 +292,7 @@ \subsection{Directory Objects\label{msi-directory}} \begin{classdesc}{Directory}{database, cab, basedir, physical, - logical, default, component, \optional{flags}} + logical, default, component, \optional{componentflags}} Create a new directory in the Directory table. There is a current component at each point in time for the directory, which is either explicitly created through \method{start_component}, or implicitly when files @@ -301,9 +300,8 @@ component, and into the cab file. To create a directory, a base directory object needs to be specified (can be \code{None}), the path to the physical directory, and a logical directory name. \var{default} - specifies the DefaultDir slot in the directory table. componentflags + specifies the DefaultDir slot in the directory table. \var{componentflags} specifies the default flags that new components get. - % XXX signature says 'component', 'flags'; text says 'componentflags'. \end{classdesc} \begin{methoddesc}[Directory]{start_component}{\optional{component\optional{, @@ -484,4 +482,4 @@ \begin{datadesc}{text} This module contains definitions for the UIText and ActionText tables, for the standard installer actions. -\end{datadesc} \ No newline at end of file +\end{datadesc} From python-checkins at python.org Wed May 3 06:59:03 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 06:59:03 +0200 (CEST) Subject: [Python-checkins] r45878 - peps/trunk/pep-3099.txt Message-ID: <20060503045903.2D4371E4005@bag.python.org> Author: georg.brandl Date: Wed May 3 06:58:59 2006 New Revision: 45878 Modified: peps/trunk/pep-3099.txt Log: No no reusing loop variables. Modified: peps/trunk/pep-3099.txt ============================================================================== --- peps/trunk/pep-3099.txt (original) +++ peps/trunk/pep-3099.txt Wed May 3 06:58:59 2006 @@ -60,6 +60,12 @@ Thread: Future of slices http://mail.python.org/pipermail/python-3000/2006-May/001563.html +* It will not be forbidden to reuse a loop variable inside the loop's + suite. + + Thread: elimination of scope bleeding of iteration variables + http://mail.python.org/pipermail/python-dev/2006-May/064761.html + Builtins ======== From python-checkins at python.org Wed May 3 07:05:03 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 07:05:03 +0200 (CEST) Subject: [Python-checkins] r45879 - python/trunk/Lib/urllib2.py Message-ID: <20060503050503.A1E611E4005@bag.python.org> Author: georg.brandl Date: Wed May 3 07:05:02 2006 New Revision: 45879 Modified: python/trunk/Lib/urllib2.py Log: Patch #1480067: don't redirect HTTP digest auth in urllib2 Modified: python/trunk/Lib/urllib2.py ============================================================================== --- python/trunk/Lib/urllib2.py (original) +++ python/trunk/Lib/urllib2.py Wed May 3 07:05:02 2006 @@ -858,7 +858,7 @@ auth_val = 'Digest %s' % auth if req.headers.get(self.auth_header, None) == auth_val: return None - req.add_header(self.auth_header, auth_val) + req.add_unredirected_header(self.auth_header, auth_val) resp = self.parent.open(req) return resp From python-checkins at python.org Wed May 3 07:05:09 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 07:05:09 +0200 (CEST) Subject: [Python-checkins] r45880 - python/branches/release24-maint/Lib/urllib2.py Message-ID: <20060503050509.09B4A1E4012@bag.python.org> Author: georg.brandl Date: Wed May 3 07:05:08 2006 New Revision: 45880 Modified: python/branches/release24-maint/Lib/urllib2.py Log: Patch #1480067: don't redirect HTTP digest auth in urllib2 (backport from rev. 45879) Modified: python/branches/release24-maint/Lib/urllib2.py ============================================================================== --- python/branches/release24-maint/Lib/urllib2.py (original) +++ python/branches/release24-maint/Lib/urllib2.py Wed May 3 07:05:08 2006 @@ -815,7 +815,7 @@ auth_val = 'Digest %s' % auth if req.headers.get(self.auth_header, None) == auth_val: return None - req.add_header(self.auth_header, auth_val) + req.add_unredirected_header(self.auth_header, auth_val) resp = self.parent.open(req) return resp From python-checkins at python.org Wed May 3 07:15:12 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 07:15:12 +0200 (CEST) Subject: [Python-checkins] r45881 - python/trunk/Lib/test/test_urllib2.py python/trunk/Lib/test/test_urllib2net.py Message-ID: <20060503051512.17EF31E4005@bag.python.org> Author: georg.brandl Date: Wed May 3 07:15:10 2006 New Revision: 45881 Modified: python/trunk/Lib/test/test_urllib2.py python/trunk/Lib/test/test_urllib2net.py Log: Move network tests from test_urllib2 to test_urllib2net. Modified: python/trunk/Lib/test/test_urllib2.py ============================================================================== --- python/trunk/Lib/test/test_urllib2.py (original) +++ python/trunk/Lib/test/test_urllib2.py Wed May 3 07:15:10 2006 @@ -857,138 +857,6 @@ else: self.assert_(False) -class NetworkTests(unittest.TestCase): - def setUp(self): - if 0: # for debugging - import logging - logger = logging.getLogger("test_urllib2") - logger.addHandler(logging.StreamHandler()) - - def test_range (self): - req = urllib2.Request("http://www.python.org", - headers={'Range': 'bytes=20-39'}) - result = urllib2.urlopen(req) - data = result.read() - self.assertEqual(len(data), 20) - - # XXX The rest of these tests aren't very good -- they don't check much. - # They do sometimes catch some major disasters, though. - - def test_ftp(self): - urls = [ - 'ftp://www.python.org/pub/python/misc/sousa.au', - 'ftp://www.python.org/pub/tmp/blat', - 'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC' - '/research-reports/00README-Legal-Rules-Regs', - ] - self._test_urls(urls, self._extra_handlers()) - - def test_gopher(self): - import warnings - warnings.filterwarnings("ignore", - "the gopherlib module is deprecated", - DeprecationWarning, - "urllib2$") - urls = [ - # Thanks to Fred for finding these! - 'gopher://gopher.lib.ncsu.edu/11/library/stacks/Alex', - 'gopher://gopher.vt.edu:10010/10/33', - ] - self._test_urls(urls, self._extra_handlers()) - - def test_file(self): - TESTFN = test_support.TESTFN - f = open(TESTFN, 'w') - try: - f.write('hi there\n') - f.close() - urls = [ - 'file:'+sanepathname2url(os.path.abspath(TESTFN)), - - # XXX bug, should raise URLError - #('file://nonsensename/etc/passwd', None, urllib2.URLError) - ('file://nonsensename/etc/passwd', None, (OSError, socket.error)) - ] - self._test_urls(urls, self._extra_handlers()) - finally: - os.remove(TESTFN) - - def test_http(self): - urls = [ - 'http://www.espn.com/', # redirect - 'http://www.python.org/Spanish/Inquistion/', - ('http://www.python.org/cgi-bin/faqw.py', - 'query=pythonistas&querytype=simple&casefold=yes&req=search', None), - 'http://www.python.org/', - ] - self._test_urls(urls, self._extra_handlers()) - - # XXX Following test depends on machine configurations that are internal - # to CNRI. Need to set up a public server with the right authentication - # configuration for test purposes. - -## def test_cnri(self): -## if socket.gethostname() == 'bitdiddle': -## localhost = 'bitdiddle.cnri.reston.va.us' -## elif socket.gethostname() == 'bitdiddle.concentric.net': -## localhost = 'localhost' -## else: -## localhost = None -## if localhost is not None: -## urls = [ -## 'file://%s/etc/passwd' % localhost, -## 'http://%s/simple/' % localhost, -## 'http://%s/digest/' % localhost, -## 'http://%s/not/found.h' % localhost, -## ] - -## bauth = HTTPBasicAuthHandler() -## bauth.add_password('basic_test_realm', localhost, 'jhylton', -## 'password') -## dauth = HTTPDigestAuthHandler() -## dauth.add_password('digest_test_realm', localhost, 'jhylton', -## 'password') - -## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) - - def _test_urls(self, urls, handlers): - import socket - import time - import logging - debug = logging.getLogger("test_urllib2").debug - - urllib2.install_opener(urllib2.build_opener(*handlers)) - - for url in urls: - if isinstance(url, tuple): - url, req, expected_err = url - else: - req = expected_err = None - debug(url) - try: - f = urllib2.urlopen(url, req) - except (IOError, socket.error, OSError), err: - debug(err) - if expected_err: - self.assert_(isinstance(err, expected_err)) - else: - buf = f.read() - f.close() - debug("read %d bytes" % len(buf)) - debug("******** next url coming up...") - time.sleep(0.1) - - def _extra_handlers(self): - handlers = [] - - handlers.append(urllib2.GopherHandler) - - cfh = urllib2.CacheFTPHandler() - cfh.setTimeout(1) - handlers.append(cfh) - - return handlers - def test_main(verbose=None): from test import test_urllib2 @@ -998,8 +866,6 @@ OpenerDirectorTests, HandlerTests, MiscTests) - if test_support.is_resource_enabled('network'): - tests += (NetworkTests,) test_support.run_unittest(*tests) if __name__ == "__main__": Modified: python/trunk/Lib/test/test_urllib2net.py ============================================================================== --- python/trunk/Lib/test/test_urllib2net.py (original) +++ python/trunk/Lib/test/test_urllib2net.py Wed May 3 07:15:10 2006 @@ -2,6 +2,7 @@ import unittest from test import test_support +from test.test_urllib2 import sanepathname2url import socket import urllib2 @@ -124,10 +125,145 @@ # urllib2.urlopen, "http://www.sadflkjsasadf.com/") urllib2.urlopen, "http://www.python.invalid/") + +class OtherNetworkTests(unittest.TestCase): + def setUp(self): + if 0: # for debugging + import logging + logger = logging.getLogger("test_urllib2net") + logger.addHandler(logging.StreamHandler()) + + def test_range (self): + req = urllib2.Request("http://www.python.org", + headers={'Range': 'bytes=20-39'}) + result = urllib2.urlopen(req) + data = result.read() + self.assertEqual(len(data), 20) + + # XXX The rest of these tests aren't very good -- they don't check much. + # They do sometimes catch some major disasters, though. + + def test_ftp(self): + urls = [ + 'ftp://www.python.org/pub/python/misc/sousa.au', + 'ftp://www.python.org/pub/tmp/blat', + 'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC' + '/research-reports/00README-Legal-Rules-Regs', + ] + self._test_urls(urls, self._extra_handlers()) + + def test_gopher(self): + import warnings + warnings.filterwarnings("ignore", + "the gopherlib module is deprecated", + DeprecationWarning, + "urllib2$") + urls = [ + # Thanks to Fred for finding these! + 'gopher://gopher.lib.ncsu.edu/11/library/stacks/Alex', + 'gopher://gopher.vt.edu:10010/10/33', + ] + self._test_urls(urls, self._extra_handlers()) + + def test_file(self): + TESTFN = test_support.TESTFN + f = open(TESTFN, 'w') + try: + f.write('hi there\n') + f.close() + urls = [ + 'file:'+sanepathname2url(os.path.abspath(TESTFN)), + + # XXX bug, should raise URLError + #('file://nonsensename/etc/passwd', None, urllib2.URLError) + ('file://nonsensename/etc/passwd', None, (OSError, socket.error)) + ] + self._test_urls(urls, self._extra_handlers()) + finally: + os.remove(TESTFN) + + def test_http(self): + urls = [ + 'http://www.espn.com/', # redirect + 'http://www.python.org/Spanish/Inquistion/', + ('http://www.python.org/cgi-bin/faqw.py', + 'query=pythonistas&querytype=simple&casefold=yes&req=search', None), + 'http://www.python.org/', + ] + self._test_urls(urls, self._extra_handlers()) + + # XXX Following test depends on machine configurations that are internal + # to CNRI. Need to set up a public server with the right authentication + # configuration for test purposes. + +## def test_cnri(self): +## if socket.gethostname() == 'bitdiddle': +## localhost = 'bitdiddle.cnri.reston.va.us' +## elif socket.gethostname() == 'bitdiddle.concentric.net': +## localhost = 'localhost' +## else: +## localhost = None +## if localhost is not None: +## urls = [ +## 'file://%s/etc/passwd' % localhost, +## 'http://%s/simple/' % localhost, +## 'http://%s/digest/' % localhost, +## 'http://%s/not/found.h' % localhost, +## ] + +## bauth = HTTPBasicAuthHandler() +## bauth.add_password('basic_test_realm', localhost, 'jhylton', +## 'password') +## dauth = HTTPDigestAuthHandler() +## dauth.add_password('digest_test_realm', localhost, 'jhylton', +## 'password') + +## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) + + def _test_urls(self, urls, handlers): + import socket + import time + import logging + debug = logging.getLogger("test_urllib2").debug + + urllib2.install_opener(urllib2.build_opener(*handlers)) + + for url in urls: + if isinstance(url, tuple): + url, req, expected_err = url + else: + req = expected_err = None + debug(url) + try: + f = urllib2.urlopen(url, req) + except (IOError, socket.error, OSError), err: + debug(err) + if expected_err: + self.assert_(isinstance(err, expected_err)) + else: + buf = f.read() + f.close() + debug("read %d bytes" % len(buf)) + debug("******** next url coming up...") + time.sleep(0.1) + + def _extra_handlers(self): + handlers = [] + + handlers.append(urllib2.GopherHandler) + + cfh = urllib2.CacheFTPHandler() + cfh.setTimeout(1) + handlers.append(cfh) + + return handlers + + + def test_main(): test_support.requires("network") test_support.run_unittest(URLTimeoutTest, urlopenNetworkTests, - AuthTests) + AuthTests, OtherNetworkTests) if __name__ == "__main__": test_main() From python-checkins at python.org Wed May 3 07:17:37 2006 From: python-checkins at python.org (guido.van.rossum) Date: Wed, 3 May 2006 07:17:37 +0200 (CEST) Subject: [Python-checkins] r45882 - sandbox/trunk/sio/io.py sandbox/trunk/sio/test_io.py Message-ID: <20060503051737.7E9D41E4005@bag.python.org> Author: guido.van.rossum Date: Wed May 3 07:17:37 2006 New Revision: 45882 Added: sandbox/trunk/sio/test_io.py (contents, props changed) Modified: sandbox/trunk/sio/io.py Log: Some progress -- now using TDD. Modified: sandbox/trunk/sio/io.py ============================================================================== --- sandbox/trunk/sio/io.py (original) +++ sandbox/trunk/sio/io.py Wed May 3 07:17:37 2006 @@ -93,20 +93,34 @@ """A binary file using I/O on Unix file descriptors.""" - def __init__(self, fd): + def __init__(self, fd, __more=None, + readable=True, writable=False, + seekable=False, truncatable=False): + if __more is not None: + raise TypeError("only one positional argument is allowed") self._fd = fd + self._readable = readable + self._writable = writable + self._seekable = seekable + self._truncatable = truncatable + + def close(self): + fd = self._fd + self._fd = None + if fd is not None: + os.close(fd) def readable(self): - return True # May be a lie -- but how to tell the mode? + return self._readable def writable(self): - return True # May be a lie -- but how to tell the mode? + return self._writable def seekable(self): - return True # May be a lie -- but how to tell the mode? + return self._seekable def truncatable(self): - return True # May be a lie -- but how to tell the mode? + return self._truncatable def read(self, n): b = os.read(self._fd, n) @@ -128,7 +142,7 @@ os.ftruncate(self._fd, offset) return os.lseek(self._fd, 0, 2) - # XXX ioctl, fcntl? What else? + # XXX ioctl? fcntl? isatty? fileno? What else? class BufferingBinaryFileWrapper: @@ -164,13 +178,32 @@ # else: # self._buffer[self._bufptr : ] = data to be read + def close(self): + file = self._file + if file is not None: + self.flush() + self._file = None + file.close() + + def readable(self): + return self._file.readable() + + def writable(self): + return self._file.writable() + + def seekable(self): + return self._file.seekable() + + def truncatable(self): + return self._file.truncatable() + def flush(self): if self._writing: start = 0 while start < self._bufptr: start += self._file.write(self._buffer[start : self._bufptr]) self._bufptr = 0 - elif self._bufptr < len(self._buffer): + elif self._bufptr < len(self._buffer) and self._file.seekable(): self._file.seek(self._bufptr - len(self._buffer), 1) self._buffer = bytes() self._bufptr = 0 @@ -224,22 +257,66 @@ self._buffer = bytes(self._bufsize) if self._bufptr + len(b) < len(self._buffer): self._buffer[self._bufptr : self._bufptr + len(b)] = b + self._bufptr += len(b) elif self._bufptr + len(b) == len(self._buffer): self._buffer[self._bufptr : ] = b + self._bufptr = len(self._buffer) self.flush() else: n = len(self._buffer) - self._bufptr self._buffer[self._bufptr : ] = b[ : n] + self._bufptr = len(self._buffer) self.flush() - self._bufptr[ : len(b) - n] = b[n : ] + self._buffer[ : len(b) - n] = b[n : ] self._bufptr = len(b) - n + def seek(self, pos, whence=0): + if not self._file.seekable(): + raise IOError("file is not seekable") + # XXX Optimize this for seeks while reading within the buffer? + self.flush() + self._file.seek(pos, whence) + + def tell(self): + if not self._file.seekable(): + raise IOError("file is not seekable") + pos = self._file.tell() + if self._writing: + pos += self._bufptr + else: + pos += self._bufptr - len(self._buffer) + return pos -def main(): - import sys - fd = sys.stdout.fileno() - f = OSBinaryFile(fd) - f.write(bytes(u"hello world\n", "ascii")) + def truncate(self, pos): + if not self._file.truncatable(): + raise IOError("file is not truncatable") + self.flush() + return self._file.truncate(pos) -if __name__ == "__main__": - main() + +def open(filename, mode, bufsize=DEFAULT_BUFSIZE): + """Return an open file object. + + This is a versatile factory function that can open binary and text + files for reading and writing. + + """ + if mode not in ("rb", "wb"): + raise ValueError("unrecognized mode: %r" % (mode,)) + flags = getattr(os, "O_BINARY", 0) + readable = writable = False + if mode == "rb": + flags |= os.O_RDONLY + readable = True + else: + flags |= os.O_WRONLY | os.O_TRUNC | os.O_CREAT + writable = True + fd = os.open(filename, flags, 0666) + file = OSBinaryFile(fd, + readable=readable, + writable=writable, + seekable=True, + truncatable=hasattr(os, "ftruncate")) + if bufsize != 0: + file = BufferingBinaryFileWrapper(file, bufsize) + return file Added: sandbox/trunk/sio/test_io.py ============================================================================== --- (empty file) +++ sandbox/trunk/sio/test_io.py Wed May 3 07:17:37 2006 @@ -0,0 +1,92 @@ +#!/usr/bin/env python3.0 + +"""Unit tests for io.py.""" + +import os +import shutil +import tempfile +import unittest + +import io # Local + + +class IOTestCase(unittest.TestCase): + + def setUp(self): + self.tfn = tempfile.mktemp() + + def tearDown(self): + if os.path.exists(self.tfn): + os.remove(self.tfn) + + def test_unbuffered(self): + sample1 = bytes("hello ") + sample2 = bytes("world\n") + f = io.open(self.tfn, "wb", 0) + try: + f.write(sample1) + f.write(sample2) + finally: + f.close() + + f = open(self.tfn) # Classic open! + try: + data = f.read() + finally: + f.close() + self.assertEquals(bytes(data), sample1+sample2) + + f = io.open(self.tfn, "rb", 0) + try: + data = f.read(1) + self.assertEquals(data, sample1[:1]) + self.assertEquals(f.tell(), 1) + f.seek(0) + self.assertEquals(f.tell(), 0) + data = f.read(len(sample1)) + self.assertEquals(data, sample1) + data += f.read(100) + self.assertEquals(data, sample1+sample2) + finally: + f.close() + + def test_buffered_read(self): + sample1 = bytes("hello ") + sample2 = bytes("world\n") + for bufsize in 1, 2, 3, 4, 5, 6, 7, 8, 16, 8*1024: + f = io.open(self.tfn, "wb", bufsize) + try: + f.write(sample1) + f.write(sample2) + finally: + f.close() + + f = open(self.tfn) # Classic open! + try: + data = f.read() + finally: + f.close() + self.assertEquals(bytes(data), sample1+sample2, + "%r != %r, bufsize=%s" % (bytes(data), + sample1+sample2, + bufsize)) + + f = io.open(self.tfn, "rb", bufsize) + try: + data = f.read(1) + self.assertEquals(data, sample1[:1]) + self.assertEquals(f.tell(), 1) + f.seek(0) + self.assertEquals(f.tell(), 0) + data = f.read(len(sample1)) + self.assertEquals(data, sample1) + data += f.read(100) + self.assertEquals(data, sample1+sample2) + finally: + f.close() + + os.remove(self.tfn) + + +if __name__ == "__main__": + unittest.main() From nnorwitz at gmail.com Wed May 3 07:56:26 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Tue, 2 May 2006 22:56:26 -0700 Subject: [Python-checkins] r45862 - in python/trunk: Doc/lib/libcontextlib.tex Doc/ref/ref3.tex Doc/ref/ref7.tex Lib/calendar.py Lib/compiler/pycodegen.py Lib/contextlib.py Lib/decimal.py Lib/dummy_thread.py Lib/test/test_contextlib.py Lib/test/test_with. Message-ID: I wonder if get_manager() would be a better method name. At least this: with decimal.ExtendedContext.get_manager(): reads better to me since context is not duplicated. n -- > Modified: python/trunk/Lib/decimal.py > ============================================================================== > --- python/trunk/Lib/decimal.py (original) > +++ python/trunk/Lib/decimal.py Tue May 2 21:47:52 2006 > @@ -2248,7 +2248,7 @@ > s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']') > return ', '.join(s) + ')' > > - def __context__(self): > + def context_manager(self): > return WithStatementContext(self.copy()) > > def clear_flags(self): > > Modified: python/trunk/Lib/test/test_contextlib.py > ============================================================================== > --- python/trunk/Lib/test/test_contextlib.py (original) > +++ python/trunk/Lib/test/test_contextlib.py Tue May 2 21:47:52 2006 > @@ -341,12 +339,12 @@ > orig_context = ctx.copy() > try: > ctx.prec = save_prec = decimal.ExtendedContext.prec + 5 > - with decimal.ExtendedContext: > + with decimal.ExtendedContext.context_manager(): > self.assertEqual(decimal.getcontext().prec, > decimal.ExtendedContext.prec) > self.assertEqual(decimal.getcontext().prec, save_prec) > try: > - with decimal.ExtendedContext: > + with decimal.ExtendedContext.context_manager(): > self.assertEqual(decimal.getcontext().prec, > decimal.ExtendedContext.prec) > 1/0 > From python-checkins at python.org Wed May 3 09:45:57 2006 From: python-checkins at python.org (richard.tew) Date: Wed, 3 May 2006 09:45:57 +0200 (CEST) Subject: [Python-checkins] r45883 - stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Message-ID: <20060503074557.C4AB51E4005@bag.python.org> Author: richard.tew Date: Wed May 3 09:45:56 2006 New Revision: 45883 Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Log: Fixed the MASM __return definition. I am adapting this #ifdef block for the arm assembler slp_switch I am writing, and noticed that the two statements in the __return define were not enclosed in a block, so polluted where they were expanded so the code would always return after that point. Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c (original) +++ stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Wed May 3 09:45:56 2006 @@ -47,7 +47,7 @@ #define STACK_MAGIC 0 #undef __return -#define __return(x) exitcode = x; goto exit; +#define __return(x) { exitcode = x; goto exit; } int slp_save_state(intptr_t *stack){ int exitcode; From python-checkins at python.org Wed May 3 11:41:55 2006 From: python-checkins at python.org (nick.coghlan) Date: Wed, 3 May 2006 11:41:55 +0200 (CEST) Subject: [Python-checkins] r45884 - peps/trunk/pep-0343.txt Message-ID: <20060503094155.730071E400B@bag.python.org> Author: nick.coghlan Date: Wed May 3 11:41:53 2006 New Revision: 45884 Modified: peps/trunk/pep-0343.txt Log: Address some comments from Guido by cutting back on the overengineering in the terminology section. Also a few minor grammar cleanups and fixes I missed last night. Modified: peps/trunk/pep-0343.txt ============================================================================== --- peps/trunk/pep-0343.txt (original) +++ peps/trunk/pep-0343.txt Wed May 3 11:41:53 2006 @@ -15,8 +15,8 @@ it possible to factor out standard uses of try/finally statements. In this PEP, context managers provide __enter__() and __exit__() - methods that are invoked on entry to and exit from the managed - context that forms the body of the with statement. + methods that are invoked on entry to and exit from the body of the + with statement. Author's Note @@ -50,8 +50,8 @@ [2] and universally approved of. I'm also changing the keyword to 'with'. - Following acceptance of this PEP, the following PEPs have been - rejected due to overlap: + After acceptance of this PEP, the following PEPs were rejected due + to overlap: - PEP 310, Reliable Acquisition/Release Pairs. This is the original with-statement proposal. @@ -469,37 +469,29 @@ and that objects that implement that protocol be known as "context managers". [4] - The code in the body of the with statement is a "managed context". - This term refers primarily to the code location, rather than to the - runtime environment established by the context manager. - The expression immediately following the with keyword in the statement is a "context expression" as that expression provides the main clue as to the runtime environment the context manager - establishes for the duration of the managed context. + establishes for the duration of the statement body. - The value assigned to the target list after the as keyword is the - "context entry value", as that value is returned as the result of - entering the context. - - These terms are based on the idea that the context expression - provides a context manager to appropriately handle entry into the - managed context. The context manager may also provide a meaningful - context entry value and perform clean up operations on exit from - the managed context. - - The general term "context" is unfortunately ambiguous. If necessary, - it can be made more explicit by using the terms "context manager" - for the concrete object created by the context expression, - "managed context" for the code in the body of the with statement, - and "runtime context" or (preferebly) "runtime environment" for the - actual state modifications made by the context manager. When solely - discussing use of the with statement, the distinction between these - shouldn't matter too much as the context manager fully defines the - changes made to the runtime environment, and those changes apply for - the duration of the managed context. The distinction is more - important when discussing the process of implementing context - managers and the mechanics of the with statement itself. + The code in the body of the with statement and the variable name + (or names) after the as keyword don't really have special terms at + this point in time. The general terms "statement body" and "target + list" can be used, prefixing with "with" or "with statement" if the + terms would otherwise be unclear. + + Given the existence of objects such as the decimal module's + arithmetic context, a term "context" is unfortunately ambiguous. + If necessary, it can be made more specific by using the terms + "context manager" for the concrete object created by the context + expression and "runtime context" or (preferably) "runtime + environment" for the actual state modifications made by the context + manager. When simply discussing use of the with statement, the + ambiguity shouldn't matter too much as the context expression fully + defines the changes made to the runtime environment. + The distinction is more important when discussing the mechanics of + the with statement itself and how to go about actually implementing + context managers. Caching Context Managers @@ -531,7 +523,7 @@ 1. Greg Ewing raised the question of whether or not the term "context manager" was too generic and suggested "context guard" - as an alternative name. + as an alternative name. [16] 2. In Python 2.5a2, the decorator in contextlib to create a context manager from a generator function is called @@ -594,9 +586,9 @@ Examples The generator based examples rely on PEP 342. Also, some of the - examples are likely to be unnecessary in practice, as the - appropriate objects, such as threading.RLock, will be able to be - used directly in with statements. + examples are unnecessary in practice, as the appropriate objects, + such as threading.RLock, are able to be used directly in with + statements. The tense used in the names of the example contexts is not arbitrary. Past tense ("-ed") is used when the name refers to an @@ -755,9 +747,8 @@ # so this must be outside the with-statement: return +s - 9. Here's a proposed context manager for the decimal module: + 9. Here's a simple context manager for the decimal module: - # This would be a new decimal.Context method @contextmanager def localcontext(ctx=None): """Set a new local decimal context for the block""" @@ -906,7 +897,7 @@ This PEP was first accepted by Guido at his EuroPython keynote, 27 June 2005. It was accepted again later, with the __context__ method added. - The PEP was implemented in subversion for Python 2.5a1 + The PEP was implemented in Subversion for Python 2.5a1 The __context__() method will be removed in Python 2.5a3 @@ -970,7 +961,7 @@ [15] Guido kills the __context__() method http://mail.python.org/pipermail/python-dev/2006-April/064632.html - [16] Greg propose 'context guard' instead of 'context manager' + [16] Proposal to use 'context guard' instead of 'context manager' http://mail.python.org/pipermail/python-dev/2006-May/064676.html Copyright From python-checkins at python.org Wed May 3 13:55:31 2006 From: python-checkins at python.org (richard.tew) Date: Wed, 3 May 2006 13:55:31 +0200 (CEST) Subject: [Python-checkins] r45885 - in stackless/Python-2.4.3/dev/Stackless: core/slp_transfer.c platf/slp_platformselect.h platf/switch_arm_thumb_gas.s platf/switch_arm_thumb_gcc.h platf/switch_x64_msvc.h Message-ID: <20060503115531.C4A3F1E400B@bag.python.org> Author: richard.tew Date: Wed May 3 13:55:27 2006 New Revision: 45885 Added: stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gas.s (contents, props changed) stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gcc.h (contents, props changed) Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c stackless/Python-2.4.3/dev/Stackless/platf/slp_platformselect.h stackless/Python-2.4.3/dev/Stackless/platf/switch_x64_msvc.h Log: There were CCP x64/masm specific changes to slp_transfer.c which exposed wrapped versions of the SLP_SAVE_STATE and SLP_RESTORE_STATE macros for the masm assembler version of slp_switch to call. They are now no longer masm specific, and should work for other platform's which have assembler versions of slp_switch (like the arm thumb version which is also added in this change). Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c (original) +++ stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Wed May 3 13:55:27 2006 @@ -41,11 +41,24 @@ slp_cstack_restore(_cst); \ } -// #define USE_MASM // CCP addition, define to use masm code -#ifdef USE_MASM -//ccp addition: make these functions, to be called from assembler -#define STACK_MAGIC 0 +/* This define is no longer needed now? */ +#define SLP_EVAL +#include "platf/slp_platformselect.h" +#ifdef EXTERNAL_ASM +/* CCP addition: Make these functions, to be called from assembler. + * The token include file for the given platform should enable the + * EXTERNAL_ASM define so that this is included. + */ + +/* There are two cases where slp_save_state would return 0, the + * first where there is no difference in where the stack pointer + * should be from where it is now. And the second where + * SLP_SAVE_STATE returns without restoring because we are only + * here to save. The assembler routine needs to differentiate + * between these, which is why we override the returns and flag + * the low bit of the return value on early exit. + */ #undef __return #define __return(x) { exitcode = x; goto exit; } @@ -65,11 +78,6 @@ extern int slp_switch(void); -#else - -#define SLP_EVAL -#include "platf/slp_platformselect.h" - #endif static int Modified: stackless/Python-2.4.3/dev/Stackless/platf/slp_platformselect.h ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/platf/slp_platformselect.h (original) +++ stackless/Python-2.4.3/dev/Stackless/platf/slp_platformselect.h Wed May 3 13:55:27 2006 @@ -20,6 +20,8 @@ #include "switch_s390_unix.h" /* Linux/S390 */ #elif defined(__GNUC__) && defined(__s390x__) && defined(__linux__) #include "switch_s390_unix.h" /* Linux/S390 zSeries (identical) */ +#elif defined(__GNUC__) && defined(__arm__) && defined(__thumb__) +#include "switch_arm_thumb_gcc.h" /* gcc using arm thumb */ #endif /* default definitions if not defined in above files */ Added: stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gas.s ============================================================================== --- (empty file) +++ stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gas.s Wed May 3 13:55:27 2006 @@ -0,0 +1,70 @@ +@ The stack switching logic for the arm thumb instruction set. +@ Written by Richard Tew, 2nd May 2006. +@ +@ It is not possible to do this as inline assembler as gcc generates functions +@ where the stack register is preserved, so any changes we make to it will be +@ discarded. However, any stack copying we have done is left in place, which +@ results in corrupt state. +@ +@ This adapts the MASM approach written by Kristjan Jonsson, where early +@ returns from SLP_SAVE_STATE (within slp_save_state) are flagged by setting +@ the low bit of the return value. This either indicates that there was an +@ error (-1) or that we do not need to restore the stack (1) as we are only +@ here to save the current one. +@ +@ I know little arm thumb assembly, so in case anyone else wants to know the +@ approach I took, I will document it here. The first uncertainty was which +@ registers should be saved. I took this section of code from the assembler +@ generated by gcc with a command line of: +@ gcc -mthumb -S slp_transfer.c +@ where slp_transfer included the inline version of slp_switch for the arm +@ thumb. Another initial uncertainty were the instructions needed to: +@ a) obtain the stack pointer. (mov r0, sp) +@ b) restore the stack pointer. (add sp, sp, r0) +@ which were used in the original inlined assembly. The rest of the code was +@ just patched together based on Kristjan's existing masm source code. + +@ (int) slp_switch (void); + .thumb + .align 2 + .global slp_switch + .type slp_switch, %function @ Apparently useful for .map files. + .thumb_func + +slp_switch: + push {r4, r5, r6, r7, lr} + mov r7, fp + mov r6, sl + mov r5, r9 + mov r4, r8 + push {r4, r5, r6, r7} + + mov r0, sp + bl slp_save_state @ diff = slp_save_state([r0]stackref) + + mov r1, #0 @ r1 = -1 + mvn r1, r1 + + cmp r0, r1 @ if (diff == -1) + beq .exit @ return -1; + + cmp r0, #1 @ if (diff == 1) + beq .no_restore @ return 0; + +.restore: + add sp, sp, r0 @ Adjust the stack pointer for the state we are restoring. + + bl slp_restore_state @ slp_restore_state() + +.no_restore: + mov r0, #0 @ Switch successful (whether we restored or not). + +.exit: + pop {r2, r3, r4, r5} + mov r8, r2 + mov r9, r3 + mov sl, r4 + mov fp, r5 + pop {r4, r5, r6, r7, pc} + + .size slp_switch, .-slp_switch @ Apparently useful for .map files. Added: stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gcc.h ============================================================================== --- (empty file) +++ stackless/Python-2.4.3/dev/Stackless/platf/switch_arm_thumb_gcc.h Wed May 3 13:55:27 2006 @@ -0,0 +1,10 @@ + +#define STACK_REFPLUS 1 +#define STACK_MAGIC 0 + +/* Use the generic support for an external assembly language slp_switch function. */ +#define EXTERNAL_ASM + +#ifdef SLP_EVAL +/* This always uses the external masm assembly file. */ +#endif Modified: stackless/Python-2.4.3/dev/Stackless/platf/switch_x64_msvc.h ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/platf/switch_x64_msvc.h (original) +++ stackless/Python-2.4.3/dev/Stackless/platf/switch_x64_msvc.h Wed May 3 13:55:27 2006 @@ -25,25 +25,13 @@ #define alloca _alloca #define STACK_REFPLUS 1 - -#ifdef SLP_EVAL - #define STACK_MAGIC 0 -extern int slp_switch(void); /* defined in masm assembler */ - -/* These two are called from the assembler module */ -SSIZE_T slp_save_state(intptr_t *ref) { - SSIZE_T diff; - SLP_SAVE_STATE(ref, diff); - return diff; -} - -void slp_restore_state(void) -{ - SLP_RESTORE_STATE(); -} +/* Use the generic support for an external assembly language slp_switch function. */ +#define EXTERNAL_ASM +#ifdef SLP_EVAL +/* This always uses the external masm assembly file. */ #endif /* @@ -62,6 +50,6 @@ int stackref; intptr_t stackbase = ((intptr_t)&stackref) & 0xfffff000; return (intptr_t)p >= stackbase && (intptr_t)p < stackbase + 0x00100000; -} +} #endif From python-checkins at python.org Wed May 3 14:58:00 2006 From: python-checkins at python.org (richard.tew) Date: Wed, 3 May 2006 14:58:00 +0200 (CEST) Subject: [Python-checkins] r45886 - stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Message-ID: <20060503125800.6C1B71E400B@bag.python.org> Author: richard.tew Date: Wed May 3 14:57:59 2006 New Revision: 45886 Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Log: The external asm code handling used SSIZE_T, which is Windows specific. Where this is not defined, int is used instead. Modified: stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c (original) +++ stackless/Python-2.4.3/dev/Stackless/core/slp_transfer.c Wed May 3 14:57:59 2006 @@ -64,7 +64,13 @@ int slp_save_state(intptr_t *stack){ int exitcode; +#ifdef SSIZE_T + /* Only on Windows apparently. */ SSIZE_T diff; +#else + /* Py_ssize_t when we port to 2.5? */ + int diff; +#endif SLP_SAVE_STATE(stack, diff); return diff; exit: From python-checkins at python.org Wed May 3 15:02:57 2006 From: python-checkins at python.org (nick.coghlan) Date: Wed, 3 May 2006 15:02:57 +0200 (CEST) Subject: [Python-checkins] r45887 - in python/trunk: Doc/lib/libcontextlib.tex Doc/lib/libstdtypes.tex Doc/ref/ref3.tex Doc/ref/ref7.tex Lib/contextlib.py Lib/decimal.py Lib/test/test_contextlib.py Lib/test/test_with.py Message-ID: <20060503130257.36FD91E400B@bag.python.org> Author: nick.coghlan Date: Wed May 3 15:02:47 2006 New Revision: 45887 Modified: python/trunk/Doc/lib/libcontextlib.tex python/trunk/Doc/lib/libstdtypes.tex python/trunk/Doc/ref/ref3.tex python/trunk/Doc/ref/ref7.tex python/trunk/Lib/contextlib.py python/trunk/Lib/decimal.py python/trunk/Lib/test/test_contextlib.py python/trunk/Lib/test/test_with.py Log: Finish bringing SVN into line with latest version of PEP 343 by getting rid of all remaining references to context objects that I could find. Without a __context__() method context objects no longer exist. Also get test_with working again, and adopt a suggestion from Neal for decimal.Context.get_manager() Modified: python/trunk/Doc/lib/libcontextlib.tex ============================================================================== --- python/trunk/Doc/lib/libcontextlib.tex (original) +++ python/trunk/Doc/lib/libcontextlib.tex Wed May 3 15:02:47 2006 @@ -11,19 +11,20 @@ Functions provided: -\begin{funcdesc}{context}{func} +\begin{funcdesc}{contextmanager}{func} This function is a decorator that can be used to define a factory function for \keyword{with} statement context objects, without needing to create a class or separate \method{__enter__()} and \method{__exit__()} methods. -A simple example: +A simple example (this is not recommended as a real way of +generating HTML!): \begin{verbatim} from __future__ import with_statement -from contextlib import contextfactory +from contextlib import contextmanager - at contextfactory + at contextmanager def tag(name): print "<%s>" % name yield @@ -56,7 +57,7 @@ the statement immediately following the \keyword{with} statement. \end{funcdesc} -\begin{funcdesc}{nested}{ctx1\optional{, ctx2\optional{, ...}}} +\begin{funcdesc}{nested}{mgr1\optional{, mgr2\optional{, ...}}} Combine multiple context managers into a single nested context manager. Code like this: @@ -78,12 +79,12 @@ \end{verbatim} Note that if the \method{__exit__()} method of one of the nested -context objects indicates an exception should be suppressed, no +context managers indicates an exception should be suppressed, no exception information will be passed to any remaining outer context objects. Similarly, if the \method{__exit__()} method of one of the -nested context objects raises an exception, any previous exception +nested context managers raises an exception, any previous exception state will be lost; the new exception will be passed to the -\method{__exit__()} methods of any remaining outer context objects. +\method{__exit__()} methods of any remaining outer context managers. In general, \method{__exit__()} methods should avoid raising exceptions, and in particular they should not re-raise a passed-in exception. @@ -91,13 +92,13 @@ \label{context-closing} \begin{funcdesc}{closing}{thing} -Return a context that closes \var{thing} upon completion of the -block. This is basically equivalent to: +Return a context manager that closes \var{thing} upon completion of +the block. This is basically equivalent to: \begin{verbatim} -from contextlib import contextfactory +from contextlib import contextmanager - at contextfactory + at contextmanager def closing(thing): try: yield thing Modified: python/trunk/Doc/lib/libstdtypes.tex ============================================================================== --- python/trunk/Doc/lib/libstdtypes.tex (original) +++ python/trunk/Doc/lib/libstdtypes.tex Wed May 3 15:02:47 2006 @@ -1753,67 +1753,50 @@ \end{memberdesc} -\subsection{Context Types \label{typecontext}} +\subsection{Context Manager Types \label{typecontextmanager}} \versionadded{2.5} -\index{with statement context protocol} +\index{context manager} \index{context management protocol} -\index{protocol!with statement context} \index{protocol!context management} Python's \keyword{with} statement supports the concept of a runtime context defined by a context manager. This is implemented using -three distinct methods; these are used to allow user-defined -classes to define a runtime context. +two separate methods that allow user-defined classes to define +a runtime context that is entered before the statement body is +executed and exited when the statement ends. -The \dfn{context management protocol} consists of a single -method that needs to be provided for a context manager object to +The \dfn{context management protocol} consists of a pair of +methods that need to be provided for a context manager object to define a runtime context: -\begin{methoddesc}[context manager]{__context__}{} - Return a with statement context object. The object is required to - support the with statement context protocol described below. If an - object supports different kinds of runtime context, additional - methods can be provided to specifically request context objects for - those kinds of runtime context. (An example of an object supporting - multiple kinds of context would be a synchronisation object which - supported both a locked context for normal thread synchronisation - and an unlocked context to temporarily release a held lock while - performing a potentially long running operation) -\end{methoddesc} - -The with statement context objects themselves are required to support the -following three methods, which together form the -\dfn{with statement context protocol}: - -\begin{methoddesc}[with statement context]{__context__}{} - Return the context object itself. This is required to allow both - context objects and context managers to be used in a \keyword{with} +\begin{methoddesc}[context manager]{__enter__}{} + Enter the runtime context and return either this object or another + object related to the runtime context. The value returned by this + method is bound to the identifier in the \keyword{as} clause of + \keyword{with} statements using this context manager. + + An example of a context manager that returns itself is a file object. + File objects return themselves from __enter__() to allow + \function{open()} to be used as the context expression in a with statement. -\end{methoddesc} -\begin{methoddesc}[with statement context]{__enter__}{} - Enter the runtime context and return either the defining context - manager or another object related to the runtime context. The value - returned by this method is bound to the identifier in the - \keyword{as} clause of \keyword{with} statements using this context. - (An example of a context object that returns the original context - manager is file objects, which are returned from __enter__() to - allow \function{open()} to be used directly in a with - statement. An example of a context object that returns a related - object is \code{decimal.Context} which sets the active decimal - context to a copy of the context manager and then returns the copy. - This allows changes to be made to the current decimal context in the - body of the \keyword{with} statement without affecting code outside - the \keyword{with} statement). + An example of a context manager that returns a related + object is the one returned by \code{decimal.Context.get_manager()}. + These managers set the active decimal context to a copy of the + original decimal context and then return the copy. This allows + changes to be made to the current decimal context in the body of + the \keyword{with} statement without affecting code outside + the \keyword{with} statement. \end{methoddesc} -\begin{methoddesc}[with statement context]{__exit__}{exc_type, exc_val, exc_tb} +\begin{methoddesc}[context manager]{__exit__}{exc_type, exc_val, exc_tb} Exit the runtime context and return a Boolean flag indicating if any expection that occurred should be suppressed. If an exception occurred while executing the body of the \keyword{with} statement, the arguments contain the exception type, value and traceback information. Otherwise, all three arguments are \var{None}. + Returning a true value from this method will cause the \keyword{with} statement to suppress the exception and continue execution with the statement immediately following the \keyword{with} statement. Otherwise @@ -1821,6 +1804,7 @@ executing. Exceptions that occur during execution of this method will replace any exception that occurred in the body of the \keyword{with} statement. + The exception passed in should never be reraised explicitly - instead, this method should return a false value to indicate that the method completed successfully and does not want to suppress the raised @@ -1829,20 +1813,18 @@ \method{__exit__()} method has actually failed. \end{methoddesc} -Python defines several context objects and managers to support -easy thread synchronisation, prompt closure of files or other -objects, and thread-safe manipulation of the decimal arithmetic -context. The specific types are not important beyond their -implementation of the context management and with statement context -protocols. +Python defines several context managers to support easy thread +synchronisation, prompt closure of files or other objects, and +simpler manipulation of the active decimal arithmetic +context. The specific types are not treated specially beyond +their implementation of the context management protocol. Python's generators and the \code{contextlib.contextfactory} decorator -provide a convenient way to implement these protocols. If a context -manager's \method{__context__()} method is implemented as a -generator decorated with the \code{contextlib.contextfactory} -decorator, it will automatically return a with statement context -object supplying the necessary \method{__context__()}, -\method{__enter__()} and \method{__exit__()} methods. +provide a convenient way to implement these protocols. If a generator +function is decorated with the \code{contextlib.contextfactory} +decorator, it will return a context manager implementing the necessary +\method{__enter__()} and \method{__exit__()} methods, rather than the +iterator produced by an undecorated generator function. Note that there is no specific slot for any of these methods in the type structure for Python objects in the Python/C API. Extension Modified: python/trunk/Doc/ref/ref3.tex ============================================================================== --- python/trunk/Doc/ref/ref3.tex (original) +++ python/trunk/Doc/ref/ref3.tex Wed May 3 15:02:47 2006 @@ -2112,14 +2112,13 @@ \end{itemize} -\subsection{With Statement Contexts and Context Managers\label{context-managers}} +\subsection{With Statement Context Managers\label{context-managers}} \versionadded{2.5} A \dfn{context manager} is an object that defines the runtime context to be established when executing a \keyword{with} -statement. The context manager provides a -\dfn{with statement context object} which manages the entry into, +statement. The context manager handles the entry into, and the exit from, the desired runtime context for the execution of the block of code. Context managers are normally invoked using the \keyword{with} statement (described in section~\ref{with}), but @@ -2127,18 +2126,16 @@ \stindex{with} \index{context manager} -\index{context (with statement)} -\index{with statement context} -Typical uses of context managers and contexts include saving and +Typical uses of context managers include saving and restoring various kinds of global state, locking and unlocking resources, closing opened files, etc. -For more information on context managers and context objects, -see ``\ulink{Context Types}{../lib/typecontext.html}'' in the +For more information on context managers, see +``\ulink{Context Types}{../lib/typecontextmanager.html}'' in the \citetitle[../lib/lib.html]{Python Library Reference}. -\begin{methoddesc}[with statement context]{__enter__}{self} +\begin{methoddesc}[context manager]{__enter__}{self} Enter the runtime context related to this object. The \keyword{with} statement will bind this method's return value to the target(s) specified in the \keyword{as} clause of the statement, if any. Modified: python/trunk/Doc/ref/ref7.tex ============================================================================== --- python/trunk/Doc/ref/ref7.tex (original) +++ python/trunk/Doc/ref/ref7.tex Wed May 3 15:02:47 2006 @@ -315,8 +315,8 @@ \versionadded{2.5} The \keyword{with} statement is used to wrap the execution of a block -with methods defined by a context manager or \keyword{with} statement context -object (see section~\ref{context-managers}). This allows common +with methods defined by a context manager (see +section~\ref{context-managers}). This allows common \keyword{try}...\keyword{except}...\keyword{finally} usage patterns to be encapsulated for convenient reuse. Modified: python/trunk/Lib/contextlib.py ============================================================================== --- python/trunk/Lib/contextlib.py (original) +++ python/trunk/Lib/contextlib.py Wed May 3 15:02:47 2006 @@ -2,10 +2,10 @@ import sys -__all__ = ["contextfactory", "nested", "closing"] +__all__ = ["contextmanager", "nested", "closing"] -class GeneratorContext(object): - """Helper for @contextfactory decorator.""" +class GeneratorContextManager(object): + """Helper for @contextmanager decorator.""" def __init__(self, gen): self.gen = gen @@ -45,12 +45,12 @@ raise -def contextfactory(func): - """@contextfactory decorator. +def contextmanager(func): + """@contextmanager decorator. Typical usage: - @contextfactory + @contextmanager def some_generator(): try: @@ -74,7 +74,7 @@ """ def helper(*args, **kwds): - return GeneratorContext(func(*args, **kwds)) + return GeneratorContextManager(func(*args, **kwds)) try: helper.__name__ = func.__name__ helper.__doc__ = func.__doc__ @@ -84,7 +84,7 @@ return helper - at contextfactory + at contextmanager def nested(*managers): """Support multiple context managers in a single with-statement. Modified: python/trunk/Lib/decimal.py ============================================================================== --- python/trunk/Lib/decimal.py (original) +++ python/trunk/Lib/decimal.py Wed May 3 15:02:47 2006 @@ -2173,7 +2173,7 @@ del name, val, globalname, rounding_functions -class WithStatementContext(object): +class ContextManager(object): """Helper class to simplify Context management. Sample usage: @@ -2248,8 +2248,8 @@ s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']') return ', '.join(s) + ')' - def context_manager(self): - return WithStatementContext(self.copy()) + def get_manager(self): + return ContextManager(self.copy()) def clear_flags(self): """Reset all flags to zero""" Modified: python/trunk/Lib/test/test_contextlib.py ============================================================================== --- python/trunk/Lib/test/test_contextlib.py (original) +++ python/trunk/Lib/test/test_contextlib.py Wed May 3 15:02:47 2006 @@ -13,9 +13,9 @@ class ContextManagerTestCase(unittest.TestCase): - def test_contextfactory_plain(self): + def test_contextmanager_plain(self): state = [] - @contextfactory + @contextmanager def woohoo(): state.append(1) yield 42 @@ -26,9 +26,9 @@ state.append(x) self.assertEqual(state, [1, 42, 999]) - def test_contextfactory_finally(self): + def test_contextmanager_finally(self): state = [] - @contextfactory + @contextmanager def woohoo(): state.append(1) try: @@ -47,8 +47,8 @@ self.fail("Expected ZeroDivisionError") self.assertEqual(state, [1, 42, 999]) - def test_contextfactory_no_reraise(self): - @contextfactory + def test_contextmanager_no_reraise(self): + @contextmanager def whee(): yield ctx = whee() @@ -56,8 +56,8 @@ # Calling __exit__ should not result in an exception self.failIf(ctx.__exit__(TypeError, TypeError("foo"), None)) - def test_contextfactory_trap_yield_after_throw(self): - @contextfactory + def test_contextmanager_trap_yield_after_throw(self): + @contextmanager def whoo(): try: yield @@ -69,9 +69,9 @@ RuntimeError, ctx.__exit__, TypeError, TypeError("foo"), None ) - def test_contextfactory_except(self): + def test_contextmanager_except(self): state = [] - @contextfactory + @contextmanager def woohoo(): state.append(1) try: @@ -86,14 +86,14 @@ raise ZeroDivisionError(999) self.assertEqual(state, [1, 42, 999]) - def test_contextfactory_attribs(self): + def test_contextmanager_attribs(self): def attribs(**kw): def decorate(func): for k,v in kw.items(): setattr(func,k,v) return func return decorate - @contextfactory + @contextmanager @attribs(foo='bar') def baz(spam): """Whee!""" @@ -106,13 +106,13 @@ # XXX This needs more work def test_nested(self): - @contextfactory + @contextmanager def a(): yield 1 - @contextfactory + @contextmanager def b(): yield 2 - @contextfactory + @contextmanager def c(): yield 3 with nested(a(), b(), c()) as (x, y, z): @@ -122,14 +122,14 @@ def test_nested_cleanup(self): state = [] - @contextfactory + @contextmanager def a(): state.append(1) try: yield 2 finally: state.append(3) - @contextfactory + @contextmanager def b(): state.append(4) try: @@ -148,7 +148,7 @@ def test_nested_right_exception(self): state = [] - @contextfactory + @contextmanager def a(): yield 1 class b(object): @@ -170,10 +170,10 @@ self.fail("Didn't raise ZeroDivisionError") def test_nested_b_swallows(self): - @contextfactory + @contextmanager def a(): yield - @contextfactory + @contextmanager def b(): try: yield @@ -187,7 +187,7 @@ self.fail("Didn't swallow ZeroDivisionError") def test_nested_break(self): - @contextfactory + @contextmanager def a(): yield state = 0 @@ -199,7 +199,7 @@ self.assertEqual(state, 1) def test_nested_continue(self): - @contextfactory + @contextmanager def a(): yield state = 0 @@ -211,7 +211,7 @@ self.assertEqual(state, 3) def test_nested_return(self): - @contextfactory + @contextmanager def a(): try: yield @@ -339,12 +339,12 @@ orig_context = ctx.copy() try: ctx.prec = save_prec = decimal.ExtendedContext.prec + 5 - with decimal.ExtendedContext.context_manager(): + with decimal.ExtendedContext.get_manager(): self.assertEqual(decimal.getcontext().prec, decimal.ExtendedContext.prec) self.assertEqual(decimal.getcontext().prec, save_prec) try: - with decimal.ExtendedContext.context_manager(): + with decimal.ExtendedContext.get_manager(): self.assertEqual(decimal.getcontext().prec, decimal.ExtendedContext.prec) 1/0 Modified: python/trunk/Lib/test/test_with.py ============================================================================== --- python/trunk/Lib/test/test_with.py (original) +++ python/trunk/Lib/test/test_with.py Wed May 3 15:02:47 2006 @@ -10,25 +10,26 @@ import sys import unittest from collections import deque -from contextlib import GeneratorContext, contextfactory +from contextlib import GeneratorContextManager, contextmanager from test.test_support import run_unittest -class MockContextManager(GeneratorContext): +class MockContextManager(GeneratorContextManager): def __init__(self, gen): - GeneratorContext.__init__(self, gen) + GeneratorContextManager.__init__(self, gen) self.enter_called = False self.exit_called = False self.exit_args = None def __enter__(self): self.enter_called = True - return GeneratorContext.__enter__(self) + return GeneratorContextManager.__enter__(self) def __exit__(self, type, value, traceback): self.exit_called = True self.exit_args = (type, value, traceback) - return GeneratorContext.__exit__(self, type, value, traceback) + return GeneratorContextManager.__exit__(self, type, + value, traceback) def mock_contextmanager(func): @@ -439,7 +440,7 @@ self.assertAfterWithGeneratorInvariantsNoError(self.bar) def testRaisedStopIteration1(self): - @contextfactory + @contextmanager def cm(): yield @@ -463,7 +464,7 @@ self.assertRaises(StopIteration, shouldThrow) def testRaisedGeneratorExit1(self): - @contextfactory + @contextmanager def cm(): yield From python-checkins at python.org Wed May 3 15:17:50 2006 From: python-checkins at python.org (nick.coghlan) Date: Wed, 3 May 2006 15:17:50 +0200 (CEST) Subject: [Python-checkins] r45888 - python/trunk/Doc/lib/libcontextlib.tex python/trunk/Doc/lib/libstdtypes.tex Message-ID: <20060503131750.0CD471E4019@bag.python.org> Author: nick.coghlan Date: Wed May 3 15:17:49 2006 New Revision: 45888 Modified: python/trunk/Doc/lib/libcontextlib.tex python/trunk/Doc/lib/libstdtypes.tex Log: Get rid of a couple more context object references, fix some markup and clarify what happens when a generator context function swallows an exception. Modified: python/trunk/Doc/lib/libcontextlib.tex ============================================================================== --- python/trunk/Doc/lib/libcontextlib.tex (original) +++ python/trunk/Doc/lib/libcontextlib.tex Wed May 3 15:17:49 2006 @@ -13,7 +13,7 @@ \begin{funcdesc}{contextmanager}{func} This function is a decorator that can be used to define a factory -function for \keyword{with} statement context objects, without +function for \keyword{with} statement context managers, without needing to create a class or separate \method{__enter__()} and \method{__exit__()} methods. @@ -52,9 +52,10 @@ the error (if any), or ensure that some cleanup takes place. If an exception is trapped merely in order to log it or to perform some action (rather than to suppress it entirely), the generator must -reraise that exception. Otherwise the \keyword{with} statement will -treat the exception as having been handled, and resume execution with -the statement immediately following the \keyword{with} statement. +reraise that exception. Otherwise the generator context manager will +indicate to the \keyword{with} statement that the exception has been +handled, and execution will resume with the statement immediately +following the \keyword{with} statement. \end{funcdesc} \begin{funcdesc}{nested}{mgr1\optional{, mgr2\optional{, ...}}} @@ -81,9 +82,9 @@ Note that if the \method{__exit__()} method of one of the nested context managers indicates an exception should be suppressed, no exception information will be passed to any remaining outer context -objects. Similarly, if the \method{__exit__()} method of one of the -nested context managers raises an exception, any previous exception -state will be lost; the new exception will be passed to the +managers. Similarly, if the \method{__exit__()} method of one of the +nested managers raises an exception, any previous exception state will +be lost; the new exception will be passed to the \method{__exit__()} methods of any remaining outer context managers. In general, \method{__exit__()} methods should avoid raising exceptions, and in particular they should not re-raise a Modified: python/trunk/Doc/lib/libstdtypes.tex ============================================================================== --- python/trunk/Doc/lib/libstdtypes.tex (original) +++ python/trunk/Doc/lib/libstdtypes.tex Wed May 3 15:17:49 2006 @@ -1778,8 +1778,8 @@ An example of a context manager that returns itself is a file object. File objects return themselves from __enter__() to allow - \function{open()} to be used as the context expression in a with - statement. + \function{open()} to be used as the context expression in a + \keyword{with} statement. An example of a context manager that returns a related object is the one returned by \code{decimal.Context.get_manager()}. From buildbot at python.org Wed May 3 15:22:14 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 13:22:14 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060503132214.DA48D1E400B@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/359 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: nick.coghlan Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Wed May 3 15:51:43 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 13:51:43 +0000 Subject: [Python-checkins] buildbot warnings in ia64 Debian unstable trunk Message-ID: <20060503135143.D12491E400B@bag.python.org> The Buildbot has detected a new failure of ia64 Debian unstable trunk. Full details are available at: http://www.python.org/dev/buildbot/all/ia64%2520Debian%2520unstable%2520trunk/builds/347 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: nick.coghlan Build Had Warnings: warnings failed slave lost sincerely, -The Buildbot From buildbot at python.org Wed May 3 16:35:24 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 14:35:24 +0000 Subject: [Python-checkins] buildbot failure in x86 Ubuntu dapper (icc) trunk Message-ID: <20060503143524.AC8BF1E401C@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%2520trunk/builds/318 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: nick.coghlan BUILD FAILED: failed failed slave lost sincerely, -The Buildbot From python-checkins at python.org Wed May 3 19:46:14 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 19:46:14 +0200 (CEST) Subject: [Python-checkins] r45889 - python/trunk/Lib/webbrowser.py Message-ID: <20060503174614.58BEE1E4013@bag.python.org> Author: georg.brandl Date: Wed May 3 19:46:13 2006 New Revision: 45889 Modified: python/trunk/Lib/webbrowser.py Log: Add seamonkey to list of Windows browsers too. Modified: python/trunk/Lib/webbrowser.py ============================================================================== --- python/trunk/Lib/webbrowser.py (original) +++ python/trunk/Lib/webbrowser.py Wed May 3 19:46:13 2006 @@ -509,7 +509,8 @@ _tryorder = [] _browsers = {} # Prefer mozilla/netscape/opera if present - for browser in ("firefox", "firebird", "mozilla", "netscape", "opera"): + for browser in ("firefox", "firebird", "seamonkey", "mozilla", + "netscape", "opera"): if _iscommand(browser): register(browser, None, BackgroundBrowser(browser)) register("windows-default", WindowsDefault) From python-checkins at python.org Wed May 3 20:03:23 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 20:03:23 +0200 (CEST) Subject: [Python-checkins] r45890 - python/trunk/Lib/httplib.py Message-ID: <20060503180323.939D51E4013@bag.python.org> Author: georg.brandl Date: Wed May 3 20:03:22 2006 New Revision: 45890 Modified: python/trunk/Lib/httplib.py Log: RFE #1472176: In httplib, don't encode the netloc and hostname with "idna" if not necessary. Modified: python/trunk/Lib/httplib.py ============================================================================== --- python/trunk/Lib/httplib.py (original) +++ python/trunk/Lib/httplib.py Wed May 3 20:03:22 2006 @@ -796,11 +796,20 @@ nil, netloc, nil, nil, nil = urlsplit(url) if netloc: - self.putheader('Host', netloc.encode("idna")) - elif self.port == HTTP_PORT: - self.putheader('Host', self.host.encode("idna")) + try: + netloc_enc = netloc.encode("ascii") + except UnicodeEncodeError: + netloc_enc = netloc.encode("idna") + self.putheader('Host', netloc_enc) else: - self.putheader('Host', "%s:%s" % (self.host.encode("idna"), self.port)) + try: + host_enc = self.host.encode("ascii") + except UnicodeEncodeError: + host_enc = self.host.encode("idna") + if self.port == HTTP_PORT: + self.putheader('Host', host_enc) + else: + self.putheader('Host', "%s:%s" % (host_enc, self.port)) # note: we are assuming that clients will not attempt to set these # headers since *this* library must deal with the From python-checkins at python.org Wed May 3 20:12:34 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 20:12:34 +0200 (CEST) Subject: [Python-checkins] r45891 - python/trunk/Lib/pdb.py Message-ID: <20060503181234.2D8D71E400B@bag.python.org> Author: georg.brandl Date: Wed May 3 20:12:33 2006 New Revision: 45891 Modified: python/trunk/Lib/pdb.py Log: Bug #1472191: convert breakpoint indices to ints before comparing them to ints Modified: python/trunk/Lib/pdb.py ============================================================================== --- python/trunk/Lib/pdb.py (original) +++ python/trunk/Lib/pdb.py Wed May 3 20:12:33 2006 @@ -527,7 +527,7 @@ arg = arg[i+1:] try: lineno = int(arg) - except: + except ValueError: err = "Invalid line number (%s)" % arg else: err = self.clear_break(filename, lineno) @@ -535,6 +535,12 @@ return numberlist = arg.split() for i in numberlist: + try: + i = int(i) + except ValueError: + print 'Breakpoint index %r is not a number' % i + continue + if not (0 <= i < len(bdb.Breakpoint.bpbynumber)): print 'No breakpoint numbered', i continue From python-checkins at python.org Wed May 3 20:12:37 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 20:12:37 +0200 (CEST) Subject: [Python-checkins] r45892 - python/branches/release24-maint/Lib/pdb.py Message-ID: <20060503181237.01CE51E400B@bag.python.org> Author: georg.brandl Date: Wed May 3 20:12:36 2006 New Revision: 45892 Modified: python/branches/release24-maint/Lib/pdb.py Log: Bug #1472191: convert breakpoint indices to ints before comparing them to ints (backport from rev. 45891) Modified: python/branches/release24-maint/Lib/pdb.py ============================================================================== --- python/branches/release24-maint/Lib/pdb.py (original) +++ python/branches/release24-maint/Lib/pdb.py Wed May 3 20:12:36 2006 @@ -442,7 +442,7 @@ arg = arg[i+1:] try: lineno = int(arg) - except: + except ValueError: err = "Invalid line number (%s)" % arg else: err = self.clear_break(filename, lineno) @@ -450,6 +450,12 @@ return numberlist = arg.split() for i in numberlist: + try: + i = int(i) + except ValueError: + print 'Breakpoint index %r is not a number' % i + continue + if not (0 <= i < len(bdb.Breakpoint.bpbynumber)): print 'No breakpoint numbered', i continue From python-checkins at python.org Wed May 3 20:18:33 2006 From: python-checkins at python.org (georg.brandl) Date: Wed, 3 May 2006 20:18:33 +0200 (CEST) Subject: [Python-checkins] r45893 - in python/trunk: Lib/compiler/transformer.py Lib/test/test_compiler.py Misc/NEWS Message-ID: <20060503181833.0DF721E400B@bag.python.org> Author: georg.brandl Date: Wed May 3 20:18:32 2006 New Revision: 45893 Modified: python/trunk/Lib/compiler/transformer.py python/trunk/Lib/test/test_compiler.py python/trunk/Misc/NEWS Log: Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package. Modified: python/trunk/Lib/compiler/transformer.py ============================================================================== --- python/trunk/Lib/compiler/transformer.py (original) +++ python/trunk/Lib/compiler/transformer.py Wed May 3 20:18:32 2006 @@ -841,17 +841,15 @@ names.append(self.com_fpdef(node)) i = i + 1 - if i >= len(nodelist): - break - - if nodelist[i][0] == token.EQUAL: + if i < len(nodelist) and nodelist[i][0] == token.EQUAL: defaults.append(self.com_node(nodelist[i + 1])) i = i + 2 elif len(defaults): - # XXX This should be a syntax error. - # Treat "(a=1, b)" as "(a=1, b=None)" - defaults.append(Const(None)) + # we have already seen an argument with default, but here + # came one without + raise SyntaxError, "non-default argument follows default argument" + # skip the comma i = i + 1 return names, defaults, flags Modified: python/trunk/Lib/test/test_compiler.py ============================================================================== --- python/trunk/Lib/test/test_compiler.py (original) +++ python/trunk/Lib/test/test_compiler.py Wed May 3 20:18:32 2006 @@ -56,6 +56,9 @@ def testYieldExpr(self): compiler.compile("def g(): yield\n\n", "", "exec") + def testDefaultArgs(self): + self.assertRaises(SyntaxError, compiler.parse, "def foo(a=1, b): pass") + def testLineNo(self): # Test that all nodes except Module have a correct lineno attribute. filename = __file__ Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed May 3 20:18:32 2006 @@ -91,6 +91,9 @@ Library ------- +- Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler + package. + - Patch #1472854: make the rlcompleter.Completer class usable on non- UNIX platforms. From buildbot at python.org Wed May 3 20:33:36 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 18:33:36 +0000 Subject: [Python-checkins] buildbot warnings in x86 W2k trunk Message-ID: <20060503183336.ABC831E400B@bag.python.org> The Buildbot has detected a new failure of x86 W2k trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520W2k%2520trunk/builds/641 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: georg.brandl Build Had Warnings: warnings failed slave lost sincerely, -The Buildbot From python-checkins at python.org Wed May 3 20:35:39 2006 From: python-checkins at python.org (thomas.heller) Date: Wed, 3 May 2006 20:35:39 +0200 (CEST) Subject: [Python-checkins] r45894 - python/trunk/Lib/ctypes/test/test_find.py Message-ID: <20060503183539.E3C391E4050@bag.python.org> Author: thomas.heller Date: Wed May 3 20:35:39 2006 New Revision: 45894 Modified: python/trunk/Lib/ctypes/test/test_find.py Log: Don't fail the tests when libglut.so or libgle.so cannot be loaded. Modified: python/trunk/Lib/ctypes/test/test_find.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_find.py (original) +++ python/trunk/Lib/ctypes/test/test_find.py Wed May 3 20:35:39 2006 @@ -39,9 +39,23 @@ if lib_glu: self.glu = CDLL(lib_glu, RTLD_GLOBAL) if lib_glut: - self.glut = CDLL(lib_glut) + # On some systems, additional libraries seem to be + # required, loading glut fails with + # "OSError: /usr/lib/libglut.so.3: undefined symbol: XGetExtensionVersion" + # I cannot figure out how to repair the test on these + # systems (red hat), so we ignore it when the glut or gle + # libraries cannot be loaded. See also: + # https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1478253&group_id=5470 + # http://mail.python.org/pipermail/python-dev/2006-May/064789.html + try: + self.glut = CDLL(lib_glut) + except OSError: + pass if lib_gle: - self.gle = CDLL(lib_gle) + try: + self.gle = CDLL(lib_gle) + except OSError: + pass if lib_gl: def test_gl(self): From buildbot at python.org Wed May 3 20:54:51 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 18:54:51 +0000 Subject: [Python-checkins] buildbot failure in x86 cygwin trunk Message-ID: <20060503185451.EC4951E4012@bag.python.org> The Buildbot has detected a new failure of x86 cygwin trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520cygwin%2520trunk/builds/358 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: georg.brandl,thomas.heller BUILD FAILED: failed svn sincerely, -The Buildbot From buildbot at python.org Wed May 3 21:15:34 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 19:15:34 +0000 Subject: [Python-checkins] buildbot warnings in x86 Ubuntu dapper (icc) trunk Message-ID: <20060503191534.4567A1E400B@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%2520trunk/builds/319 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Wed May 3 22:20:02 2006 From: buildbot at python.org (buildbot at python.org) Date: Wed, 03 May 2006 20:20:02 +0000 Subject: [Python-checkins] buildbot warnings in x86 Ubuntu dapper (icc) 2.4 Message-ID: <20060503202003.0395D1E400B@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%25202.4/builds/55 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From neal at metaslash.com Wed May 3 22:12:22 2006 From: neal at metaslash.com (Neal Norwitz) Date: Wed, 3 May 2006 16:12:22 -0400 Subject: [Python-checkins] Python Regression Test Failures basics (1) Message-ID: <20060503201222.GA1399@python.psfb.org> case $MAKEFLAGS in \ *-s*) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py -q build;; \ *) CC='gcc -pthread' LDSHARED='gcc -pthread -shared' OPT='-g -Wall -Wstrict-prototypes' ./python -E ./setup.py build;; \ esac running build running build_ext db.h: found (4, 1) in /usr/include db lib: using (4, 1) db-4.1 sqlite: found /usr/include/sqlite3.h /usr/include/sqlite3.h: version 3.2.1 INFO: Can't locate Tcl/Tk libs and/or headers running build_scripts [33703 refs] ./python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform [8453 refs] find ./Lib -name '*.py[co]' -print | xargs rm -f ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test test_ctypes failed -- Traceback (most recent call last): File "/home/neal/python/trunk/Lib/ctypes/test/test_python_api.py", line 41, in test_PyInt_Long self.failUnlessEqual(grc(42), ref42) AssertionError: 336 != 337 test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8458 refs] [8458 refs] [8458 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8794 refs] [8794 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8669 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] this bit of output is from a test of stdout in a different process ... [8453 refs] [8453 refs] [8669 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8453 refs] [8453 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8453 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 284 tests OK. 1 test failed: test_ctypes 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [421533 refs] make: [test] Error 1 (ignored) ./python -E -tt ./Lib/test/regrtest.py -l test_grammar test_opcodes test_operations test_builtin test_exceptions test_types test_MimeWriter test_StringIO test___all__ test___future__ test__locale test_aepack test_aepack skipped -- No module named aepack test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named macostools test_array test_ast test_asynchat test_atexit test_audioop test_augassign test_base64 test_bastion test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_bufio test_bz2 test_cProfile test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd_line test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_colorsys test_commands test_compare test_compile test_compiler test_complex test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dict test_difflib test_dircache test_dis test_distutils test_dl test_doctest test_doctest2 test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_errno test_exception_variations test_extcall test_fcntl test_file test_filecmp test_fileinput test_float test_fnmatch test_fork1 test_format test_fpformat test_frozen test_funcattrs test_functional test_future test_gc test_gdbm test_generators test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hexoct test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_index test_inspect test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_largefile test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macfs test_macfs skipped -- No module named macfs test_macostools test_macostools skipped -- No module named macostools test_macpath test_mailbox test_marshal test_math test_md5 test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_multibytecodec test_multibytecodec_support test_multifile test_mutants test_netrc test_new test_nis test_nis skipped -- Local domain name not set test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser test_peepholer test_pep247 test_pep263 test_pep277 test_pep277 skipped -- test works only on NT+ test_pep292 test_pep352 test_pickle test_pickletools test_pkg test_pkgimport test_platform test_plistlib test_plistlib skipped -- No module named plistlib test_poll test_popen [8458 refs] [8458 refs] [8458 refs] test_popen2 test_posix test_posixpath test_pow test_pprint test_profile test_profilehooks test_pty test_pwd test_pyclbr test_pyexpat test_queue test_quopri [8794 refs] [8794 refs] test_random test_re test_repr test_resource test_rfc822 test_rgbimg test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_socket test_socket_ssl test_socket_ssl skipped -- Use of the `network' resource not enabled test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_startfile test_startfile skipped -- cannot import name startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_struct test_structseq test_subprocess [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8669 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] [8453 refs] this bit of output is from a test of stdout in a different process ... [8453 refs] [8453 refs] [8669 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [8453 refs] [8453 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_tempfile [8453 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tokenize test_trace test_traceback test_transformer test_tuple test_ucn test_unary test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_unittest test_univnewlines test_unpack test_urllib test_urllib2 test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xrange test_zipfile test_zipimport test_zlib 285 tests OK. 30 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_gl test_imgfile test_ioctl test_linuxaudiodev test_macfs test_macostools test_nis test_ossaudiodev test_pep277 test_plistlib test_scriptpackages test_socket_ssl test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound 1 skip unexpected on linux2: test_ioctl [420988 refs] From python-checkins at python.org Thu May 4 07:08:12 2006 From: python-checkins at python.org (georg.brandl) Date: Thu, 4 May 2006 07:08:12 +0200 (CEST) Subject: [Python-checkins] r45895 - python/trunk/Lib/imputil.py Message-ID: <20060504050812.03A751E4006@bag.python.org> Author: georg.brandl Date: Thu May 4 07:08:10 2006 New Revision: 45895 Modified: python/trunk/Lib/imputil.py Log: Bug #1481530: allow "from os.path import ..." with imputil Modified: python/trunk/Lib/imputil.py ============================================================================== --- python/trunk/Lib/imputil.py (original) +++ python/trunk/Lib/imputil.py Thu May 4 07:08:10 2006 @@ -131,9 +131,12 @@ if importer: return importer._finish_import(top_module, parts[1:], fromlist) - # Grrr, some people "import os.path" + # Grrr, some people "import os.path" or do "from os.path import ..." if len(parts) == 2 and hasattr(top_module, parts[1]): - return top_module + if fromlist: + return getattr(top_module, parts[1]) + else: + return top_module # If the importer does not exist, then we have to bail. A missing # importer means that something else imported the module, and we have From python-checkins at python.org Thu May 4 07:08:19 2006 From: python-checkins at python.org (georg.brandl) Date: Thu, 4 May 2006 07:08:19 +0200 (CEST) Subject: [Python-checkins] r45896 - python/branches/release24-maint/Lib/imputil.py Message-ID: <20060504050819.53A4B1E4006@bag.python.org> Author: georg.brandl Date: Thu May 4 07:08:19 2006 New Revision: 45896 Modified: python/branches/release24-maint/Lib/imputil.py Log: Bug #1481530: allow "from os.path import ..." with imputil (backport from rev. 45895) Modified: python/branches/release24-maint/Lib/imputil.py ============================================================================== --- python/branches/release24-maint/Lib/imputil.py (original) +++ python/branches/release24-maint/Lib/imputil.py Thu May 4 07:08:19 2006 @@ -131,9 +131,12 @@ if importer: return importer._finish_import(top_module, parts[1:], fromlist) - # Grrr, some people "import os.path" + # Grrr, some people "import os.path" or do "from os.path import ..." if len(parts) == 2 and hasattr(top_module, parts[1]): - return top_module + if fromlist: + return getattr(top_module, parts[1]) + else: + return top_module # If the importer does not exist, then we have to bail. A missing # importer means that something else imported the module, and we have From buildbot at python.org Thu May 4 07:38:03 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 05:38:03 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper 2.4 Message-ID: <20060504053803.E408C1E4006@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%25202.4/builds/51 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Thu May 4 07:41:41 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 05:41:41 +0000 Subject: [Python-checkins] buildbot warnings in x86 cygwin trunk Message-ID: <20060504054141.35C421E4006@bag.python.org> The Buildbot has detected a new failure of x86 cygwin trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520cygwin%2520trunk/builds/359 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Thu May 4 07:45:05 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 05:45:05 +0000 Subject: [Python-checkins] buildbot warnings in x86 OpenBSD 2.4 Message-ID: <20060504054505.410C21E4006@bag.python.org> The Buildbot has detected a new failure of x86 OpenBSD 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520OpenBSD%25202.4/builds/89 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Thu May 4 07:51:05 2006 From: python-checkins at python.org (martin.v.loewis) Date: Thu, 4 May 2006 07:51:05 +0200 (CEST) Subject: [Python-checkins] r45897 - in python/trunk: Lib/test/test_syntax.py Misc/NEWS Parser/parsetok.c Message-ID: <20060504055105.033A41E4006@bag.python.org> Author: martin.v.loewis Date: Thu May 4 07:51:03 2006 New Revision: 45897 Modified: python/trunk/Lib/test/test_syntax.py python/trunk/Misc/NEWS python/trunk/Parser/parsetok.c Log: Patch #1475845: Raise IndentationError for unexpected indent. Modified: python/trunk/Lib/test/test_syntax.py ============================================================================== --- python/trunk/Lib/test/test_syntax.py (original) +++ python/trunk/Lib/test/test_syntax.py Thu May 4 07:51:03 2006 @@ -243,15 +243,18 @@ class SyntaxTestCase(unittest.TestCase): def _check_error(self, code, errtext, - filename="", mode="exec"): + filename="", mode="exec", subclass=None): """Check that compiling code raises SyntaxError with errtext. errtest is a regular expression that must be present in the - test of the exception raised. + test of the exception raised. If subclass is specified it + is the expected subclass of SyntaxError (e.g. IndentationError). """ try: compile(code, filename, mode) except SyntaxError, err: + if subclass and not isinstance(err, subclass): + self.fail("SyntaxError is not a %s" % subclass.__name__) mo = re.search(errtext, str(err)) if mo is None: self.fail("SyntaxError did not contain '%r'" % (errtext,)) @@ -290,6 +293,19 @@ :""") self._check_error(source, "nested scope") + def test_unexpected_indent(self): + self._check_error("foo()\n bar()\n", "unexpected indent", + subclass=IndentationError) + + def test_no_indent(self): + self._check_error("if 1:\nfoo()", "expected an indented block", + subclass=IndentationError) + + def test_bad_outdent(self): + self._check_error("if 1:\n foo()\n bar()", + "unindent does not match .* level", + subclass=IndentationError) + def test_main(): test_support.run_unittest(SyntaxTestCase) from test import test_syntax Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu May 4 07:51:03 2006 @@ -12,6 +12,8 @@ Core and builtins ----------------- +- Patch #1475845: Raise IndentationError for unexpected indent. + - Patch #1479181: split open() and file() from being aliases for each other. - Bug #1465834: 'bdist_wininst preinstall script support' was fixed Modified: python/trunk/Parser/parsetok.c ============================================================================== --- python/trunk/Parser/parsetok.c (original) +++ python/trunk/Parser/parsetok.c Thu May 4 07:51:03 2006 @@ -194,8 +194,10 @@ if ((err_ret->error = PyParser_AddToken(ps, (int)type, str, tok->lineno, col_offset, &(err_ret->expected))) != E_OK) { - if (err_ret->error != E_DONE) + if (err_ret->error != E_DONE) { PyObject_FREE(str); + err_ret->token = type; + } break; } } From buildbot at python.org Thu May 4 07:56:16 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 05:56:16 +0000 Subject: [Python-checkins] buildbot failure in amd64 gentoo 2.4 Message-ID: <20060504055616.21C001E4006@bag.python.org> The Buildbot has detected a new failure of amd64 gentoo 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/amd64%2520gentoo%25202.4/builds/124 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: georg.brandl BUILD FAILED: failed failed slave lost sincerely, -The Buildbot From buildbot at python.org Thu May 4 08:44:57 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 06:44:57 +0000 Subject: [Python-checkins] buildbot warnings in x86 cygwin 2.4 Message-ID: <20060504064457.91FF51E4007@bag.python.org> The Buildbot has detected a new failure of x86 cygwin 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520cygwin%25202.4/builds/61 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: georg.brandl Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Thu May 4 12:08:44 2006 From: python-checkins at python.org (martin.v.loewis) Date: Thu, 4 May 2006 12:08:44 +0200 (CEST) Subject: [Python-checkins] r45898 - in python/trunk: Lib/test/test_os.py Lib/test/test_shutil.py Misc/NEWS Modules/posixmodule.c Message-ID: <20060504100844.5C1691E4007@bag.python.org> Author: martin.v.loewis Date: Thu May 4 12:08:42 2006 New Revision: 45898 Modified: python/trunk/Lib/test/test_os.py python/trunk/Lib/test/test_shutil.py python/trunk/Misc/NEWS python/trunk/Modules/posixmodule.c Log: Implement os.{chdir,rename,rmdir,remove} using Win32 directly. Modified: python/trunk/Lib/test/test_os.py ============================================================================== --- python/trunk/Lib/test/test_os.py (original) +++ python/trunk/Lib/test/test_os.py Thu May 4 12:08:42 2006 @@ -5,6 +5,7 @@ import os import unittest import warnings +import sys from test import test_support warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, __name__) @@ -364,6 +365,20 @@ except NotImplementedError: pass +class Win32ErrorTests(unittest.TestCase): + def test_rename(self): + self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") + + def test_remove(self): + self.assertRaises(WindowsError, os.remove, test_support.TESTFN) + + def test_chdir(self): + self.assertRaises(WindowsError, os.chdir, test_support.TESTFN) + +if sys.platform != 'win32': + class Win32ErrorTests(unittest.TestCase): + pass + def test_main(): test_support.run_unittest( TemporaryFileTests, @@ -372,7 +387,8 @@ WalkTests, MakedirTests, DevNullTests, - URandomTests + URandomTests, + Win32ErrorTests ) if __name__ == "__main__": Modified: python/trunk/Lib/test/test_shutil.py ============================================================================== --- python/trunk/Lib/test/test_shutil.py (original) +++ python/trunk/Lib/test/test_shutil.py Thu May 4 12:08:42 2006 @@ -48,12 +48,12 @@ if self.errorState == 0: self.assertEqual(func, os.remove) self.assertEqual(arg, self.childpath) - self.assertEqual(exc[0], OSError) + self.failUnless(issubclass(exc[0], OSError)) self.errorState = 1 else: self.assertEqual(func, os.rmdir) self.assertEqual(arg, TESTFN) - self.assertEqual(exc[0], OSError) + self.failUnless(issubclass(exc[0], OSError)) self.errorState = 2 def test_rmtree_dont_delete_file(self): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu May 4 12:08:42 2006 @@ -67,6 +67,9 @@ Extension Modules ----------------- +- Use Win32 API to implement os.{chdir,rename,rmdir,remove}. As a result, + these functions now raise WindowsError instead of OSError. + - Calling Tk_Init twice is refused if the first call failed as that may deadlock. Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Thu May 4 12:08:42 2006 @@ -458,21 +458,29 @@ static PyObject *_PyUnicode_FromFileSystemEncodedObject(register PyObject *obj) { - /* XXX Perhaps we should make this API an alias of - PyObject_Unicode() instead ?! */ - if (PyUnicode_CheckExact(obj)) { - Py_INCREF(obj); - return obj; - } - if (PyUnicode_Check(obj)) { +} + +/* Function suitable for O& conversion */ +static int +convert_to_unicode(PyObject *arg, void* _param) +{ + PyObject **param = (PyObject**)_param; + if (PyUnicode_CheckExact(arg)) { + Py_INCREF(arg); + *param = arg; + } + else if (PyUnicode_Check(arg)) { /* For a Unicode subtype that's not a Unicode object, return a true Unicode object with the same data. */ - return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(obj), - PyUnicode_GET_SIZE(obj)); + *param = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(arg), + PyUnicode_GET_SIZE(arg)); + return *param != NULL; } - return PyUnicode_FromEncodedObject(obj, - Py_FileSystemDefaultEncoding, - "strict"); + else + *param = PyUnicode_FromEncodedObject(arg, + Py_FileSystemDefaultEncoding, + "strict"); + return (*param) != NULL; } #endif /* Py_WIN_WIDE_FILENAMES */ @@ -589,35 +597,10 @@ #endif static PyObject * -posix_1str(PyObject *args, char *format, int (*func)(const char*), - char *wformat, int (*wfunc)(const Py_UNICODE*)) +posix_1str(PyObject *args, char *format, int (*func)(const char*)) { char *path1 = NULL; int res; -#ifdef Py_WIN_WIDE_FILENAMES - if (unicode_file_names()) { - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, wformat, &po)) { - Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread - lock as it is a simple dereference. */ - res = (*wfunc)(PyUnicode_AS_UNICODE(po)); - Py_END_ALLOW_THREADS - if (res < 0) - return posix_error_with_unicode_filename(PyUnicode_AS_UNICODE(po)); - Py_INCREF(Py_None); - return Py_None; - } - /* Drop the argument parsing error as narrow - strings are also valid. */ - PyErr_Clear(); - } -#else - /* Platforms that don't support Unicode filenames - shouldn't be passing these extra params */ - assert(wformat==NULL && wfunc == NULL); -#endif - if (!PyArg_ParseTuple(args, format, Py_FileSystemDefaultEncoding, &path1)) return NULL; @@ -634,52 +617,10 @@ static PyObject * posix_2str(PyObject *args, char *format, - int (*func)(const char *, const char *), - char *wformat, - int (*wfunc)(const Py_UNICODE *, const Py_UNICODE *)) + int (*func)(const char *, const char *)) { char *path1 = NULL, *path2 = NULL; int res; -#ifdef Py_WIN_WIDE_FILENAMES - if (unicode_file_names()) { - PyObject *po1; - PyObject *po2; - if (PyArg_ParseTuple(args, wformat, &po1, &po2)) { - if (PyUnicode_Check(po1) || PyUnicode_Check(po2)) { - PyObject *wpath1; - PyObject *wpath2; - wpath1 = _PyUnicode_FromFileSystemEncodedObject(po1); - wpath2 = _PyUnicode_FromFileSystemEncodedObject(po2); - if (!wpath1 || !wpath2) { - Py_XDECREF(wpath1); - Py_XDECREF(wpath2); - return NULL; - } - Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread - lock as it is a simple dereference. */ - res = (*wfunc)(PyUnicode_AS_UNICODE(wpath1), - PyUnicode_AS_UNICODE(wpath2)); - Py_END_ALLOW_THREADS - Py_XDECREF(wpath1); - Py_XDECREF(wpath2); - if (res != 0) - return posix_error(); - Py_INCREF(Py_None); - return Py_None; - } - /* Else flow through as neither is Unicode. */ - } - /* Drop the argument parsing error as narrow - strings are also valid. */ - PyErr_Clear(); - } -#else - /* Platforms that don't support Unicode filenames - shouldn't be passing these extra params */ - assert(wformat==NULL && wfunc == NULL); -#endif - if (!PyArg_ParseTuple(args, format, Py_FileSystemDefaultEncoding, &path1, Py_FileSystemDefaultEncoding, &path2)) @@ -696,6 +637,101 @@ return Py_None; } +#ifdef Py_WIN_WIDE_FILENAMES +static PyObject* +win32_1str(PyObject* args, char* func, + char* format, BOOL (__stdcall *funcA)(LPCSTR), + char* wformat, BOOL (__stdcall *funcW)(LPWSTR)) +{ + PyObject *uni; + char *ansi; + BOOL result; + if (unicode_file_names()) { + if (!PyArg_ParseTuple(args, wformat, &uni)) + PyErr_Clear(); + else { + Py_BEGIN_ALLOW_THREADS + result = funcW(PyUnicode_AsUnicode(uni)); + Py_END_ALLOW_THREADS + if (!result) + return win32_error_unicode(func, PyUnicode_AsUnicode(uni)); + Py_INCREF(Py_None); + return Py_None; + } + } + if (!PyArg_ParseTuple(args, format, &ansi)) + return NULL; + Py_BEGIN_ALLOW_THREADS + result = funcA(ansi); + Py_END_ALLOW_THREADS + if (!result) + return win32_error(func, ansi); + Py_INCREF(Py_None); + return Py_None; + +} + +/* This is a reimplementation of the C library's chdir function, + but one that produces Win32 errors instead of DOS error codes. + chdir is essentially a wrapper around SetCurrentDirectory; however, + it also needs to set "magic" environment variables indicating + the per-drive current directory, which are of the form =: */ +BOOL __stdcall +win32_chdir(LPCSTR path) +{ + char new_path[MAX_PATH+1]; + int result; + char env[4] = "=x:"; + + if(!SetCurrentDirectoryA(path)) + return FALSE; + result = GetCurrentDirectoryA(MAX_PATH+1, new_path); + if (!result) + return FALSE; + /* In the ANSI API, there should not be any paths longer + than MAX_PATH. */ + assert(result <= MAX_PATH+1); + if (strncmp(new_path, "\\\\", 2) == 0 || + strncmp(new_path, "//", 2) == 0) + /* UNC path, nothing to do. */ + return TRUE; + env[1] = new_path[0]; + return SetEnvironmentVariableA(env, new_path); +} + +/* The Unicode version differs from the ANSI version + since the current directory might exceed MAX_PATH characters */ +BOOL __stdcall +win32_wchdir(LPCWSTR path) +{ + wchar_t _new_path[MAX_PATH+1], *new_path = _new_path; + int result; + wchar_t env[4] = L"=x:"; + + if(!SetCurrentDirectoryW(path)) + return FALSE; + result = GetCurrentDirectoryW(MAX_PATH+1, new_path); + if (!result) + return FALSE; + if (result > MAX_PATH+1) { + new_path = malloc(result); + if (!new_path) { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + } + if (wcsncmp(new_path, L"\\\\", 2) == 0 || + wcsncmp(new_path, L"//", 2) == 0) + /* UNC path, nothing to do. */ + return TRUE; + env[1] = new_path[0]; + result = SetEnvironmentVariableW(env, new_path); + if (new_path != _new_path) + free(new_path); + return result; +} +#endif + #ifdef MS_WINDOWS /* The CRT of Windows has a number of flaws wrt. its stat() implementation: - time stamps are restricted to second resolution @@ -1410,14 +1446,13 @@ posix_chdir(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - return posix_1str(args, "et:chdir", chdir, "U:chdir", _wchdir); + return win32_1str(args, "chdir", "s:chdir", win32_chdir, "U:chdir", win32_wchdir); #elif defined(PYOS_OS2) && defined(PYCC_GCC) - return posix_1str(args, "et:chdir", _chdir2, NULL, NULL); + return posix_1str(args, "et:chdir", _chdir2); #elif defined(__VMS) - return posix_1str(args, "et:chdir", (int (*)(const char *))chdir, - NULL, NULL); + return posix_1str(args, "et:chdir", (int (*)(const char *))chdir); #else - return posix_1str(args, "et:chdir", chdir, NULL, NULL); + return posix_1str(args, "et:chdir", chdir); #endif } @@ -1485,7 +1520,7 @@ static PyObject * posix_chroot(PyObject *self, PyObject *args) { - return posix_1str(args, "et:chroot", chroot, NULL, NULL); + return posix_1str(args, "et:chroot", chroot); } #endif @@ -2071,7 +2106,6 @@ } #endif /* HAVE_NICE */ - PyDoc_STRVAR(posix_rename__doc__, "rename(old, new)\n\n\ Rename a file or directory."); @@ -2080,7 +2114,36 @@ posix_rename(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - return posix_2str(args, "etet:rename", rename, "OO:rename", _wrename); + PyObject *o1, *o2; + char *p1, *p2; + BOOL result; + if (unicode_file_names()) { + if (!PyArg_ParseTuple(args, "O&O&:rename", + convert_to_unicode, &o1, + convert_to_unicode, &o2)) + PyErr_Clear(); + else { + Py_BEGIN_ALLOW_THREADS + result = MoveFileW(PyUnicode_AsUnicode(o1), + PyUnicode_AsUnicode(o2)); + Py_END_ALLOW_THREADS + Py_DECREF(o1); + Py_DECREF(o2); + if (!result) + return win32_error("rename", NULL); + Py_INCREF(Py_None); + return Py_None; + } + } + if (!PyArg_ParseTuple(args, "ss:rename", &p1, &p2)) + return NULL; + Py_BEGIN_ALLOW_THREADS + result = MoveFileA(p1, p2); + Py_END_ALLOW_THREADS + if (!result) + return win32_error("rename", NULL); + Py_INCREF(Py_None); + return Py_None; #else return posix_2str(args, "etet:rename", rename, NULL, NULL); #endif @@ -2095,9 +2158,9 @@ posix_rmdir(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - return posix_1str(args, "et:rmdir", rmdir, "U:rmdir", _wrmdir); + return win32_1str(args, "rmdir", "s:rmdir", RemoveDirectoryA, "U:rmdir", RemoveDirectoryW); #else - return posix_1str(args, "et:rmdir", rmdir, NULL, NULL); + return posix_1str(args, "et:rmdir", rmdir); #endif } @@ -2166,9 +2229,9 @@ posix_unlink(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - return posix_1str(args, "et:remove", unlink, "U:remove", _wunlink); + return win32_1str(args, "remove", "s:remove", DeleteFileA, "U:remove", DeleteFileW); #else - return posix_1str(args, "et:remove", unlink, NULL, NULL); + return posix_1str(args, "et:remove", unlink); #endif } From buildbot at python.org Thu May 4 12:14:39 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:14:39 +0000 Subject: [Python-checkins] buildbot failure in ia64 Debian unstable trunk Message-ID: <20060504101439.228B21E4007@bag.python.org> The Buildbot has detected a new failure of ia64 Debian unstable trunk. Full details are available at: http://www.python.org/dev/buildbot/all/ia64%2520Debian%2520unstable%2520trunk/builds/351 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:14:43 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:14:43 +0000 Subject: [Python-checkins] buildbot failure in ppc Debian unstable trunk Message-ID: <20060504101443.B96451E4007@bag.python.org> The Buildbot has detected a new failure of ppc Debian unstable trunk. Full details are available at: http://www.python.org/dev/buildbot/all/ppc%2520Debian%2520unstable%2520trunk/builds/369 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:14:45 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:14:45 +0000 Subject: [Python-checkins] buildbot failure in x86 gentoo trunk Message-ID: <20060504101445.3D9BF1E4019@bag.python.org> The Buildbot has detected a new failure of x86 gentoo trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520gentoo%2520trunk/builds/710 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:15:09 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:15:09 +0000 Subject: [Python-checkins] buildbot failure in x86 OpenBSD trunk Message-ID: <20060504101509.305D81E4007@bag.python.org> The Buildbot has detected a new failure of x86 OpenBSD trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520OpenBSD%2520trunk/builds/543 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:15:14 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:15:14 +0000 Subject: [Python-checkins] buildbot failure in amd64 gentoo trunk Message-ID: <20060504101514.746C71E4007@bag.python.org> The Buildbot has detected a new failure of amd64 gentoo trunk. Full details are available at: http://www.python.org/dev/buildbot/all/amd64%2520gentoo%2520trunk/builds/729 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:15:48 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:15:48 +0000 Subject: [Python-checkins] buildbot failure in g4 osx.4 trunk Message-ID: <20060504101548.BD08C1E4007@bag.python.org> The Buildbot has detected a new failure of g4 osx.4 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/g4%2520osx.4%2520trunk/builds/630 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:16:05 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:16:05 +0000 Subject: [Python-checkins] buildbot failure in alpha Debian trunk Message-ID: <20060504101605.E82651E4007@bag.python.org> The Buildbot has detected a new failure of alpha Debian trunk. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Debian%2520trunk/builds/84 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:16:19 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:16:19 +0000 Subject: [Python-checkins] buildbot failure in sparc solaris10 gcc trunk Message-ID: <20060504101619.713FB1E4007@bag.python.org> The Buildbot has detected a new failure of sparc solaris10 gcc trunk. Full details are available at: http://www.python.org/dev/buildbot/all/sparc%2520solaris10%2520gcc%2520trunk/builds/635 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:16:22 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:16:22 +0000 Subject: [Python-checkins] buildbot failure in hppa Ubuntu dapper trunk Message-ID: <20060504101622.B5C241E400B@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/364 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:16:37 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:16:37 +0000 Subject: [Python-checkins] buildbot failure in alpha Tru64 5.1 trunk Message-ID: <20060504101637.6232D1E4007@bag.python.org> The Buildbot has detected a new failure of alpha Tru64 5.1 trunk. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Tru64%25205.1%2520trunk/builds/425 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:20:16 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:20:16 +0000 Subject: [Python-checkins] buildbot failure in x86 cygwin trunk Message-ID: <20060504102016.807331E4007@bag.python.org> The Buildbot has detected a new failure of x86 cygwin trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520cygwin%2520trunk/builds/361 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:20:21 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:20:21 +0000 Subject: [Python-checkins] buildbot failure in x86 Ubuntu dapper (icc) trunk Message-ID: <20060504102021.2D2641E4007@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%2520trunk/builds/323 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis BUILD FAILED: failed compile sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:36:36 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:36:36 +0000 Subject: [Python-checkins] buildbot warnings in x86 W2k trunk Message-ID: <20060504103636.7DD171E4007@bag.python.org> The Buildbot has detected a new failure of x86 W2k trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520W2k%2520trunk/builds/646 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Thu May 4 12:43:19 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 10:43:19 +0000 Subject: [Python-checkins] buildbot warnings in x86 XP trunk Message-ID: <20060504104319.3AE2F1E4007@bag.python.org> The Buildbot has detected a new failure of x86 XP trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520XP%2520trunk/builds/655 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Thu May 4 14:04:28 2006 From: python-checkins at python.org (martin.v.loewis) Date: Thu, 4 May 2006 14:04:28 +0200 (CEST) Subject: [Python-checkins] r45899 - python/trunk/Modules/posixmodule.c Message-ID: <20060504120428.932661E4015@bag.python.org> Author: martin.v.loewis Date: Thu May 4 14:04:27 2006 New Revision: 45899 Modified: python/trunk/Modules/posixmodule.c Log: Drop now-unnecessary arguments to posix_2str. Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Thu May 4 14:04:27 2006 @@ -1679,7 +1679,7 @@ static PyObject * posix_link(PyObject *self, PyObject *args) { - return posix_2str(args, "etet:link", link, NULL, NULL); + return posix_2str(args, "etet:link", link); } #endif /* HAVE_LINK */ @@ -2145,7 +2145,7 @@ Py_INCREF(Py_None); return Py_None; #else - return posix_2str(args, "etet:rename", rename, NULL, NULL); + return posix_2str(args, "etet:rename", rename); #endif } @@ -5420,7 +5420,7 @@ static PyObject * posix_symlink(PyObject *self, PyObject *args) { - return posix_2str(args, "etet:symlink", symlink, NULL, NULL); + return posix_2str(args, "etet:symlink", symlink); } #endif /* HAVE_SYMLINK */ From buildbot at python.org Thu May 4 14:22:42 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 12:22:42 +0000 Subject: [Python-checkins] buildbot warnings in x86 cygwin trunk Message-ID: <20060504122242.2D6691E4007@bag.python.org> The Buildbot has detected a new failure of x86 cygwin trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520cygwin%2520trunk/builds/362 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Thu May 4 15:11:09 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 13:11:09 +0000 Subject: [Python-checkins] buildbot warnings in x86 Ubuntu dapper (icc) trunk Message-ID: <20060504131109.639161E4015@bag.python.org> The Buildbot has detected a new failure of x86 Ubuntu dapper (icc) trunk. Full details are available at: http://www.python.org/dev/buildbot/all/x86%2520Ubuntu%2520dapper%2520%2528icc%2529%2520trunk/builds/324 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Thu May 4 15:14:45 2006 From: buildbot at python.org (buildbot at python.org) Date: Thu, 04 May 2006 13:14:45 +0000 Subject: [Python-checkins] buildbot warnings in hppa Ubuntu dapper trunk Message-ID: <20060504131445.49C261E4002@bag.python.org> The Buildbot has detected a new failure of hppa Ubuntu dapper trunk. Full details are available at: http://www.python.org/dev/buildbot/all/hppa%2520Ubuntu%2520dapper%2520trunk/builds/365 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch trunk] HEAD Blamelist: martin.v.loewis Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Thu May 4 16:27:52 2006 From: python-checkins at python.org (martin.v.loewis) Date: Thu, 4 May 2006 16:27:52 +0200 (CEST) Subject: [Python-checkins] r45900 - python/trunk/Lib/mailbox.py Message-ID: <20060504142752.9D7CC1E4002@bag.python.org> Author: martin.v.loewis Date: Thu May 4 16:27:52 2006 New Revision: 45900 Modified: python/trunk/Lib/mailbox.py Log: Update checks to consider Windows error numbers. Modified: python/trunk/Lib/mailbox.py ============================================================================== --- python/trunk/Lib/mailbox.py (original) +++ python/trunk/Lib/mailbox.py Thu May 4 16:27:52 2006 @@ -2,6 +2,7 @@ """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" +import sys import os import time import calendar @@ -23,6 +24,11 @@ 'BabylMessage', 'MMDFMessage', 'UnixMailbox', 'PortableUnixMailbox', 'MmdfMailbox', 'MHMailbox', 'BabylMailbox' ] +if sys.platform != 'win32': + # Define WindowsError so that we can use it in an except statement + # even on non-Windows systems + class WindowsError: + pass class Mailbox: """A group of messages in a particular place.""" @@ -262,10 +268,11 @@ self.remove(key) except KeyError: pass + except WindowsError, e: + if e.errno != 2: # ERROR_FILE_NOT_FOUND + raise except OSError, e: - if e.errno == errno.ENOENT: - pass - else: + if e.errno != errno.ENOENT: raise def __setitem__(self, key, message): @@ -419,6 +426,12 @@ path = os.path.join(self._path, 'tmp', uniq) try: os.stat(path) + except WindowsError, e: + if e.errno == 2: # ERROR_FILE_NOT_FOUND + Maildir._count += 1 + return open(path, 'wb+') + else: + raise except OSError, e: if e.errno == errno.ENOENT: Maildir._count += 1 @@ -566,6 +579,12 @@ self._file.close() try: os.rename(new_file.name, self._path) + except WindowsError, e: + if e.errno == 183: # ERROR_ALREADY_EXISTS + os.remove(self._path) + os.rename(new_file.name, self._path) + else: + raise except OSError, e: if e.errno == errno.EEXIST: os.remove(self._path) @@ -1837,6 +1856,13 @@ else: os.rename(pre_lock.name, f.name + '.lock') dotlock_done = True + except WindowsError, e: + if e.errno == 183: # ERROR_ALREADY_EXISTS + os.remove(pre_lock.name) + raise ExternalClashError('dot lock unavailable: %s' % + f.name) + else: + raise except OSError, e: if e.errno == errno.EEXIST: os.remove(pre_lock.name) From python-checkins at python.org Thu May 4 18:52:46 2006 From: python-checkins at python.org (richard.tew) Date: Thu, 4 May 2006 18:52:46 +0200 (CEST) Subject: [Python-checkins] r45901 - stackless/Python-2.4.3/dev/Stackless/pickling/prickelpit.c Message-ID: <20060504165246.4BD7B1E4007@bag.python.org> Author: richard.tew Date: Thu May 4 18:52:45 2006 New Revision: 45901 Modified: stackless/Python-2.4.3/dev/Stackless/pickling/prickelpit.c Log: Fix for the failing Stackless unittest TestConcretePickledTasklets. The problem was the new dictionary iterator reduce functions I had written badly wrapped the sequence iterator (they used the iterator itself, rather than the wrapped stackless version). Modified: stackless/Python-2.4.3/dev/Stackless/pickling/prickelpit.c ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/pickling/prickelpit.c (original) +++ stackless/Python-2.4.3/dev/Stackless/pickling/prickelpit.c Thu May 4 18:52:45 2006 @@ -1415,11 +1415,11 @@ } } /* masquerade as a PySeqIter */ - tup = Py_BuildValue("(O(lO))", - &PySeqIter_Type, - 0, - list - ); + tup = Py_BuildValue("(O(Ol)())", + &wrap_PySeqIter_Type, + list, + 0 + ); Py_DECREF(list); return tup; } @@ -1455,11 +1455,11 @@ } } /* masquerade as a PySeqIter */ - tup = Py_BuildValue("(O(lO))", - &PySeqIter_Type, - 0, - list - ); + tup = Py_BuildValue("(O(Ol)())", + &wrap_PySeqIter_Type, + list, + 0 + ); Py_DECREF(list); return tup; } @@ -1502,60 +1502,15 @@ } } /* masquerade as a PySeqIter */ - tup = Py_BuildValue("(O(lO))", - &PySeqIter_Type, - 0, - list - ); + tup = Py_BuildValue("(O(Ol)())", + &wrap_PySeqIter_Type, + list, + 0 + ); Py_DECREF(list); return tup; } -#if 0 -static PyObject * -dictiter_reduce(dictiterobject *di) -{ - PyObject *tup, *list, *key, *value, *res; - int i; - - /* Make a list big enough to exhaust the dict */ - list = PyList_New(0); - if (list == NULL) - return PyErr_NoMemory(); - - /* is this dictiter is already exhausted? */ - if (di->di_dict != NULL) { - if (di->di_used != di->di_dict->ma_used) { - PyErr_SetString(PyExc_RuntimeError, - "dictionary changed size during iteration"); - di->di_used = -1; /* Make this state sticky */ - return NULL; - } - i = di->di_pos; - while (PyDict_Next((PyObject *)di->di_dict, &i, &key, - &value)) { - res = (*di->di_select)(key, value); - if (res == NULL) { - Py_DECREF(list); - return NULL; - } - if (PyList_Append(list, res) == -1) { - return NULL; - } - Py_DECREF(res); - } - } - /* masquerade as a PySeqIter */ - tup = Py_BuildValue("(O(Ol)())", - &wrap_PySeqIter_Type, - list, - 0 - ); - Py_DECREF(list); - return tup; -} -#endif - static PyTypeObject wrap_PyDictIterKey_Type; MAKE_WRAPPERTYPE(PyDictIterKey_Type, dictiterkey, "dictionary-keyiterator", From guido at python.org Thu May 4 19:00:04 2006 From: guido at python.org (Guido van Rossum) Date: Thu, 4 May 2006 10:00:04 -0700 Subject: [Python-checkins] r45898 - in python/trunk: Lib/test/test_os.py Lib/test/test_shutil.py Misc/NEWS Modules/posixmodule.c In-Reply-To: <20060504100844.5C1691E4007@bag.python.org> References: <20060504100844.5C1691E4007@bag.python.org> Message-ID: I wonder if it's time to move the Win32 code out of posixmodule.c? It seems the current mess of #ifdefs can't be very maintainable. On 5/4/06, martin.v.loewis wrote: > Author: martin.v.loewis > Date: Thu May 4 12:08:42 2006 > New Revision: 45898 > > Modified: > python/trunk/Lib/test/test_os.py > python/trunk/Lib/test/test_shutil.py > python/trunk/Misc/NEWS > python/trunk/Modules/posixmodule.c > Log: > Implement os.{chdir,rename,rmdir,remove} using Win32 directly. > > Modified: python/trunk/Lib/test/test_os.py > ============================================================================== > --- python/trunk/Lib/test/test_os.py (original) > +++ python/trunk/Lib/test/test_os.py Thu May 4 12:08:42 2006 > @@ -5,6 +5,7 @@ > import os > import unittest > import warnings > +import sys > from test import test_support > > warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, __name__) > @@ -364,6 +365,20 @@ > except NotImplementedError: > pass > > +class Win32ErrorTests(unittest.TestCase): > + def test_rename(self): > + self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") > + > + def test_remove(self): > + self.assertRaises(WindowsError, os.remove, test_support.TESTFN) > + > + def test_chdir(self): > + self.assertRaises(WindowsError, os.chdir, test_support.TESTFN) > + > +if sys.platform != 'win32': > + class Win32ErrorTests(unittest.TestCase): > + pass > + > def test_main(): > test_support.run_unittest( > TemporaryFileTests, > @@ -372,7 +387,8 @@ > WalkTests, > MakedirTests, > DevNullTests, > - URandomTests > + URandomTests, > + Win32ErrorTests > ) > > if __name__ == "__main__": > > Modified: python/trunk/Lib/test/test_shutil.py > ============================================================================== > --- python/trunk/Lib/test/test_shutil.py (original) > +++ python/trunk/Lib/test/test_shutil.py Thu May 4 12:08:42 2006 > @@ -48,12 +48,12 @@ > if self.errorState == 0: > self.assertEqual(func, os.remove) > self.assertEqual(arg, self.childpath) > - self.assertEqual(exc[0], OSError) > + self.failUnless(issubclass(exc[0], OSError)) > self.errorState = 1 > else: > self.assertEqual(func, os.rmdir) > self.assertEqual(arg, TESTFN) > - self.assertEqual(exc[0], OSError) > + self.failUnless(issubclass(exc[0], OSError)) > self.errorState = 2 > > def test_rmtree_dont_delete_file(self): > > Modified: python/trunk/Misc/NEWS > ============================================================================== > --- python/trunk/Misc/NEWS (original) > +++ python/trunk/Misc/NEWS Thu May 4 12:08:42 2006 > @@ -67,6 +67,9 @@ > Extension Modules > ----------------- > > +- Use Win32 API to implement os.{chdir,rename,rmdir,remove}. As a result, > + these functions now raise WindowsError instead of OSError. > + > - Calling Tk_Init twice is refused if the first call failed as that > may deadlock. > > > Modified: python/trunk/Modules/posixmodule.c > ============================================================================== > --- python/trunk/Modules/posixmodule.c (original) > +++ python/trunk/Modules/posixmodule.c Thu May 4 12:08:42 2006 > @@ -458,21 +458,29 @@ > > static PyObject *_PyUnicode_FromFileSystemEncodedObject(register PyObject *obj) > { > - /* XXX Perhaps we should make this API an alias of > - PyObject_Unicode() instead ?! */ > - if (PyUnicode_CheckExact(obj)) { > - Py_INCREF(obj); > - return obj; > - } > - if (PyUnicode_Check(obj)) { > +} > + > +/* Function suitable for O& conversion */ > +static int > +convert_to_unicode(PyObject *arg, void* _param) > +{ > + PyObject **param = (PyObject**)_param; > + if (PyUnicode_CheckExact(arg)) { > + Py_INCREF(arg); > + *param = arg; > + } > + else if (PyUnicode_Check(arg)) { > /* For a Unicode subtype that's not a Unicode object, > return a true Unicode object with the same data. */ > - return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(obj), > - PyUnicode_GET_SIZE(obj)); > + *param = PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(arg), > + PyUnicode_GET_SIZE(arg)); > + return *param != NULL; > } > - return PyUnicode_FromEncodedObject(obj, > - Py_FileSystemDefaultEncoding, > - "strict"); > + else > + *param = PyUnicode_FromEncodedObject(arg, > + Py_FileSystemDefaultEncoding, > + "strict"); > + return (*param) != NULL; > } > > #endif /* Py_WIN_WIDE_FILENAMES */ > @@ -589,35 +597,10 @@ > #endif > > static PyObject * > -posix_1str(PyObject *args, char *format, int (*func)(const char*), > - char *wformat, int (*wfunc)(const Py_UNICODE*)) > +posix_1str(PyObject *args, char *format, int (*func)(const char*)) > { > char *path1 = NULL; > int res; > -#ifdef Py_WIN_WIDE_FILENAMES > - if (unicode_file_names()) { > - PyUnicodeObject *po; > - if (PyArg_ParseTuple(args, wformat, &po)) { > - Py_BEGIN_ALLOW_THREADS > - /* PyUnicode_AS_UNICODE OK without thread > - lock as it is a simple dereference. */ > - res = (*wfunc)(PyUnicode_AS_UNICODE(po)); > - Py_END_ALLOW_THREADS > - if (res < 0) > - return posix_error_with_unicode_filename(PyUnicode_AS_UNICODE(po)); > - Py_INCREF(Py_None); > - return Py_None; > - } > - /* Drop the argument parsing error as narrow > - strings are also valid. */ > - PyErr_Clear(); > - } > -#else > - /* Platforms that don't support Unicode filenames > - shouldn't be passing these extra params */ > - assert(wformat==NULL && wfunc == NULL); > -#endif > - > if (!PyArg_ParseTuple(args, format, > Py_FileSystemDefaultEncoding, &path1)) > return NULL; > @@ -634,52 +617,10 @@ > static PyObject * > posix_2str(PyObject *args, > char *format, > - int (*func)(const char *, const char *), > - char *wformat, > - int (*wfunc)(const Py_UNICODE *, const Py_UNICODE *)) > + int (*func)(const char *, const char *)) > { > char *path1 = NULL, *path2 = NULL; > int res; > -#ifdef Py_WIN_WIDE_FILENAMES > - if (unicode_file_names()) { > - PyObject *po1; > - PyObject *po2; > - if (PyArg_ParseTuple(args, wformat, &po1, &po2)) { > - if (PyUnicode_Check(po1) || PyUnicode_Check(po2)) { > - PyObject *wpath1; > - PyObject *wpath2; > - wpath1 = _PyUnicode_FromFileSystemEncodedObject(po1); > - wpath2 = _PyUnicode_FromFileSystemEncodedObject(po2); > - if (!wpath1 || !wpath2) { > - Py_XDECREF(wpath1); > - Py_XDECREF(wpath2); > - return NULL; > - } > - Py_BEGIN_ALLOW_THREADS > - /* PyUnicode_AS_UNICODE OK without thread > - lock as it is a simple dereference. */ > - res = (*wfunc)(PyUnicode_AS_UNICODE(wpath1), > - PyUnicode_AS_UNICODE(wpath2)); > - Py_END_ALLOW_THREADS > - Py_XDECREF(wpath1); > - Py_XDECREF(wpath2); > - if (res != 0) > - return posix_error(); > - Py_INCREF(Py_None); > - return Py_None; > - } > - /* Else flow through as neither is Unicode. */ > - } > - /* Drop the argument parsing error as narrow > - strings are also valid. */ > - PyErr_Clear(); > - } > -#else > - /* Platforms that don't support Unicode filenames > - shouldn't be passing these extra params */ > - assert(wformat==NULL && wfunc == NULL); > -#endif > - > if (!PyArg_ParseTuple(args, format, > Py_FileSystemDefaultEncoding, &path1, > Py_FileSystemDefaultEncoding, &path2)) > @@ -696,6 +637,101 @@ > return Py_None; > } > > +#ifdef Py_WIN_WIDE_FILENAMES > +static PyObject* > +win32_1str(PyObject* args, char* func, > + char* format, BOOL (__stdcall *funcA)(LPCSTR), > + char* wformat, BOOL (__stdcall *funcW)(LPWSTR)) > +{ > + PyObject *uni; > + char *ansi; > + BOOL result; > + if (unicode_file_names()) { > + if (!PyArg_ParseTuple(args, wformat, &uni)) > + PyErr_Clear(); > + else { > + Py_BEGIN_ALLOW_THREADS > + result = funcW(PyUnicode_AsUnicode(uni)); > + Py_END_ALLOW_THREADS > + if (!result) > + return win32_error_unicode(func, PyUnicode_AsUnicode(uni)); > + Py_INCREF(Py_None); > + return Py_None; > + } > + } > + if (!PyArg_ParseTuple(args, format, &ansi)) > + return NULL; > + Py_BEGIN_ALLOW_THREADS > + result = funcA(ansi); > + Py_END_ALLOW_THREADS > + if (!result) > + return win32_error(func, ansi); > + Py_INCREF(Py_None); > + return Py_None; > + > +} > + > +/* This is a reimplementation of the C library's chdir function, > + but one that produces Win32 errors instead of DOS error codes. > + chdir is essentially a wrapper around SetCurrentDirectory; however, > + it also needs to set "magic" environment variables indicating > + the per-drive current directory, which are of the form =: */ > +BOOL __stdcall > +win32_chdir(LPCSTR path) > +{ > + char new_path[MAX_PATH+1]; > + int result; > + char env[4] = "=x:"; > + > + if(!SetCurrentDirectoryA(path)) > + return FALSE; > + result = GetCurrentDirectoryA(MAX_PATH+1, new_path); > + if (!result) > + return FALSE; > + /* In the ANSI API, there should not be any paths longer > + than MAX_PATH. */ > + assert(result <= MAX_PATH+1); > + if (strncmp(new_path, "\\\\", 2) == 0 || > + strncmp(new_path, "//", 2) == 0) > + /* UNC path, nothing to do. */ > + return TRUE; > + env[1] = new_path[0]; > + return SetEnvironmentVariableA(env, new_path); > +} > + > +/* The Unicode version differs from the ANSI version > + since the current directory might exceed MAX_PATH characters */ > +BOOL __stdcall > +win32_wchdir(LPCWSTR path) > +{ > + wchar_t _new_path[MAX_PATH+1], *new_path = _new_path; > + int result; > + wchar_t env[4] = L"=x:"; > + > + if(!SetCurrentDirectoryW(path)) > + return FALSE; > + result = GetCurrentDirectoryW(MAX_PATH+1, new_path); > + if (!result) > + return FALSE; > + if (result > MAX_PATH+1) { > + new_path = malloc(result); > + if (!new_path) { > + SetLastError(ERROR_OUTOFMEMORY); > + return FALSE; > + } > + } > + if (wcsncmp(new_path, L"\\\\", 2) == 0 || > + wcsncmp(new_path, L"//", 2) == 0) > + /* UNC path, nothing to do. */ > + return TRUE; > + env[1] = new_path[0]; > + result = SetEnvironmentVariableW(env, new_path); > + if (new_path != _new_path) > + free(new_path); > + return result; > +} > +#endif > + > #ifdef MS_WINDOWS > /* The CRT of Windows has a number of flaws wrt. its stat() implementation: > - time stamps are restricted to second resolution > @@ -1410,14 +1446,13 @@ > posix_chdir(PyObject *self, PyObject *args) > { > #ifdef MS_WINDOWS > - return posix_1str(args, "et:chdir", chdir, "U:chdir", _wchdir); > + return win32_1str(args, "chdir", "s:chdir", win32_chdir, "U:chdir", win32_wchdir); > #elif defined(PYOS_OS2) && defined(PYCC_GCC) > - return posix_1str(args, "et:chdir", _chdir2, NULL, NULL); > + return posix_1str(args, "et:chdir", _chdir2); > #elif defined(__VMS) > - return posix_1str(args, "et:chdir", (int (*)(const char *))chdir, > - NULL, NULL); > + return posix_1str(args, "et:chdir", (int (*)(const char *))chdir); > #else > - return posix_1str(args, "et:chdir", chdir, NULL, NULL); > + return posix_1str(args, "et:chdir", chdir); > #endif > } > > @@ -1485,7 +1520,7 @@ > static PyObject * > posix_chroot(PyObject *self, PyObject *args) > { > - return posix_1str(args, "et:chroot", chroot, NULL, NULL); > + return posix_1str(args, "et:chroot", chroot); > } > #endif > > @@ -2071,7 +2106,6 @@ > } > #endif /* HAVE_NICE */ > > - > PyDoc_STRVAR(posix_rename__doc__, > "rename(old, new)\n\n\ > Rename a file or directory."); > @@ -2080,7 +2114,36 @@ > posix_rename(PyObject *self, PyObject *args) > { > #ifdef MS_WINDOWS > - return posix_2str(args, "etet:rename", rename, "OO:rename", _wrename); > + PyObject *o1, *o2; > + char *p1, *p2; > + BOOL result; > + if (unicode_file_names()) { > + if (!PyArg_ParseTuple(args, "O&O&:rename", > + convert_to_unicode, &o1, > + convert_to_unicode, &o2)) > + PyErr_Clear(); > + else { > + Py_BEGIN_ALLOW_THREADS > + result = MoveFileW(PyUnicode_AsUnicode(o1), > + PyUnicode_AsUnicode(o2)); > + Py_END_ALLOW_THREADS > + Py_DECREF(o1); > + Py_DECREF(o2); > + if (!result) > + return win32_error("rename", NULL); > + Py_INCREF(Py_None); > + return Py_None; > + } > + } > + if (!PyArg_ParseTuple(args, "ss:rename", &p1, &p2)) > + return NULL; > + Py_BEGIN_ALLOW_THREADS > + result = MoveFileA(p1, p2); > + Py_END_ALLOW_THREADS > + if (!result) > + return win32_error("rename", NULL); > + Py_INCREF(Py_None); > + return Py_None; > #else > return posix_2str(args, "etet:rename", rename, NULL, NULL); > #endif > @@ -2095,9 +2158,9 @@ > posix_rmdir(PyObject *self, PyObject *args) > { > #ifdef MS_WINDOWS > - return posix_1str(args, "et:rmdir", rmdir, "U:rmdir", _wrmdir); > + return win32_1str(args, "rmdir", "s:rmdir", RemoveDirectoryA, "U:rmdir", RemoveDirectoryW); > #else > - return posix_1str(args, "et:rmdir", rmdir, NULL, NULL); > + return posix_1str(args, "et:rmdir", rmdir); > #endif > } > > @@ -2166,9 +2229,9 @@ > posix_unlink(PyObject *self, PyObject *args) > { > #ifdef MS_WINDOWS > - return posix_1str(args, "et:remove", unlink, "U:remove", _wunlink); > + return win32_1str(args, "remove", "s:remove", DeleteFileA, "U:remove", DeleteFileW); > #else > - return posix_1str(args, "et:remove", unlink, NULL, NULL); > + return posix_1str(args, "et:remove", unlink); > #endif > } > > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > -- --Guido van Rossum (home page: http://www.python.org/~guido/) From python-checkins at python.org Thu May 4 19:08:03 2006 From: python-checkins at python.org (richard.tew) Date: Thu, 4 May 2006 19:08:03 +0200 (CEST) Subject: [Python-checkins] r45902 - stackless/Python-2.4.3/dev/Stackless/module/taskletobject.c Message-ID: <20060504170803.E5B531E4002@bag.python.org> Author: richard.tew Date: Thu May 4 19:08:03 2006 New Revision: 45902 Modified: stackless/Python-2.4.3/dev/Stackless/module/taskletobject.c Log: There is a unpickling race condition. While it is rare, sometimes tasklets get their setstate call after the channel they are blocked on. If this happens and we do not account for it, they will be left in a broken state where they are on the channels chain, but have cleared their blocked flag. We will assume that the presence of a chain, can only mean that the chain is that of a channel, rather than that of the main tasklet/scheduler. And therefore they can leave their blocked flag in place because the channel would have set it. Modified: stackless/Python-2.4.3/dev/Stackless/module/taskletobject.c ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/module/taskletobject.c (original) +++ stackless/Python-2.4.3/dev/Stackless/module/taskletobject.c Thu May 4 19:08:03 2006 @@ -315,9 +315,28 @@ nframes = PyList_GET_SIZE(lis); TASKLET_SETVAL(t, tempval); + + /* There is a unpickling race condition. While it is rare, + * sometimes tasklets get their setstate call after the + * channel they are blocked on. If this happens and we + * do not account for it, they will be left in a broken + * state where they are on the channels chain, but have + * cleared their blocked flag. + * + * We will assume that the presence of a chain, can only + * mean that the chain is that of a channel, rather than + * that of the main tasklet/scheduler. And therefore + * they can leave their blocked flag in place because the + * channel would have set it. + */ + i = t->flags.blocked; *(int *)&t->flags = flags; - /* we cannot restore blocked, must be done by a channel */ - t->flags.blocked = 0; + if (t->next == NULL) { + t->flags.blocked = 0; + } else { + t->flags.blocked = i; + } + /* t->nesting_level = nesting_level; XXX how do we handle this? XXX to be done: pickle the cstate without a ref to the task. From martin at v.loewis.de Thu May 4 19:47:54 2006 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Thu, 04 May 2006 19:47:54 +0200 Subject: [Python-checkins] r45898 - in python/trunk: Lib/test/test_os.py Lib/test/test_shutil.py Misc/NEWS Modules/posixmodule.c In-Reply-To: References: <20060504100844.5C1691E4007@bag.python.org> Message-ID: <445A3E4A.8060402@v.loewis.de> Guido van Rossum wrote: > I wonder if it's time to move the Win32 code out of posixmodule.c? It > seems the current mess of #ifdefs can't be very maintainable. I vaguely recall that we had considered that before, and rejected it, for some reason. Not sure what the reason was, but one might have been that there still is OS/2 code in there, also. Regards, Martin From guido at python.org Thu May 4 20:08:40 2006 From: guido at python.org (Guido van Rossum) Date: Thu, 4 May 2006 11:08:40 -0700 Subject: [Python-checkins] r45898 - in python/trunk: Lib/test/test_os.py Lib/test/test_shutil.py Misc/NEWS Modules/posixmodule.c In-Reply-To: <445A3E4A.8060402@v.loewis.de> References: <20060504100844.5C1691E4007@bag.python.org> <445A3E4A.8060402@v.loewis.de> Message-ID: Maybe it's time to look again? Perhaps a refactoring could be used so that there are multiple files -- code shared across all OS'es, and code specifically to one OS. On 5/4/06, "Martin v. L?wis" wrote: > Guido van Rossum wrote: > > I wonder if it's time to move the Win32 code out of posixmodule.c? It > > seems the current mess of #ifdefs can't be very maintainable. > > I vaguely recall that we had considered that before, and rejected it, > for some reason. Not sure what the reason was, but one might have been > that there still is OS/2 code in there, also. > > Regards, > Martin > -- --Guido van Rossum (home page: http://www.python.org/~guido/) From python-checkins at python.org Thu May 4 20:15:11 2006 From: python-checkins at python.org (guido.van.rossum) Date: Thu, 4 May 2006 20:15:11 +0200 (CEST) Subject: [Python-checkins] r45903 - peps/trunk/pep-3100.txt Message-ID: <20060504181511.796DF1E401F@bag.python.org> Author: guido.van.rossum Date: Thu May 4 20:15:10 2006 New Revision: 45903 Modified: peps/trunk/pep-3100.txt Log: Third time trying to commit the new pronouncement about set literals. :-( Also mention removing __mod__ and __divmod__ from float. Modified: peps/trunk/pep-3100.txt ============================================================================== --- peps/trunk/pep-3100.txt (original) +++ peps/trunk/pep-3100.txt Thu May 4 20:15:10 2006 @@ -104,12 +104,12 @@ and semantics is evil. * Attributes on functions of the form ``func_whatever`` will be renamed ``__whatever__`` [25]_ -* Set literals and comprehensions [27]_ - {/} means set(); {x} means set([x]); {x, y} means set([x, y]). +* Set literals and comprehensions [27]_ [28]_ + {x} means set([x]); {x, y} means set([x, y]). {F(x) for x in S if P(x)} means set(F(x) for x in S if P(x)). NB. {range(x)} means set([range(x)]), NOT set(range(x)). + There's no literal for an empty set; use set() (or {1}&{2} :-). There's no frozenset literal; they are too rarely needed. - The {/} part is still controversial. To be removed: @@ -117,6 +117,7 @@ * ``raise Exception, "message"``: use ``raise Exception("message")`` [14]_ * ```x```: use ``repr(x)`` [2]_ * The ``<>`` operator: use ``!=`` instead [3]_ +* The __mod__ and __divmod__ special methods on float. [29]_ * Unbound methods [7]_ * METH_OLDARGS, WITH_CYCLE_GC * __getslice__, __setslice__, __delslice__ [17]_ @@ -317,6 +318,12 @@ .. [27] python-3000 email ("sets in P3K?") http://mail.python.org/pipermail/python-3000/2006-April/001286.html + [28] python-3000 email ("sets in P3K?") + http://mail.python.org/pipermail/python-3000/2006-May/001666.html + + [29] python-3000 email ("bug in modulus?") + http://mail.python.org/pipermail/python-3000/2006-May/001735.html + .. [#pep238] PEP 238 (Changing the Division Operator) http://www.python.org/dev/peps/pep-0238 From python-checkins at python.org Thu May 4 20:31:11 2006 From: python-checkins at python.org (richard.tew) Date: Thu, 4 May 2006 20:31:11 +0200 (CEST) Subject: [Python-checkins] r45904 - stackless/binaries-pc/python24.zip stackless/binaries-pc/python24.zip.md5.py Message-ID: <20060504183111.157E61E4002@bag.python.org> Author: richard.tew Date: Thu May 4 20:27:22 2006 New Revision: 45904 Added: stackless/binaries-pc/python24.zip (contents, props changed) stackless/binaries-pc/python24.zip.md5.py Log: Zip archive based install of Python 2.4.3, includes all the bits and pieces needed to just extract over your Python installation directory. e.g. I extracted it into my Python 2.4.3 installation in 'C:\Program Files\Python243'. Added: stackless/binaries-pc/python24.zip ============================================================================== Binary file. No diff available. Added: stackless/binaries-pc/python24.zip.md5.py ============================================================================== --- (empty file) +++ stackless/binaries-pc/python24.zip.md5.py Thu May 4 20:27:22 2006 @@ -0,0 +1,8 @@ + +import md5 +expected = "a25a5cc5bd1bec37dda1a542e9a52cec" +fname = r"python24.zip" +print "expected digest", expected +received = md5.md5(file(fname, "rb").read()).hexdigest() +print ("matched", "NOT MATCHED!!") [received != expected] +raw_input("press enter to continue") From nnorwitz at gmail.com Fri May 5 06:16:14 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 May 2006 21:16:14 -0700 Subject: [Python-checkins] r45900 - python/trunk/Lib/mailbox.py In-Reply-To: <20060504142752.9D7CC1E4002@bag.python.org> References: <20060504142752.9D7CC1E4002@bag.python.org> Message-ID: Two questions, 1) shouldn't the class be: class WindowsError(Exception): pass Does the ernno module exist on Windows and if so, do 2 and 183 exist in it? If not it might be easier to make your own local ENOTFOUND or whatever, then you wouldn't need comments. n -- On 5/4/06, martin.v.loewis wrote: > Author: martin.v.loewis > Date: Thu May 4 16:27:52 2006 > New Revision: 45900 > > Modified: > python/trunk/Lib/mailbox.py > Log: > Update checks to consider Windows error numbers. > > Modified: python/trunk/Lib/mailbox.py > ============================================================================== > --- python/trunk/Lib/mailbox.py (original) > +++ python/trunk/Lib/mailbox.py Thu May 4 16:27:52 2006 > @@ -2,6 +2,7 @@ > > """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" > > +import sys > import os > import time > import calendar > @@ -23,6 +24,11 @@ > 'BabylMessage', 'MMDFMessage', 'UnixMailbox', > 'PortableUnixMailbox', 'MmdfMailbox', 'MHMailbox', 'BabylMailbox' ] > > +if sys.platform != 'win32': > + # Define WindowsError so that we can use it in an except statement > + # even on non-Windows systems > + class WindowsError: > + pass > > class Mailbox: > """A group of messages in a particular place.""" > @@ -262,10 +268,11 @@ > self.remove(key) > except KeyError: > pass > + except WindowsError, e: > + if e.errno != 2: # ERROR_FILE_NOT_FOUND > + raise > except OSError, e: > - if e.errno == errno.ENOENT: > - pass > - else: > + if e.errno != errno.ENOENT: > raise > > def __setitem__(self, key, message): > @@ -419,6 +426,12 @@ > path = os.path.join(self._path, 'tmp', uniq) > try: > os.stat(path) > + except WindowsError, e: > + if e.errno == 2: # ERROR_FILE_NOT_FOUND > + Maildir._count += 1 > + return open(path, 'wb+') > + else: > + raise > except OSError, e: > if e.errno == errno.ENOENT: > Maildir._count += 1 > @@ -566,6 +579,12 @@ > self._file.close() > try: > os.rename(new_file.name, self._path) > + except WindowsError, e: > + if e.errno == 183: # ERROR_ALREADY_EXISTS > + os.remove(self._path) > + os.rename(new_file.name, self._path) > + else: > + raise > except OSError, e: > if e.errno == errno.EEXIST: > os.remove(self._path) > @@ -1837,6 +1856,13 @@ > else: > os.rename(pre_lock.name, f.name + '.lock') > dotlock_done = True > + except WindowsError, e: > + if e.errno == 183: # ERROR_ALREADY_EXISTS > + os.remove(pre_lock.name) > + raise ExternalClashError('dot lock unavailable: %s' % > + f.name) > + else: > + raise > except OSError, e: > if e.errno == errno.EEXIST: > os.remove(pre_lock.name) > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From nnorwitz at gmail.com Fri May 5 06:17:43 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 May 2006 21:17:43 -0700 Subject: [Python-checkins] r45824 - python/trunk/Lib/inspect.py In-Reply-To: <20060430174227.455D91E400D@bag.python.org> References: <20060430174227.455D91E400D@bag.python.org> Message-ID: Can we get a test case for this? -- n On 4/30/06, georg.brandl wrote: > Author: georg.brandl > Date: Sun Apr 30 19:42:26 2006 > New Revision: 45824 > > Modified: > python/trunk/Lib/inspect.py > Log: > Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache. > > > > Modified: python/trunk/Lib/inspect.py > ============================================================================== > --- python/trunk/Lib/inspect.py (original) > +++ python/trunk/Lib/inspect.py Sun Apr 30 19:42:26 2006 > @@ -412,7 +412,11 @@ > in the file and the line number indexes a line in that list. An IOError > is raised if the source code cannot be retrieved.""" > file = getsourcefile(object) or getfile(object) > - lines = linecache.getlines(file, getmodule(object).__dict__) > + module = getmodule(object) > + if module: > + lines = linecache.getlines(file, module.__dict__) > + else: > + lines = linecache.getlines(file) > if not lines: > raise IOError('could not get source code') > > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From nnorwitz at gmail.com Fri May 5 06:17:56 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 May 2006 21:17:56 -0700 Subject: [Python-checkins] r45895 - python/trunk/Lib/imputil.py In-Reply-To: <20060504050812.03A751E4006@bag.python.org> References: <20060504050812.03A751E4006@bag.python.org> Message-ID: Can we get a test case for this? -- n On 5/3/06, georg.brandl wrote: > Author: georg.brandl > Date: Thu May 4 07:08:10 2006 > New Revision: 45895 > > Modified: > python/trunk/Lib/imputil.py > Log: > Bug #1481530: allow "from os.path import ..." with imputil > > > Modified: python/trunk/Lib/imputil.py > ============================================================================== > --- python/trunk/Lib/imputil.py (original) > +++ python/trunk/Lib/imputil.py Thu May 4 07:08:10 2006 > @@ -131,9 +131,12 @@ > if importer: > return importer._finish_import(top_module, parts[1:], fromlist) > > - # Grrr, some people "import os.path" > + # Grrr, some people "import os.path" or do "from os.path import ..." > if len(parts) == 2 and hasattr(top_module, parts[1]): > - return top_module > + if fromlist: > + return getattr(top_module, parts[1]) > + else: > + return top_module > > # If the importer does not exist, then we have to bail. A missing > # importer means that something else imported the module, and we have > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From nnorwitz at gmail.com Fri May 5 06:18:49 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 May 2006 21:18:49 -0700 Subject: [Python-checkins] r45822 - python/trunk/Lib/inspect.py In-Reply-To: <20060430155926.ADE981E400D@bag.python.org> References: <20060430155926.ADE981E400D@bag.python.org> Message-ID: Can we get a test case for this? Docs should probably be updated with the limitation too. -- n On 4/30/06, phillip.eby wrote: > Author: phillip.eby > Date: Sun Apr 30 17:59:26 2006 > New Revision: 45822 > > Modified: > python/trunk/Lib/inspect.py > Log: > Fix infinite regress when inspecting or frames. > > > Modified: python/trunk/Lib/inspect.py > ============================================================================== > --- python/trunk/Lib/inspect.py (original) > +++ python/trunk/Lib/inspect.py Sun Apr 30 17:59:26 2006 > @@ -353,7 +353,13 @@ > if 'b' in mode and string.lower(filename[-len(suffix):]) == suffix: > # Looks like a binary file. We want to only return a text file. > return None > - if os.path.exists(filename) or hasattr(getmodule(object), '__loader__'): > + if os.path.exists(filename): > + return filename > + # Ugly but necessary - '' and '' mean that getmodule() > + # would infinitely recurse, because they're not real files nor loadable > + # Note that this means that writing a PEP 302 loader that uses '<' > + # at the start of a filename is now not a good idea. :( > + if filename[:1]!='<' and hasattr(getmodule(object), '__loader__'): > return filename > > def getabsfile(object): > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From g.brandl at gmx.net Fri May 5 06:46:19 2006 From: g.brandl at gmx.net (Georg Brandl) Date: Fri, 05 May 2006 06:46:19 +0200 Subject: [Python-checkins] r45895 - python/trunk/Lib/imputil.py In-Reply-To: References: <20060504050812.03A751E4006@bag.python.org> Message-ID: Neal Norwitz wrote: > Can we get a test case for this? -- n > > On 5/3/06, georg.brandl wrote: >> Author: georg.brandl >> Date: Thu May 4 07:08:10 2006 >> New Revision: 45895 >> >> Modified: >> python/trunk/Lib/imputil.py >> Log: >> Bug #1481530: allow "from os.path import ..." with imputil As there is no test suite for imputil at all, I don't think so... Georg From python-checkins at python.org Fri May 5 06:49:34 2006 From: python-checkins at python.org (guido.van.rossum) Date: Fri, 5 May 2006 06:49:34 +0200 (CEST) Subject: [Python-checkins] r45906 - sandbox/trunk/sio/bench_cat.py sandbox/trunk/sio/bench_io.py Message-ID: <20060505044934.4468B1E4007@bag.python.org> Author: guido.van.rossum Date: Fri May 5 06:49:34 2006 New Revision: 45906 Added: sandbox/trunk/sio/bench_cat.py (contents, props changed) sandbox/trunk/sio/bench_io.py (contents, props changed) Log: Add some simple benchmarks. Added: sandbox/trunk/sio/bench_cat.py ============================================================================== --- (empty file) +++ sandbox/trunk/sio/bench_cat.py Fri May 5 06:49:34 2006 @@ -0,0 +1,20 @@ +import timeit + +for size in [10, 20, 50, 100, 200, 500, 1000]: + print "------ size = %d ------" % size + strings = [] + byteses = [] + for i in range(100000): + n = size + s = "x"*n + b = bytes(s) + strings.append(s) + byteses.append(b) + + timer = timeit.Timer("bbb = bytes()\nfor b in byteses: bbb += b", + "from __main__ import strings, byteses") + print "byteses %.3f" % min(timer.repeat(3, 10)) + + timer = timeit.Timer("sss = ''.join(strings)", + "from __main__ import strings, byteses") + print "strings %.3f" % min(timer.repeat(3, 10)) Added: sandbox/trunk/sio/bench_io.py ============================================================================== --- (empty file) +++ sandbox/trunk/sio/bench_io.py Fri May 5 06:49:34 2006 @@ -0,0 +1,74 @@ +"""A silly I/O benchmark.""" + +import io +import os +import time + +TFN = "@bench" # Test filename +N = 64*1024*1024 # Number of bytes to read/write + +def writer(): + buffer = bytes("X")*(8*1024) + bufsize = len(buffer) + file = io.open(TFN, "wb", bufsize=0) + try: + size = 0 + while size < N: + file.write(buffer) + size += bufsize + finally: + file.close() + assert os.path.getsize(TFN) == N + +def oldwriter(): + buffer = "X"*(8*1024) + bufsize = len(buffer) + file = open(TFN, "wb", bufsize) + try: + size = 0 + while size < N: + file.write(buffer) + size += bufsize + finally: + file.close() + assert os.path.getsize(TFN) == N + +def reader(): + buffer = bytes() + bufsize = 32*1024 + file = io.open(TFN, "rb", 32*1024) + try: + while len(buffer) < N: + buffer += file.read(bufsize) + finally: + file.close() + assert len(buffer) == os.path.getsize(TFN) == N + +def oldreader(): + bufsize = 32*1024 + f = open(TFN, "rb", 8*1024) + try: + buffer = "" + while len(buffer) < N: + buffer += f.read(bufsize) + finally: + f.close() + assert len(buffer) == os.path.getsize(TFN) == N + +def timeit(func): + t0, c0 = time.time(), time.clock() + func() + t1, c1 = time.time(), time.clock() + print "%s: %6.3f time, %6.3f clock" % (func.__name__, t1-t0, c1-c0) + +def main(): + for i in range(1): + timeit(writer) + timeit(reader) + os.remove(TFN) + timeit(oldwriter) + timeit(oldreader) + os.remove(TFN) + +if __name__ == "__main__": + main() From nnorwitz at gmail.com Fri May 5 06:49:59 2006 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 May 2006 21:49:59 -0700 Subject: [Python-checkins] r45895 - python/trunk/Lib/imputil.py In-Reply-To: References: <20060504050812.03A751E4006@bag.python.org> Message-ID: On 5/4/06, Georg Brandl wrote: > Neal Norwitz wrote: > > Can we get a test case for this? -- n > > > > On 5/3/06, georg.brandl wrote: > > >> Bug #1481530: allow "from os.path import ..." with imputil > > As there is no test suite for imputil at all, I don't think so... You could start one even if it only tests this small change. It builds character and will put hair on your chest. :-) n From g.brandl at gmx.net Fri May 5 06:47:33 2006 From: g.brandl at gmx.net (Georg Brandl) Date: Fri, 05 May 2006 06:47:33 +0200 Subject: [Python-checkins] r45824 - python/trunk/Lib/inspect.py In-Reply-To: References: <20060430174227.455D91E400D@bag.python.org> Message-ID: Neal Norwitz wrote: > Can we get a test case for this? -- n > > On 4/30/06, georg.brandl wrote: >> Author: georg.brandl >> Date: Sun Apr 30 19:42:26 2006 >> New Revision: 45824 >> >> Modified: >> python/trunk/Lib/inspect.py >> Log: >> Fix another problem in inspect: if the module for an object cannot be found, don't try to give its __dict__ to linecache. A test case for the other problem fixed by PJE would cover this as well, I think. Georg From martin at v.loewis.de Fri May 5 07:18:32 2006 From: martin at v.loewis.de (=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=) Date: Fri, 05 May 2006 07:18:32 +0200 Subject: [Python-checkins] r45900 - python/trunk/Lib/mailbox.py In-Reply-To: References: <20060504142752.9D7CC1E4002@bag.python.org> Message-ID: <445AE028.6000605@v.loewis.de> Neal Norwitz wrote: > Two questions, 1) shouldn't the class be: > > class WindowsError(Exception): pass For correctness, no: actual exceptions will never be of that class, so the except clause will never match. While Python will enforce some day that the exceptions raised inherit from exception, it won't enforce that the exceptions caught inherit from exception - it only requires that the names are bound. So in principle, WindowsError = None would have worked as well. For clarity, it is certainly better to inherit from exception > Does the ernno module exist on Windows and if so, do 2 and 183 exist in it? It exists, but it (currently) doesn't define symbolic values for the winerror.h constants. Perhaps it should. > If not it might be easier to make your own local ENOTFOUND or whatever, > then you wouldn't need comments. I hesitate to define global things in a module if I don't mean them to be imported (so I feel guilt about defining WindowsError as well). Of course, _ERROR_FILE_NOT_FOUND would be harmless. Regards, Martin From python-checkins at python.org Fri May 5 09:27:46 2006 From: python-checkins at python.org (richard.tew) Date: Fri, 5 May 2006 09:27:46 +0200 (CEST) Subject: [Python-checkins] r45907 - stackless/Python-2.4.3/dev/Stackless/stackless_version.h Message-ID: <20060505072746.6AC6B1E401A@bag.python.org> Author: richard.tew Date: Fri May 5 09:27:45 2006 New Revision: 45907 Modified: stackless/Python-2.4.3/dev/Stackless/stackless_version.h Log: Updated Stackless version. Modified: stackless/Python-2.4.3/dev/Stackless/stackless_version.h ============================================================================== --- stackless/Python-2.4.3/dev/Stackless/stackless_version.h (original) +++ stackless/Python-2.4.3/dev/Stackless/stackless_version.h Fri May 5 09:27:45 2006 @@ -1,7 +1,7 @@ /* * Stackless Python version string - * created at Thu Sep 29 03:37:53 2005 by mkversion.py + * created at Thu May 04 18:28:57 2006 by mkversion.py */ /* keep this entry up-to-date */ -#define STACKLESS_VERSION "3.1b3 050929" +#define STACKLESS_VERSION "3.1b3 060504" From python-checkins at python.org Fri May 5 11:14:12 2006 From: python-checkins at python.org (richard.tew) Date: Fri, 5 May 2006 11:14:12 +0200 (CEST) Subject: [Python-checkins] r45908 - stackless/Python-2.4.3/dev/PCbuild/publish_binaries.py Message-ID: <20060505091412.6BC4C1E4007@bag.python.org> Author: richard.tew Date: Fri May 5 11:14:11 2006 New Revision: 45908 Modified: stackless/Python-2.4.3/dev/PCbuild/publish_binaries.py Log: Updated build publishing script. No longer packages the dynamic and static libraries in separate release and debug archives. Instead it packages them in one archive with the scripts that have custom Stackless modifications, in a directory structure that can be extracted over the top of an existing PYthon installation. Modified: stackless/Python-2.4.3/dev/PCbuild/publish_binaries.py ============================================================================== --- stackless/Python-2.4.3/dev/PCbuild/publish_binaries.py (original) +++ stackless/Python-2.4.3/dev/PCbuild/publish_binaries.py Fri May 5 11:14:11 2006 @@ -1,7 +1,7 @@ from zipfile import * import os, sys, md5 -exp_path = r"..\..\..\binaries-pc" +exp_path = r"..\..\binaries-pc" prog = """ import md5 @@ -13,25 +13,36 @@ raw_input("press enter to continue") """ -filenames = "python24 stackless _tkinter".split() -# no longer needed -filenames = "python24".split() +fileList = [ r"..\Lib\copy_reg.py", r"..\Lib\pickle.py" ] for debug in ("", "_d"): - zname = os.path.join(exp_path, "python24%s.dll.zip" % debug) - z = ZipFile(zname, "w", ZIP_DEFLATED) - for name in filenames: - name += debug - for ext in ".dll .exp .lib .pyd".split(): - export = name + ext - if os.path.exists(export): - z.write(export) - z.close() - expected = md5.md5(file(zname, "rb").read()).hexdigest() - signame = zname+".md5.py" - shortname = os.path.split(zname)[-1] - file(signame, "w").write(prog % (expected, shortname)) + for suffix in ("dll", "lib", "exp"): + fileList.append("python24%s.%s" % (debug, suffix)) + +pathBySuffix = { + "dll": "", + "lib": "libs/", + "exp": "libs/", + "py": "Lib/", +} + + +zname = os.path.join(exp_path, "python24.zip") +z = ZipFile(zname, "w", ZIP_DEFLATED) +for fileName in fileList: + if os.path.exists(fileName): + suffix = fileName[fileName.rfind(".")+1:] + s = open(fileName, "rb").read() + z.writestr(pathBySuffix[suffix] + os.path.basename(fileName), s) + else: + print "File not found:", fileName +z.close() + +signame = zname+".md5.py" +expected = md5.md5(file(zname, "rb").read()).hexdigest() +shortname = os.path.split(zname)[-1] +file(signame, "w").write(prog % (expected, shortname)) # generate a reST include for upload time. -import time -txt = ".. |uploaded| replace:: " + time.ctime() -print >> file(os.path.join(exp_path, "uploaded.txt"), "w"), txt +#import time +#txt = ".. |uploaded| replace:: " + time.ctime() +#print >> file(os.path.join(exp_path, "uploaded.txt"), "w"), txt From python-checkins at python.org Fri May 5 12:52:44 2006 From: python-checkins at python.org (thomas.wouters) Date: Fri, 5 May 2006 12:52:44 +0200 (CEST) Subject: [Python-checkins] r45909 - in python/branches/release24-maint: Lib/test/test_pty.py Misc/ACKS Modules/fcntlmodule.c Message-ID: <20060505105244.9250A1E4008@bag.python.org> Author: thomas.wouters Date: Fri May 5 12:52:43 2006 New Revision: 45909 Modified: python/branches/release24-maint/Lib/test/test_pty.py python/branches/release24-maint/Misc/ACKS python/branches/release24-maint/Modules/fcntlmodule.c Log: Backport SF bug/patch #1433877: string parameter to ioctl not null terminated The new char-array used in ioctl calls wasn't explicitly NUL-terminated; quite probably the cause for the test_pty failures on Solaris that we circumvented earlier. Modified: python/branches/release24-maint/Lib/test/test_pty.py ============================================================================== --- python/branches/release24-maint/Lib/test/test_pty.py (original) +++ python/branches/release24-maint/Lib/test/test_pty.py Fri May 5 12:52:43 2006 @@ -4,13 +4,6 @@ TEST_STRING_1 = "I wish to buy a fish license.\n" TEST_STRING_2 = "For my pet fish, Eric.\n" -# Solaris (at least 2.9 and 2.10) seem to have a fickle isatty(). The first -# test below, testing the result of os.openpty() for tty-ness, sometimes -# (but not always) fails. The second isatty test, in the sub-process, always -# works. Allow that fickle first test to fail on these platforms, since it -# doesn't actually affect functionality. -fickle_isatty = ["sunos5"] - if verbose: def debug(msg): print msg @@ -54,7 +47,7 @@ # " An optional feature could not be imported " ... ? raise TestSkipped, "Pseudo-terminals (seemingly) not functional." - if not os.isatty(slave_fd) and sys.platform not in fickle_isatty: + if not os.isatty(slave_fd): raise TestFailed, "slave_fd is not a tty" debug("Writing to slave_fd") Modified: python/branches/release24-maint/Misc/ACKS ============================================================================== --- python/branches/release24-maint/Misc/ACKS (original) +++ python/branches/release24-maint/Misc/ACKS Fri May 5 12:52:43 2006 @@ -33,6 +33,7 @@ Luigi Ballabio Michael J. Barber Chris Barker +Quentin Barnes Cesar Eduardo Barros Des Barry Ulf Bartelt Modified: python/branches/release24-maint/Modules/fcntlmodule.c ============================================================================== --- python/branches/release24-maint/Modules/fcntlmodule.c (original) +++ python/branches/release24-maint/Modules/fcntlmodule.c Fri May 5 12:52:43 2006 @@ -93,6 +93,7 @@ static PyObject * fcntl_ioctl(PyObject *self, PyObject *args) { +#define IOCTL_BUFSZ 1024 int fd; int code; int arg; @@ -100,7 +101,7 @@ char *str; int len; int mutate_arg = 0; - char buf[1024]; + char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */ if (PyArg_ParseTuple(args, "O&iw#|i:ioctl", conv_descriptor, &fd, &code, @@ -118,8 +119,9 @@ mutate_arg = 0; } if (mutate_arg) { - if (len <= sizeof buf) { + if (len <= IOCTL_BUFSZ) { memcpy(buf, str, len); + buf[len] = '\0'; arg = buf; } else { @@ -127,13 +129,14 @@ } } else { - if (len > sizeof buf) { + if (len > IOCTL_BUFSZ) { PyErr_SetString(PyExc_ValueError, "ioctl string arg too long"); return NULL; } else { memcpy(buf, str, len); + buf[len] = '\0'; arg = buf; } } @@ -145,7 +148,7 @@ else { ret = ioctl(fd, code, arg); } - if (mutate_arg && (len < sizeof buf)) { + if (mutate_arg && (len < IOCTL_BUFSZ)) { memcpy(str, buf, len); } if (ret < 0) { @@ -163,12 +166,13 @@ PyErr_Clear(); if (PyArg_ParseTuple(args, "O&is#:ioctl", conv_descriptor, &fd, &code, &str, &len)) { - if (len > sizeof buf) { + if (len > IOCTL_BUFSZ) { PyErr_SetString(PyExc_ValueError, "ioctl string arg too long"); return NULL; } memcpy(buf, str, len); + buf[len] = '\0'; Py_BEGIN_ALLOW_THREADS ret = ioctl(fd, code, buf); Py_END_ALLOW_THREADS @@ -199,6 +203,7 @@ return NULL; } return PyInt_FromLong((long)ret); +#undef IOCTL_BUFSZ } PyDoc_STRVAR(ioctl_doc, From buildbot at python.org Fri May 5 13:27:02 2006 From: buildbot at python.org (buildbot at python.org) Date: Fri, 05 May 2006 11:27:02 +0000 Subject: [Python-checkins] buildbot warnings in sparc solaris10 gcc 2.4 Message-ID: <20060505112702.4546B1E4008@bag.python.org> The Buildbot has detected a new failure of sparc solaris10 gcc 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/sparc%2520solaris10%2520gcc%25202.4/builds/119 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: thomas.wouters Build Had Warnings: warnings test sincerely, -The Buildbot From buildbot at python.org Fri May 5 14:26:51 2006 From: buildbot at python.org (buildbot at python.org) Date: Fri, 05 May 2006 12:26:51 +0000 Subject: [Python-checkins] buildbot warnings in alpha Debian 2.4 Message-ID: <20060505122651.D9DEB1E400A@bag.python.org> The Buildbot has detected a new failure of alpha Debian 2.4. Full details are available at: http://www.python.org/dev/buildbot/all/alpha%2520Debian%25202.4/builds/16 Buildbot URL: http://www.python.org/dev/buildbot/all/ Build Reason: Build Source Stamp: [branch branches/release24-maint] HEAD Blamelist: thomas.wouters Build Had Warnings: warnings test sincerely, -The Buildbot From python-checkins at python.org Fri May 5 19:50:06 2006 From: python-checkins at python.org (richard.tew) Date: Fri, 5 May 2006 19:50:06 +0200 (CEST) Subject: [Python-checkins] r45911 - stackless/Python-2.4.3/dev/Modules/Setup.config.in stackless/Python-2.4.3/dev/Modules/Setup.dist stackless/Python-2.4.3/dev/Modules/config.c.in stackless/Python-2.4.3/dev/Modules/makesetup Message-ID: <20060505175006.A7D761E400A@bag.python.org> Author: richard.tew Date: Fri May 5 19:50:05 2006 New Revision: 45911 Modified: stackless/Python-2.4.3/dev/Modules/Setup.config.in (contents, props changed) stackless/Python-2.4.3/dev/Modules/Setup.dist (contents, props changed) stackless/Python-2.4.3/dev/Modules/config.c.in (contents, props changed) stackless/Python-2.4.3/dev/Modules/makesetup (contents, props changed) Log: Fixed up the mime types (text/plain) and eol styles (native) so that compilation will work on unix os'. Modified: stackless/Python-2.4.3/dev/Modules/Setup.config.in ============================================================================== Binary files. No diff available. Modified: stackless/Python-2.4.3/dev/Modules/Setup.dist ============================================================================== --- stackless/Python-2.4.3/dev/Modules/Setup.dist (original) +++ stackless/Python-2.4.3/dev/Modules/Setup.dist Fri May 5 19:50:05 2006 @@ -1,488 +1,488 @@ -# -*- makefile -*- -# The file Setup is used by the makesetup script to construct the files -# Makefile and config.c, from Makefile.pre and config.c.in, -# respectively. The file Setup itself is initially copied from -# Setup.dist; once it exists it will not be overwritten, so you can edit -# Setup to your heart's content. Note that Makefile.pre is created -# from Makefile.pre.in by the toplevel configure script. - -# (VPATH notes: Setup and Makefile.pre are in the build directory, as -# are Makefile and config.c; the *.in and *.dist files are in the source -# directory.) - -# Each line in this file describes one or more optional modules. -# Modules enabled here will not be compiled by the setup.py script, -# so the file can be used to override setup.py's behavior. - -# Lines have the following structure: -# -# ... [ ...] [ ...] [ ...] -# -# is anything ending in .c (.C, .cc, .c++ are C++ files) -# is anything starting with -I, -D, -U or -C -# is anything ending in .a or beginning with -l or -L -# is anything else but should be a valid Python -# identifier (letters, digits, underscores, beginning with non-digit) -# -# (As the makesetup script changes, it may recognize some other -# arguments as well, e.g. *.so and *.sl as libraries. See the big -# case statement in the makesetup script.) -# -# Lines can also have the form -# -# = -# -# which defines a Make variable definition inserted into Makefile.in -# -# Finally, if a line contains just the word "*shared*" (without the -# quotes but with the stars), then the following modules will not be -# built statically. The build process works like this: -# -# 1. Build all modules that are declared as static in Modules/Setup, -# combine them into libpythonxy.a, combine that into python. -# 2. Build all modules that are listed as shared in Modules/Setup. -# 3. Invoke setup.py. That builds all modules that -# a) are not builtin, and -# b) are not listed in Modules/Setup, and -# c) can be build on the target -# -# Therefore, modules declared to be shared will not be -# included in the config.c file, nor in the list of objects to be -# added to the library archive, and their linker options won't be -# added to the linker options. Rules to create their .o files and -# their shared libraries will still be added to the Makefile, and -# their names will be collected in the Make variable SHAREDMODS. This -# is used to build modules as shared libraries. (They can be -# installed using "make sharedinstall", which is implied by the -# toplevel "make install" target.) (For compatibility, -# *noconfig* has the same effect as *shared*.) -# -# In addition, *static* explicitly declares the following modules to -# be static. Lines containing "*static*" and "*shared*" may thus -# alternate thoughout this file. - -# NOTE: As a standard policy, as many modules as can be supported by a -# platform should be present. The distribution comes with all modules -# enabled that are supported by most platforms and don't require you -# to ftp sources from elsewhere. - - -# Some special rules to define PYTHONPATH. -# Edit the definitions below to indicate which options you are using. -# Don't add any whitespace or comments! - -# Directories where library files get installed. -# DESTLIB is for Python modules; MACHDESTLIB for shared libraries. -DESTLIB=$(LIBDEST) -MACHDESTLIB=$(BINLIBDEST) - -# NOTE: all the paths are now relative to the prefix that is computed -# at run time! - -# Standard path -- don't edit. -# No leading colon since this is the first entry. -# Empty since this is now just the runtime prefix. -DESTPATH= - -# Site specific path components -- should begin with : if non-empty -SITEPATH= - -# Standard path components for test modules -TESTPATH= - -# Path components for machine- or system-dependent modules and shared libraries -MACHDEPPATH=:plat-$(MACHDEP) -EXTRAMACHDEPPATH= - -# Path component for the Tkinter-related modules -# The TKPATH variable is always enabled, to save you the effort. -TKPATH=:lib-tk - -COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)$(MACHDEPPATH)$(EXTRAMACHDEPPATH)$(TKPATH) -PYTHONPATH=$(COREPYTHONPATH) - - -# The modules listed here can't be built as shared libraries for -# various reasons; therefore they are listed here instead of in the -# normal order. - -# This only contains the minimal set of modules required to run the -# setup.py script in the root of the Python source tree. - -posix posixmodule.c # posix (UNIX) system calls -errno errnomodule.c # posix (UNIX) errno values -pwd pwdmodule.c # this is needed to find out the user's home dir - # if $HOME is not set -_sre _sre.c # Fredrik Lundh's new regular expressions -_codecs _codecsmodule.c # access to the builtin codecs and codec registry - -# The zipimport module is always imported at startup. Having it as a -# builtin module avoids some bootstrapping problems and reduces overhead. -zipimport zipimport.c - -# The rest of the modules listed in this file are all commented out by -# default. Usually they can be detected and built as dynamically -# loaded modules by the new setup.py script added in Python 2.1. If -# you're on a platform that doesn't support dynamic loading, want to -# compile modules statically into the Python binary, or need to -# specify some odd set of compiler switches, you can uncomment the -# appropriate lines below. - -# ====================================================================== - -# The Python symtable module depends on .h files that setup.py doesn't track -_symtable symtablemodule.c - -# The SGI specific GL module: - -GLHACK=-Dclear=__GLclear -#gl glmodule.c cgensupport.c -I$(srcdir) $(GLHACK) -lgl -lX11 - -# Pure module. Cannot be linked dynamically. -# -DWITH_QUANTIFY, -DWITH_PURIFY, or -DWITH_ALL_PURE -#WHICH_PURE_PRODUCTS=-DWITH_ALL_PURE -#PURE_INCLS=-I/usr/local/include -#PURE_STUBLIBS=-L/usr/local/lib -lpurify_stubs -lquantify_stubs -#pure puremodule.c $(WHICH_PURE_PRODUCTS) $(PURE_INCLS) $(PURE_STUBLIBS) - -# Uncommenting the following line tells makesetup that all following -# modules are to be built as shared libraries (see above for more -# detail; also note that *static* reverses this effect): - -#*shared* - -# GNU readline. Unlike previous Python incarnations, GNU readline is -# now incorporated in an optional module, configured in the Setup file -# instead of by a configure script switch. You may have to insert a -# -L option pointing to the directory where libreadline.* lives, -# and you may have to change -ltermcap to -ltermlib or perhaps remove -# it, depending on your system -- see the GNU readline instructions. -# It's okay for this to be a shared library, too. - -#readline readline.c -lreadline -ltermcap - - -# Modules that should always be present (non UNIX dependent): - -#array arraymodule.c # array objects -#cmath cmathmodule.c # -lm # complex math library functions -#math mathmodule.c # -lm # math library functions, e.g. sin() -#struct structmodule.c # binary structure packing/unpacking -#time timemodule.c # -lm # time operations and variables -#operator operator.c # operator.add() and similar goodies -#_weakref _weakref.c # basic weak reference support -#_testcapi _testcapimodule.c # Python C API test module -#_random _randommodule.c # Random number generator -#collections collectionsmodule.c # Container types -#itertools itertoolsmodule.c # Functions creating iterators for efficient looping -#strop stropmodule.c # String manipulations - -#unicodedata unicodedata.c # static Unicode character database - -# access to ISO C locale support -#_locale _localemodule.c # -lintl - - -# Modules with some UNIX dependencies -- on by default: -# (If you have a really backward UNIX, select and socket may not be -# supported...) - -#fcntl fcntlmodule.c # fcntl(2) and ioctl(2) -#grp grpmodule.c # grp(3) -#select selectmodule.c # select(2); not on ancient System V - -# Memory-mapped files (also works on Win32). -#mmap mmapmodule.c - -# CSV file helper -#_csv _csv.c - -# Socket module helper for socket(2) -#_socket socketmodule.c - -# Socket module helper for SSL support; you must comment out the other -# socket line above, and possibly edit the SSL variable: -#SSL=/usr/local/ssl -#_ssl _ssl.c \ -# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -# -L$(SSL)/lib -lssl -lcrypto - -# The crypt module is now disabled by default because it breaks builds -# on many systems (where -lcrypt is needed), e.g. Linux (I believe). -# -# First, look at Setup.config; configure may have set this for you. - -#crypt cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems - - -# Some more UNIX dependent modules -- off by default, since these -# are not supported by all UNIX systems: - -#nis nismodule.c -lnsl # Sun yellow pages -- not everywhere -#termios termios.c # Steen Lumholt's termios module -#resource resource.c # Jeremy Hylton's rlimit interface - - -# Multimedia modules -- off by default. -# These don't work for 64-bit platforms!!! -# #993173 says audioop works on 64-bit platforms, though. -# These represent audio samples or images as strings: - -#audioop audioop.c # Operations on audio samples -#imageop imageop.c # Operations on images -#rgbimg rgbimgmodule.c # Read SGI RGB image files (but coded portably) - - -# The md5 module implements the RSA Data Security, Inc. MD5 -# Message-Digest Algorithm, described in RFC 1321. The necessary files -# md5c.c and md5.h are included here. - -#md5 md5module.c md5c.c - - -# The sha module implements the SHA checksum algorithm. -# (NIST's Secure Hash Algorithm.) -#sha shamodule.c - - -# SGI IRIX specific modules -- off by default. - -# These module work on any SGI machine: - -# *** gl must be enabled higher up in this file *** -#fm fmmodule.c $(GLHACK) -lfm -lgl # Font Manager -#sgi sgimodule.c # sgi.nap() and a few more - -# This module requires the header file -# /usr/people/4Dgifts/iristools/include/izoom.h: -#imgfile imgfile.c -limage -lgutil -lgl -lm # Image Processing Utilities - - -# These modules require the Multimedia Development Option (I think): - -#al almodule.c -laudio # Audio Library -#cd cdmodule.c -lcdaudio -lds -lmediad # CD Audio Library -#cl clmodule.c -lcl -lawareaudio # Compression Library -#sv svmodule.c yuvconvert.c -lsvideo -lXext -lX11 # Starter Video - - -# The FORMS library, by Mark Overmars, implements user interface -# components such as dialogs and buttons using SGI's GL and FM -# libraries. You must ftp the FORMS library separately from -# ftp://ftp.cs.ruu.nl/pub/SGI/FORMS. It was tested with FORMS 2.2a. -# NOTE: if you want to be able to use FORMS and curses simultaneously -# (or both link them statically into the same binary), you must -# compile all of FORMS with the cc option "-Dclear=__GLclear". - -# The FORMS variable must point to the FORMS subdirectory of the forms -# toplevel directory: - -#FORMS=/ufs/guido/src/forms/FORMS -#fl flmodule.c -I$(FORMS) $(GLHACK) $(FORMS)/libforms.a -lfm -lgl - - -# SunOS specific modules -- off by default: - -#sunaudiodev sunaudiodev.c - - -# A Linux specific module -- off by default; this may also work on -# some *BSDs. - -#linuxaudiodev linuxaudiodev.c - - -# George Neville-Neil's timing module: - -#timing timingmodule.c - - -# The _tkinter module. -# -# The command for _tkinter is long and site specific. Please -# uncomment and/or edit those parts as indicated. If you don't have a -# specific extension (e.g. Tix or BLT), leave the corresponding line -# commented out. (Leave the trailing backslashes in! If you -# experience strange errors, you may want to join all uncommented -# lines and remove the backslashes -- the backslash interpretation is -# done by the shell's "read" command and it may not be implemented on -# every system. - -# *** Always uncomment this (leave the leading underscore in!): -# _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \ -# *** Uncomment and edit to reflect where your Tcl/Tk libraries are: -# -L/usr/local/lib \ -# *** Uncomment and edit to reflect where your Tcl/Tk headers are: -# -I/usr/local/include \ -# *** Uncomment and edit to reflect where your X11 header files are: -# -I/usr/X11R6/include \ -# *** Or uncomment this for Solaris: -# -I/usr/openwin/include \ -# *** Uncomment and edit for Tix extension only: -# -DWITH_TIX -ltix8.1.8.2 \ -# *** Uncomment and edit for BLT extension only: -# -DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \ -# *** Uncomment and edit for PIL (TkImaging) extension only: -# (See http://www.pythonware.com/products/pil/ for more info) -# -DWITH_PIL -I../Extensions/Imaging/libImaging tkImaging.c \ -# *** Uncomment and edit for TOGL extension only: -# -DWITH_TOGL togl.c \ -# *** Uncomment and edit to reflect your Tcl/Tk versions: -# -ltk8.2 -ltcl8.2 \ -# *** Uncomment and edit to reflect where your X11 libraries are: -# -L/usr/X11R6/lib \ -# *** Or uncomment this for Solaris: -# -L/usr/openwin/lib \ -# *** Uncomment these for TOGL extension only: -# -lGL -lGLU -lXext -lXmu \ -# *** Uncomment for AIX: -# -lld \ -# *** Always uncomment this; X11 libraries to link with: -# -lX11 - -# Lance Ellinghaus's syslog module -#syslog syslogmodule.c # syslog daemon interface - - -# Curses support, requring the System V version of curses, often -# provided by the ncurses library. e.g. on Linux, link with -lncurses -# instead of -lcurses). -# -# First, look at Setup.config; configure may have set this for you. - -#_curses _cursesmodule.c -lcurses -ltermcap -# Wrapper for the panel library that's part of ncurses and SYSV curses. -#_curses_panel _curses_panel.c -lpanel -lncurses - - -# Generic (SunOS / SVR4) dynamic loading module. -# This is not needed for dynamic loading of Python modules -- -# it is a highly experimental and dangerous device for calling -# *arbitrary* C functions in *arbitrary* shared libraries: - -#dl dlmodule.c - - -# Modules that provide persistent dictionary-like semantics. You will -# probably want to arrange for at least one of them to be available on -# your machine, though none are defined by default because of library -# dependencies. The Python module anydbm.py provides an -# implementation independent wrapper for these; dumbdbm.py provides -# similar functionality (but slower of course) implemented in Python. - -# The standard Unix dbm module has been moved to Setup.config so that -# it will be compiled as a shared library by default. Compiling it as -# a built-in module causes conflicts with the pybsddb3 module since it -# creates a static dependency on an out-of-date version of db.so. -# -# First, look at Setup.config; configure may have set this for you. - -#dbm dbmmodule.c # dbm(3) may require -lndbm or similar - -# Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: -# -# First, look at Setup.config; configure may have set this for you. - -#gdbm gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm - - -# Sleepycat Berkeley DB interface. -# -# This requires the Sleepycat DB code, see http://www.sleepycat.com/ -# The earliest supported version of that library is 3.0, the latest -# supported version is 4.0 (4.1 is specifically not supported, as that -# changes the semantics of transactional databases). A list of available -# releases can be found at -# -# http://www.sleepycat.com/update/index.html -# -# Edit the variables DB and DBLIBVERto point to the db top directory -# and the subdirectory of PORT where you built it. -#DB=/usr/local/BerkeleyDB.4.0 -#DBLIBVER=4.0 -#DBINC=$(DB)/include -#DBLIB=$(DB)/lib -#_bsddb _bsddb.c -I$(DBINC) -L$(DBLIB) -ldb-$(DBLIBVER) - -# Historical Berkeley DB 1.85 -# -# This module is deprecated; the 1.85 version of the Berkeley DB library has -# bugs that can cause data corruption. If you can, use later versions of the -# library instead, available from . - -#DB=/depot/sundry/src/berkeley-db/db.1.85 -#DBPORT=$(DB)/PORT/irix.5.3 -#bsddb185 bsddbmodule.c -I$(DBPORT)/include -I$(DBPORT) $(DBPORT)/libdb.a - - - -# Helper module for various ascii-encoders -#binascii binascii.c - -# Fred Drake's interface to the Python parser -#parser parsermodule.c - -# cStringIO and cPickle -#cStringIO cStringIO.c -#cPickle cPickle.c - - -# Lee Busby's SIGFPE modules. -# The library to link fpectl with is platform specific. -# Choose *one* of the options below for fpectl: - -# For SGI IRIX (tested on 5.3): -#fpectl fpectlmodule.c -lfpe - -# For Solaris with SunPro compiler (tested on Solaris 2.5 with SunPro C 4.2): -# (Without the compiler you don't have -lsunmath.) -#fpectl fpectlmodule.c -R/opt/SUNWspro/lib -lsunmath -lm - -# For other systems: see instructions in fpectlmodule.c. -#fpectl fpectlmodule.c ... - -# Test module for fpectl. No extra libraries needed. -#fpetest fpetestmodule.c - -# Andrew Kuchling's zlib module. -# This require zlib 1.1.3 (or later). -# See http://www.gzip.org/zlib/ -#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz - -# Interface to the Expat XML parser -# -# Expat was written by James Clark and is now maintained by a group of -# developers on SourceForge; see www.libexpat.org for more -# information. The pyexpat module was written by Paul Prescod after a -# prototype by Jack Jansen. Source of Expat 1.95.2 is included in -# Modules/expat/. Usage of a system shared libexpat.so/expat.dll is -# not advised. -# -# More information on Expat can be found at www.libexpat.org. -# -#EXPAT_DIR=/usr/local/src/expat-1.95.2 -#pyexpat pyexpat.c -DHAVE_EXPAT_H -I$(EXPAT_DIR)/lib -L$(EXPAT_DIR) -lexpat - - -# Hye-Shik Chang's CJKCodecs - -# multibytecodec is required for all the other CJK codec modules -#_multibytecodec cjkcodecs/multibytecodec.c - -#_codecs_cn cjkcodecs/_codecs_cn.c -#_codecs_hk cjkcodecs/_codecs_hk.c -#_codecs_iso2022 cjkcodecs/_codecs_iso2022.c -#_codecs_jp cjkcodecs/_codecs_jp.c -#_codecs_kr cjkcodecs/_codecs_kr.c -#_codecs_tw cjkcodecs/_codecs_tw.c - -# Example -- included for reference only: -# xx xxmodule.c - -# Another example -- the 'xxsubtype' module shows C-level subtyping in action -xxsubtype xxsubtype.c - -# uncomment if you'd like to compile stackless statically. -# Note that the static build puts the .o files into Modules. -#SLP=./Stackless -#stackless $(SLP)/stacklessmodule.c $(SLP)/atomicobject.c $(SLP)/cframeobject.c $(SLP)/channelobject.c $(SLP)/flextype.c $(SLP)/scheduling.c $(SLP)/schedulerobject.c $(SLP)/stackless_debug.c $(SLP)/stackless_util.c $(SLP)/taskletobject.c +# -*- makefile -*- +# The file Setup is used by the makesetup script to construct the files +# Makefile and config.c, from Makefile.pre and config.c.in, +# respectively. The file Setup itself is initially copied from +# Setup.dist; once it exists it will not be overwritten, so you can edit +# Setup to your heart's content. Note that Makefile.pre is created +# from Makefile.pre.in by the toplevel configure script. + +# (VPATH notes: Setup and Makefile.pre are in the build directory, as +# are Makefile and config.c; the *.in and *.dist files are in the source +# directory.) + +# Each line in this file describes one or more optional modules. +# Modules enabled here will not be compiled by the setup.py script, +# so the file can be used to override setup.py's behavior. + +# Lines have the following structure: +# +# ... [ ...] [ ...] [ ...] +# +# is anything ending in .c (.C, .cc, .c++ are C++ files) +# is anything starting with -I, -D, -U or -C +# is anything ending in .a or beginning with -l or -L +# is anything else but should be a valid Python +# identifier (letters, digits, underscores, beginning with non-digit) +# +# (As the makesetup script changes, it may recognize some other +# arguments as well, e.g. *.so and *.sl as libraries. See the big +# case statement in the makesetup script.) +# +# Lines can also have the form +# +# = +# +# which defines a Make variable definition inserted into Makefile.in +# +# Finally, if a line contains just the word "*shared*" (without the +# quotes but with the stars), then the following modules will not be +# built statically. The build process works like this: +# +# 1. Build all modules that are declared as static in Modules/Setup, +# combine them into libpythonxy.a, combine that into python. +# 2. Build all modules that are listed as shared in Modules/Setup. +# 3. Invoke setup.py. That builds all modules that +# a) are not builtin, and +# b) are not listed in Modules/Setup, and +# c) can be build on the target +# +# Therefore, modules declared to be shared will not be +# included in the config.c file, nor in the list of objects to be +# added to the library archive, and their linker options won't be +# added to the linker options. Rules to create their .o files and +# their shared libraries will still be added to the Makefile, and +# their names will be collected in the Make variable SHAREDMODS. This +# is used to build modules as shared libraries. (They can be +# installed using "make sharedinstall", which is implied by the +# toplevel "make install" target.) (For compatibility, +# *noconfig* has the same effect as *shared*.) +# +# In addition, *static* explicitly declares the following modules to +# be static. Lines containing "*static*" and "*shared*" may thus +# alternate thoughout this file. + +# NOTE: As a standard policy, as many modules as can be supported by a +# platform should be present. The distribution comes with all modules +# enabled that are supported by most platforms and don't require you +# to ftp sources from elsewhere. + + +# Some special rules to define PYTHONPATH. +# Edit the definitions below to indicate which options you are using. +# Don't add any whitespace or comments! + +# Directories where library files get installed. +# DESTLIB is for Python modules; MACHDESTLIB for shared libraries. +DESTLIB=$(LIBDEST) +MACHDESTLIB=$(BINLIBDEST) + +# NOTE: all the paths are now relative to the prefix that is computed +# at run time! + +# Standard path -- don't edit. +# No leading colon since this is the first entry. +# Empty since this is now just the runtime prefix. +DESTPATH= + +# Site specific path components -- should begin with : if non-empty +SITEPATH= + +# Standard path components for test modules +TESTPATH= + +# Path components for machine- or system-dependent modules and shared libraries +MACHDEPPATH=:plat-$(MACHDEP) +EXTRAMACHDEPPATH= + +# Path component for the Tkinter-related modules +# The TKPATH variable is always enabled, to save you the effort. +TKPATH=:lib-tk + +COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)$(MACHDEPPATH)$(EXTRAMACHDEPPATH)$(TKPATH) +PYTHONPATH=$(COREPYTHONPATH) + + +# The modules listed here can't be built as shared libraries for +# various reasons; therefore they are listed here instead of in the +# normal order. + +# This only contains the minimal set of modules required to run the +# setup.py script in the root of the Python source tree. + +posix posixmodule.c # posix (UNIX) system calls +errno errnomodule.c # posix (UNIX) errno values +pwd pwdmodule.c # this is needed to find out the user's home dir + # if $HOME is not set +_sre _sre.c # Fredrik Lundh's new regular expressions +_codecs _codecsmodule.c # access to the builtin codecs and codec registry + +# The zipimport module is always imported at startup. Having it as a +# builtin module avoids some bootstrapping problems and reduces overhead. +zipimport zipimport.c + +# The rest of the modules listed in this file are all commented out by +# default. Usually they can be detected and built as dynamically +# loaded modules by the new setup.py script added in Python 2.1. If +# you're on a platform that doesn't support dynamic loading, want to +# compile modules statically into the Python binary, or need to +# specify some odd set of compiler switches, you can uncomment the +# appropriate lines below. + +# ====================================================================== + +# The Python symtable module depends on .h files that setup.py doesn't track +_symtable symtablemodule.c + +# The SGI specific GL module: + +GLHACK=-Dclear=__GLclear +#gl glmodule.c cgensupport.c -I$(srcdir) $(GLHACK) -lgl -lX11 + +# Pure module. Cannot be linked dynamically. +# -DWITH_QUANTIFY, -DWITH_PURIFY, or -DWITH_ALL_PURE +#WHICH_PURE_PRODUCTS=-DWITH_ALL_PURE +#PURE_INCLS=-I/usr/local/include +#PURE_STUBLIBS=-L/usr/local/lib -lpurify_stubs -lquantify_stubs +#pure puremodule.c $(WHICH_PURE_PRODUCTS) $(PURE_INCLS) $(PURE_STUBLIBS) + +# Uncommenting the following line tells makesetup that all following +# modules are to be built as shared libraries (see above for more +# detail; also note that *static* reverses this effect): + +#*shared* + +# GNU readline. Unlike previous Python incarnations, GNU readline is +# now incorporated in an optional module, configured in the Setup file +# instead of by a configure script switch. You may have to insert a +# -L option pointing to the directory where libreadline.* lives, +# and you may have to change -ltermcap to -ltermlib or perhaps remove +# it, depending on your system -- see the GNU readline instructions. +# It's okay for this to be a shared library, too. + +#readline readline.c -lreadline -ltermcap + + +# Modules that should always be present (non UNIX dependent): + +#array arraymodule.c # array objects +#cmath cmathmodule.c # -lm # complex math library functions +#math mathmodule.c # -lm # math library functions, e.g. sin() +#struct structmodule.c # binary structure packing/unpacking +#time timemodule.c # -lm # time operations and variables +#operator operator.c # operator.add() and similar goodies +#_weakref _weakref.c # basic weak reference support +#_testcapi _testcapimodule.c # Python C API test module +#_random _randommodule.c # Random number generator +#collections collectionsmodule.c # Container types +#itertools itertoolsmodule.c # Functions creating iterators for efficient looping +#strop stropmodule.c # String manipulations + +#unicodedata unicodedata.c # static Unicode character database + +# access to ISO C locale support +#_locale _localemodule.c # -lintl + + +# Modules with some UNIX dependencies -- on by default: +# (If you have a really backward UNIX, select and socket may not be +# supported...) + +#fcntl fcntlmodule.c # fcntl(2) and ioctl(2) +#grp grpmodule.c # grp(3) +#select selectmodule.c # select(2); not on ancient System V + +# Memory-mapped files (also works on Win32). +#mmap mmapmodule.c + +# CSV file helper +#_csv _csv.c + +# Socket module helper for socket(2) +#_socket socketmodule.c + +# Socket module helper for SSL support; you must comment out the other +# socket line above, and possibly edit the SSL variable: +#SSL=/usr/local/ssl +#_ssl _ssl.c \ +# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ +# -L$(SSL)/lib -lssl -lcrypto + +# The crypt module is now disabled by default because it breaks builds +# on many systems (where -lcrypt is needed), e.g. Linux (I believe). +# +# First, look at Setup.config; configure may have set this for you. + +#crypt cryptmodule.c # -lcrypt # crypt(3); needs -lcrypt on some systems + + +# Some more UNIX dependent modules -- off by default, since these +# are not supported by all UNIX systems: + +#nis nismodule.c -lnsl # Sun yellow pages -- not everywhere +#termios termios.c # Steen Lumholt's termios module +#resource resource.c # Jeremy Hylton's rlimit interface + + +# Multimedia modules -- off by default. +# These don't work for 64-bit platforms!!! +# #993173 says audioop works on 64-bit platforms, though. +# These represent audio samples or images as strings: + +#audioop audioop.c # Operations on audio samples +#imageop imageop.c # Operations on images +#rgbimg rgbimgmodule.c # Read SGI RGB image files (but coded portably) + + +# The md5 module implements the RSA Data Security, Inc. MD5 +# Message-Digest Algorithm, described in RFC 1321. The necessary files +# md5c.c and md5.h are included here. + +#md5 md5module.c md5c.c + + +# The sha module implements the SHA checksum algorithm. +# (NIST's Secure Hash Algorithm.) +#sha shamodule.c + + +# SGI IRIX specific modules -- off by default. + +# These module work on any SGI machine: + +# *** gl must be enabled higher up in this file *** +#fm fmmodule.c $(GLHACK) -lfm -lgl # Font Manager +#sgi sgimodule.c # sgi.nap() and a few more + +# This module requires the header file +# /usr/people/4Dgifts/iristools/include/izoom.h: +#imgfile imgfile.c -limage -lgutil -lgl -lm # Image Processing Utilities + + +# These modules require the Multimedia Development Option (I think): + +#al almodule.c -laudio # Audio Library +#cd cdmodule.c -lcdaudio -lds -lmediad # CD Audio Library +#cl clmodule.c -lcl -lawareaudio # Compression Library +#sv svmodule.c yuvconvert.c -lsvideo -lXext -lX11 # Starter Video + + +# The FORMS library, by Mark Overmars, implements user interface +# components such as dialogs and buttons using SGI's GL and FM +# libraries. You must ftp the FORMS library separately from +# ftp://ftp.cs.ruu.nl/pub/SGI/FORMS. It was tested with FORMS 2.2a. +# NOTE: if you want to be able to use FORMS and curses simultaneously +# (or both link them statically into the same binary), you must +# compile all of FORMS with the cc option "-Dclear=__GLclear". + +# The FORMS variable must point to the FORMS subdirectory of the forms +# toplevel directory: + +#FORMS=/ufs/guido/src/forms/FORMS +#fl flmodule.c -I$(FORMS) $(GLHACK) $(FORMS)/libforms.a -lfm -lgl + + +# SunOS specific modules -- off by default: + +#sunaudiodev sunaudiodev.c + + +# A Linux specific module -- off by default; this may also work on +# some *BSDs. + +#linuxaudiodev linuxaudiodev.c + + +# George Neville-Neil's timing module: + +#timing timingmodule.c + + +# The _tkinter module. +# +# The command for _tkinter is long and site specific. Please +# uncomment and/or edit those parts as indicated. If you don't have a +# specific extension (e.g. Tix or BLT), leave the corresponding line +# commented out. (Leave the trailing backslashes in! If you +# experience strange errors, you may want to join all uncommented +# lines and remove the backslashes -- the backslash interpretation is +# done by the shell's "read" command and it may not be implemented on +# every system. + +# *** Always uncomment this (leave the leading underscore in!): +# _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT \ +# *** Uncomment and edit to reflect where your Tcl/Tk libraries are: +# -L/usr/local/lib \ +# *** Uncomment and edit to reflect where your Tcl/Tk headers are: +# -I/usr/local/include \ +# *** Uncomment and edit to reflect where your X11 header files are: +# -I/usr/X11R6/include \ +# *** Or uncomment this for Solaris: +# -I/usr/openwin/include \ +# *** Uncomment and edit for Tix extension only: +# -DWITH_TIX -ltix8.1.8.2 \ +# *** Uncomment and edit for BLT extension only: +# -DWITH_BLT -I/usr/local/blt/blt8.0-unoff/include -lBLT8.0 \ +# *** Uncomment and edit for PIL (TkImaging) extension only: +# (See http://www.pythonware.com/products/pil/ for more info) +# -DWITH_PIL -I../Extensions/Imaging/libImaging tkImaging.c \ +# *** Uncomment and edit for TOGL extension only: +# -DWITH_TOGL togl.c \ +# *** Uncomment and edit to reflect your Tcl/Tk versions: +# -ltk8.2 -ltcl8.2 \ +# *** Uncomment and edit to reflect where your X11 libraries are: +# -L/usr/X11R6/lib \ +# *** Or uncomment this for Solaris: +# -L/usr/openwin/lib \ +# *** Uncomment these for TOGL extension only: +# -lGL -lGLU -lXext -lXmu \ +# *** Uncomment for AIX: +# -lld \ +# *** Always uncomment this; X11 libraries to link with: +# -lX11 + +# Lance Ellinghaus's syslog module +#syslog syslogmodule.c # syslog daemon interface + + +# Curses support, requring the System V version of curses, often +# provided by the ncurses library. e.g. on Linux, link with -lncurses +# instead of -lcurses). +# +# First, look at Setup.config; configure may have set this for you. + +#_curses _cursesmodule.c -lcurses -ltermcap +# Wrapper for the panel library that's part of ncurses and SYSV curses. +#_curses_panel _curses_panel.c -lpanel -lncurses + + +# Generic (SunOS / SVR4) dynamic loading module. +# This is not needed for dynamic loading of Python modules -- +# it is a highly experimental and dangerous device for calling +# *arbitrary* C functions in *arbitrary* shared libraries: + +#dl dlmodule.c + + +# Modules that provide persistent dictionary-like semantics. You will +# probably want to arrange for at least one of them to be available on +# your machine, though none are defined by default because of library +# dependencies. The Python module anydbm.py provides an +# implementation independent wrapper for these; dumbdbm.py provides +# similar functionality (but slower of course) implemented in Python. + +# The standard Unix dbm module has been moved to Setup.config so that +# it will be compiled as a shared library by default. Compiling it as +# a built-in module causes conflicts with the pybsddb3 module since it +# creates a static dependency on an out-of-date version of db.so. +# +# First, look at Setup.config; configure may have set this for you. + +#dbm dbmmodule.c # dbm(3) may require -lndbm or similar + +# Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: +# +# First, look at Setup.config; configure may have set this for you. + +#gdbm gdbmmodule.c -I/usr/local/include -L/usr/local/lib -lgdbm + + +# Sleepycat Berkeley DB interface. +# +# This requires the Sleepycat DB code, see http://www.sleepycat.com/ +# The earliest supported version of that library is 3.0, the latest +# supported version is 4.0 (4.1 is specifically not supported, as that +# changes the semantics of transactional databases). A list of available +# releases can be found at +# +# http://www.sleepycat.com/update/index.html +# +# Edit the variables DB and DBLIBVERto point to the db top directory +# and the subdirectory of PORT where you built it. +#DB=/usr/local/BerkeleyDB.4.0 +#DBLIBVER=4.0 +#DBINC=$(DB)/include +#DBLIB=$(DB)/lib +#_bsddb _bsddb.c -I$(DBINC) -L$(DBLIB) -ldb-$(DBLIBVER) + +# Historical Berkeley DB 1.85 +# +# This module is deprecated; the 1.85 version of the Berkeley DB library has +# bugs that can cause data corruption. If you can, use later versions of the +# library instead, available from . + +#DB=/depot/sundry/src/berkeley-db/db.1.85 +#DBPORT=$(DB)/PORT/irix.5.3 +#bsddb185 bsddbmodule.c -I$(DBPORT)/include -I$(DBPORT) $(DBPORT)/libdb.a + + + +# Helper module for various ascii-encoders +#binascii binascii.c + +# Fred Drake's interface to the Python parser +#parser parsermodule.c + +# cStringIO and cPickle +#cStringIO cStringIO.c +#cPickle cPickle.c + + +# Lee Busby's SIGFPE modules. +# The library to link fpectl with is platform specific. +# Choose *one* of the options below for fpectl: + +# For SGI IRIX (tested on 5.3): +#fpectl fpectlmodule.c -lfpe + +# For Solaris with SunPro compiler (tested on Solaris 2.5 with SunPro C 4.2): +# (Without the compiler you don't have -lsunmath.) +#fpectl fpectlmodule.c -R/opt/SUNWspro/lib -lsunmath -lm + +# For other systems: see instructions in fpectlmodule.c. +#fpectl fpectlmodule.c ... + +# Test module for fpectl. No extra libraries needed. +#fpetest fpetestmodule.c + +# Andrew Kuchling's zlib module. +# This require zlib 1.1.3 (or later). +# See http://www.gzip.org/zlib/ +#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz + +# Interface to the Expat XML parser +# +# Expat was written by James Clark and is now maintained by a group of +# developers on SourceForge; see www.libexpat.org for more +# information. The pyexpat module was written by Paul Prescod after a +# prototype by Jack Jansen. Source of Expat 1.95.2 is included in +# Modules/expat/. Usage of a system shared libexpat.so/expat.dll is +# not advised. +# +# More information on Expat can be found at www.libexpat.org. +# +#EXPAT_DIR=/usr/local/src/expat-1.95.2 +#pyexpat pyexpat.c -DHAVE_EXPAT_H -I$(EXPAT_DIR)/lib -L$(EXPAT_DIR) -lexpat + + +# Hye-Shik Chang's CJKCodecs + +# multibytecodec is required for all the other CJK codec modules +#_multibytecodec cjkcodecs/multibytecodec.c + +#_codecs_cn cjkcodecs/_codecs_cn.c +#_codecs_hk cjkcodecs/_codecs_hk.c +#_codecs_iso2022 cjkcodecs/_codecs_iso2022.c +#_codecs_jp cjkcodecs/_codecs_jp.c +#_codecs_kr cjkcodecs/_codecs_kr.c +#_codecs_tw cjkcodecs/_codecs_tw.c + +# Example -- included for reference only: +# xx xxmodule.c + +# Another example -- the 'xxsubtype' module shows C-level subtyping in action +xxsubtype xxsubtype.c + +# uncomment if you'd like to compile stackless statically. +# Note that the static build puts the .o files into Modules. +#SLP=./Stackless +#stackless $(SLP)/stacklessmodule.c $(SLP)/atomicobject.c $(SLP)/cframeobject.c $(SLP)/channelobject.c $(SLP)/flextype.c $(SLP)/scheduling.c $(SLP)/schedulerobject.c $(SLP)/stackless_debug.c $(SLP)/stackless_util.c $(SLP)/taskletobject.c Modified: stackless/Python-2.4.3/dev/Modules/config.c.in ============================================================================== --- stackless/Python-2.4.3/dev/Modules/config.c.in (original) +++ stackless/Python-2.4.3/dev/Modules/config.c.in Fri May 5 19:50:05 2006 @@ -1,48 +1,48 @@ -/* -*- C -*- *********************************************** -Copyright (c) 2000, BeOpen.com. -Copyright (c) 1995-2000, Corporation for National Research Initiatives. -Copyright (c) 1990-1995, Stichting Mathematisch Centrum. -All rights reserved. - -See the file "Misc/COPYRIGHT" for information on usage and -redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. -******************************************************************/ - -/* Module configuration */ - -/* !!! !!! !!! This file is edited by the makesetup script !!! !!! !!! */ - -/* This file contains the table of built-in modules. - See init_builtin() in import.c. */ - -#include "Python.h" - - -/* -- ADDMODULE MARKER 1 -- */ - -extern void PyMarshal_Init(void); -extern void initimp(void); -extern void initgc(void); - -struct _inittab _PyImport_Inittab[] = { - -/* -- ADDMODULE MARKER 2 -- */ - - /* This module lives in marshal.c */ - {"marshal", PyMarshal_Init}, - - /* This lives in import.c */ - {"imp", initimp}, - - /* These entries are here for sys.builtin_module_names */ - {"__main__", NULL}, - {"__builtin__", NULL}, - {"sys", NULL}, - {"exceptions", NULL}, - - /* This lives in gcmodule.c */ - {"gc", initgc}, - - /* Sentinel */ - {0, 0} -}; +/* -*- C -*- *********************************************** +Copyright (c) 2000, BeOpen.com. +Copyright (c) 1995-2000, Corporation for National Research Initiatives. +Copyright (c) 1990-1995, Stichting Mathematisch Centrum. +All rights reserved. + +See the file "Misc/COPYRIGHT" for information on usage and +redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. +******************************************************************/ + +/* Module configuration */ + +/* !!! !!! !!! This file is edited by the makesetup script !!! !!! !!! */ + +/* This file contains the table of built-in modules. + See init_builtin() in import.c. */ + +#include "Python.h" + + +/* -- ADDMODULE MARKER 1 -- */ + +extern void PyMarshal_Init(void); +extern void initimp(void); +extern void initgc(void); + +struct _inittab _PyImport_Inittab[] = { + +/* -- ADDMODULE MARKER 2 -- */ + + /* This module lives in marshal.c */ + {"marshal", PyMarshal_Init}, + + /* This lives in import.c */ + {"imp", initimp}, + + /* These entries are here for sys.builtin_module_names */ + {"__main__", NULL}, + {"__builtin__", NULL}, + {"sys", NULL}, + {"exceptions", NULL}, + + /* This lives in gcmodule.c */ + {"gc", initgc}, + + /* Sentinel */ + {0, 0} +}; Modified: stackless/Python-2.4.3/dev/Modules/makesetup ============================================================================== --- stackless/Python-2.4.3/dev/Modules/makesetup (original) +++ stackless/Python-2.4.3/dev/Modules/makesetup Fri May 5 19:50:05 2006 @@ -1,297 +1,297 @@ -#! /bin/sh - -# Convert templates into Makefile and config.c, based on the module -# definitions found in the file Setup. -# -# Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...] -# -# Options: -# -s directory: alternative source directory (default .) -# -l directory: library source directory (default derived from $0) -# -c file: alternative config.c template (default $libdir/config.c.in) -# -c -: don't write config.c -# -m file: alternative Makefile template (default ./Makefile.pre) -# -m -: don't write Makefile -# -# Remaining arguments are one or more Setup files (default ./Setup). -# Setup files after a -n option are used for their variables, modules -# and libraries but not for their .o files. -# -# See Setup.dist for a description of the format of the Setup file. -# -# The following edits are made: -# -# Copying config.c.in to config.c: -# - insert an identifying comment at the start -# - for each mentioned in Setup before *noconfig*: -# + insert 'extern void init(void);' before MARKER 1 -# + insert '{"", initmodule},' before MARKER 2 -# -# Copying Makefile.pre to Makefile: -# - insert an identifying comment at the start -# - replace _MODOBJS_ by the list of objects from Setup (except for -# Setup files after a -n option) -# - replace _MODLIBS_ by the list of libraries from Setup -# - for each object file mentioned in Setup, append a rule -# '.o: .c; ' to the end of the Makefile -# - for each module mentioned in Setup, append a rule -# which creates a shared library version to the end of the Makefile -# - for each variable definition found in Setup, insert the definition -# before the comment 'Definitions added by makesetup' - -# Loop over command line options -usage=' -usage: makesetup [-s srcdir] [-l libdir] [-c config.c.in] [-m Makefile.pre] - [Setup] ... [-n [Setup] ...]' -srcdir='.' -libdir='' -config='' -makepre='' -noobjects='' -doconfig=yes -while : -do - case $1 in - -s) shift; srcdir=$1; shift;; - -l) shift; libdir=$1; shift;; - -c) shift; config=$1; shift;; - -m) shift; makepre=$1; shift;; - --) shift; break;; - -n) noobjects=yes;; - -*) echo "$usage" 1>&2; exit 2;; - *) break;; - esac -done - -# Set default libdir and config if not set by command line -# (Not all systems have dirname) -case $libdir in -'') case $0 in - */*) libdir=`echo $0 | sed 's,/[^/]*$,,'`;; - *) libdir=.;; - esac;; -esac -case $config in -'') config=$libdir/config.c.in;; -esac -case $makepre in -'') makepre=Makefile.pre;; -esac - -# Newline for sed i and a commands -NL='\ -' - -# Setup to link with extra libraries when makeing shared extensions. -# Currently, only Cygwin needs this baggage. -case `uname -s` in -CYGWIN*) if test $libdir = . - then - ExtraLibDir=. - else - ExtraLibDir='$(LIBPL)' - fi - ExtraLibs="-L$ExtraLibDir -lpython\$(VERSION)";; -esac - -# Main loop -for i in ${*-Setup} -do - case $i in - -n) echo '*noobjects*';; - *) echo '*doconfig*'; cat "$i";; - esac -done | -sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | -( - rulesf="@rules.$$" - trap 'rm -f $rulesf' 0 1 2 3 - echo " -# Rules appended by makedepend -" >$rulesf - DEFS= - MODS= - SHAREDMODS= - OBJS= - LIBS= - LOCALLIBS= - BASELIBS= - while read line - do - # to handle backslashes for sh's that don't automatically - # continue a read when the last char is a backslash - while echo $line | grep '\\$' > /dev/null - do - read extraline - line=`echo $line| sed s/.$//`$extraline - done - - # Output DEFS in reverse order so first definition overrides - case $line in - *=*) DEFS="$line$NL$DEFS"; continue;; - 'include '*) DEFS="$line$NL$DEFS"; continue;; - '*noobjects*') - case $noobjects in - yes) ;; - *) LOCALLIBS=$LIBS; LIBS=;; - esac - noobjects=yes; - continue;; - '*doconfig*') doconfig=yes; continue;; - '*static*') doconfig=yes; continue;; - '*noconfig*') doconfig=no; continue;; - '*shared*') doconfig=no; continue;; - esac - srcs= - cpps= - libs= - mods= - skip= - for arg in $line - do - case $skip in - libs) libs="$libs $arg"; skip=; continue;; - cpps) cpps="$cpps $arg"; skip=; continue;; - srcs) srcs="$srcs $arg"; skip=; continue;; - esac - case $arg in - -framework) libs="$libs $arg"; skip=libs; - # OSX/OSXS/Darwin framework link cmd - ;; - -[IDUCfF]*) cpps="$cpps $arg";; - -Xcompiler) skip=cpps;; - -Xlinker) libs="$libs $arg"; skip=libs;; - -rpath) libs="$libs $arg"; skip=libs;; - --rpath) libs="$libs $arg"; skip=libs;; - -[A-Zl]*) libs="$libs $arg";; - *.a) libs="$libs $arg";; - *.so) libs="$libs $arg";; - *.sl) libs="$libs $arg";; - /*.o) libs="$libs $arg";; - *.def) libs="$libs $arg";; - *.o) srcs="$srcs `basename $arg .o`.c";; - *.[cC]) srcs="$srcs $arg";; - *.m) srcs="$srcs $arg";; # Objective-C src - *.cc) srcs="$srcs $arg";; - *.c++) srcs="$srcs $arg";; - *.cxx) srcs="$srcs $arg";; - *.cpp) srcs="$srcs $arg";; - \$*) libs="$libs $arg" - cpps="$cpps $arg";; - *.*) echo 1>&2 "bad word $arg in $line" - exit 1;; - -u) skip=libs; libs="$libs -u";; - [a-zA-Z_]*) mods="$mods $arg";; - *) echo 1>&2 "bad word $arg in $line" - exit 1;; - esac - done - case $doconfig in - yes) - LIBS="$LIBS $libs" - MODS="$MODS $mods" - ;; - esac - case $noobjects in - yes) continue;; - esac - objs='' - for src in $srcs - do - case $src in - *.c) obj=`basename $src .c`.o; cc='$(CC)';; - *.cc) obj=`basename $src .cc`.o; cc='$(CXX)';; - *.c++) obj=`basename $src .c++`.o; cc='$(CXX)';; - *.C) obj=`basename $src .C`.o; cc='$(CXX)';; - *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; - *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; - *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C - *) continue;; - esac - obj="$srcdir/$obj" - objs="$objs $obj" - case $src in - glmodule.c) ;; - /*) ;; - \$*) ;; - *) src='$(srcdir)/'"$srcdir/$src";; - esac - case $doconfig in - no) cc="$cc \$(CCSHARED) \$(CFLAGS) \$(CPPFLAGS)";; - *) - cc="$cc \$(PY_CFLAGS)";; - esac - rule="$obj: $src; $cc $cpps -c $src -o $obj" - echo "$rule" >>$rulesf - done - case $doconfig in - yes) OBJS="$OBJS $objs";; - esac - for mod in $mods - do - case $objs in - *$mod.o*) base=$mod;; - *) base=${mod}module;; - esac - file="$srcdir/$base\$(SO)" - case $doconfig in - no) SHAREDMODS="$SHAREDMODS $file";; - esac - rule="$file: $objs" - rule="$rule; \$(LDSHARED) $objs $libs $ExtraLibs -o $file" - echo "$rule" >>$rulesf - done - done - - case $SHAREDMODS in - '') ;; - *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; - esac - - case $noobjects in - yes) BASELIBS=$LIBS;; - *) LOCALLIBS=$LIBS;; - esac - LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)' - DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS" - DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS" - - EXTDECLS= - INITBITS= - for mod in $MODS - do - EXTDECLS="${EXTDECLS}extern void init$mod(void);$NL" - INITBITS="${INITBITS} {\"$mod\", init$mod},$NL" - done - - - case $config in - -) ;; - *) sed -e " - 1i$NL/* Generated automatically from $config by makesetup. */ - /MARKER 1/i$NL$EXTDECLS - - /MARKER 2/i$NL$INITBITS - - " $config >config.c - ;; - esac - - case $makepre in - -) ;; - *) sedf="@sed.in.$$" - trap 'rm -f $sedf' 0 1 2 3 - echo "1i\\" >$sedf - str="# Generated automatically from $makepre by makesetup." - echo "$str" >>$sedf - echo "s%_MODOBJS_%$OBJS%" >>$sedf - echo "s%_MODLIBS_%$LIBS%" >>$sedf - echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf - sed -f $sedf $makepre >Makefile - cat $rulesf >>Makefile - rm -f $sedf - ;; - esac - - rm -f $rulesf -) +#! /bin/sh + +# Convert templates into Makefile and config.c, based on the module +# definitions found in the file Setup. +# +# Usage: makesetup [-s dir] [-c file] [-m file] [Setup] ... [-n [Setup] ...] +# +# Options: +# -s directory: alternative source directory (default .) +# -l directory: library source directory (default derived from $0) +# -c file: alternative config.c template (default $libdir/config.c.in) +# -c -: don't write config.c +# -m file: alternative Makefile template (default ./Makefile.pre) +# -m -: don't write Makefile +# +# Remaining arguments are one or more Setup files (default ./Setup). +# Setup files after a -n option are used for their variables, modules +# and libraries but not for their .o files. +# +# See Setup.dist for a description of the format of the Setup file. +# +# The following edits are made: +# +# Copying config.c.in to config.c: +# - insert an identifying comment at the start +# - for each mentioned in Setup before *noconfig*: +# + insert 'extern void init(void);' before MARKER 1 +# + insert '{"", initmodule},' before MARKER 2 +# +# Copying Makefile.pre to Makefile: +# - insert an identifying comment at the start +# - replace _MODOBJS_ by the list of objects from Setup (except for +# Setup files after a -n option) +# - replace _MODLIBS_ by the list of libraries from Setup +# - for each object file mentioned in Setup, append a rule +# '.o: .c; ' to the end of the Makefile +# - for each module mentioned in Setup, append a rule +# which creates a shared library version to the end of the Makefile +# - for each variable definition found in Setup, insert the definition +# before the comment 'Definitions added by makesetup' + +# Loop over command line options +usage=' +usage: makesetup [-s srcdir] [-l libdir] [-c config.c.in] [-m Makefile.pre] + [Setup] ... [-n [Setup] ...]' +srcdir='.' +libdir='' +config='' +makepre='' +noobjects='' +doconfig=yes +while : +do + case $1 in + -s) shift; srcdir=$1; shift;; + -l) shift; libdir=$1; shift;; + -c) shift; config=$1; shift;; + -m) shift; makepre=$1; shift;; + --) shift; break;; + -n) noobjects=yes;; + -*) echo "$usage" 1>&2; exit 2;; + *) break;; + esac +done + +# Set default libdir and config if not set by command line +# (Not all systems have dirname) +case $libdir in +'') case $0 in + */*) libdir=`echo $0 | sed 's,/[^/]*$,,'`;; + *) libdir=.;; + esac;; +esac +case $config in +'') config=$libdir/config.c.in;; +esac +case $makepre in +'') makepre=Makefile.pre;; +esac + +# Newline for sed i and a commands +NL='\ +' + +# Setup to link with extra libraries when makeing shared extensions. +# Currently, only Cygwin needs this baggage. +case `uname -s` in +CYGWIN*) if test $libdir = . + then + ExtraLibDir=. + else + ExtraLibDir='$(LIBPL)' + fi + ExtraLibs="-L$ExtraLibDir -lpython\$(VERSION)";; +esac + +# Main loop +for i in ${*-Setup} +do + case $i in + -n) echo '*noobjects*';; + *) echo '*doconfig*'; cat "$i";; + esac +done | +sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' | +( + rulesf="@rules.$$" + trap 'rm -f $rulesf' 0 1 2 3 + echo " +# Rules appended by makedepend +" >$rulesf + DEFS= + MODS= + SHAREDMODS= + OBJS= + LIBS= + LOCALLIBS= + BASELIBS= + while read line + do + # to handle backslashes for sh's that don't automatically + # continue a read when the last char is a backslash + while echo $line | grep '\\$' > /dev/null + do + read extraline + line=`echo $line| sed s/.$//`$extraline + done + + # Output DEFS in reverse order so first definition overrides + case $line in + *=*) DEFS="$line$NL$DEFS"; continue;; + 'include '*) DEFS="$line$NL$DEFS"; continue;; + '*noobjects*') + case $noobjects in + yes) ;; + *) LOCALLIBS=$LIBS; LIBS=;; + esac + noobjects=yes; + continue;; + '*doconfig*') doconfig=yes; continue;; + '*static*') doconfig=yes; continue;; + '*noconfig*') doconfig=no; continue;; + '*shared*') doconfig=no; continue;; + esac + srcs= + cpps= + libs= + mods= + skip= + for arg in $line + do + case $skip in + libs) libs="$libs $arg"; skip=; continue;; + cpps) cpps="$cpps $arg"; skip=; continue;; + srcs) srcs="$srcs $arg"; skip=; continue;; + esac + case $arg in + -framework) libs="$libs $arg"; skip=libs; + # OSX/OSXS/Darwin framework link cmd + ;; + -[IDUCfF]*) cpps="$cpps $arg";; + -Xcompiler) skip=cpps;; + -Xlinker) libs="$libs $arg"; skip=libs;; + -rpath) libs="$libs $arg"; skip=libs;; + --rpath) libs="$libs $arg"; skip=libs;; + -[A-Zl]*) libs="$libs $arg";; + *.a) libs="$libs $arg";; + *.so) libs="$libs $arg";; + *.sl) libs="$libs $arg";; + /*.o) libs="$libs $arg";; + *.def) libs="$libs $arg";; + *.o) srcs="$srcs `basename $arg .o`.c";; + *.[cC]) srcs="$srcs $arg";; + *.m) srcs="$srcs $arg";; # Objective-C src + *.cc) srcs="$srcs $arg";; + *.c++) srcs="$srcs $arg";; + *.cxx) srcs="$srcs $arg";; + *.cpp) srcs="$srcs $arg";; + \$*) libs="$libs $arg" + cpps="$cpps $arg";; + *.*) echo 1>&2 "bad word $arg in $line" + exit 1;; + -u) skip=libs; libs="$libs -u";; + [a-zA-Z_]*) mods="$mods $arg";; + *) echo 1>&2 "bad word $arg in $line" + exit 1;; + esac + done + case $doconfig in + yes) + LIBS="$LIBS $libs" + MODS="$MODS $mods" + ;; + esac + case $noobjects in + yes) continue;; + esac + objs='' + for src in $srcs + do + case $src in + *.c) obj=`basename $src .c`.o; cc='$(CC)';; + *.cc) obj=`basename $src .cc`.o; cc='$(CXX)';; + *.c++) obj=`basename $src .c++`.o; cc='$(CXX)';; + *.C) obj=`basename $src .C`.o; cc='$(CXX)';; + *.cxx) obj=`basename $src .cxx`.o; cc='$(CXX)';; + *.cpp) obj=`basename $src .cpp`.o; cc='$(CXX)';; + *.m) obj=`basename $src .m`.o; cc='$(CC)';; # Obj-C + *) continue;; + esac + obj="$srcdir/$obj" + objs="$objs $obj" + case $src in + glmodule.c) ;; + /*) ;; + \$*) ;; + *) src='$(srcdir)/'"$srcdir/$src";; + esac + case $doconfig in + no) cc="$cc \$(CCSHARED) \$(CFLAGS) \$(CPPFLAGS)";; + *) + cc="$cc \$(PY_CFLAGS)";; + esac + rule="$obj: $src; $cc $cpps -c $src -o $obj" + echo "$rule" >>$rulesf + done + case $doconfig in + yes) OBJS="$OBJS $objs";; + esac + for mod in $mods + do + case $objs in + *$mod.o*) base=$mod;; + *) base=${mod}module;; + esac + file="$srcdir/$base\$(SO)" + case $doconfig in + no) SHAREDMODS="$SHAREDMODS $file";; + esac + rule="$file: $objs" + rule="$rule; \$(LDSHARED) $objs $libs $ExtraLibs -o $file" + echo "$rule" >>$rulesf + done + done + + case $SHAREDMODS in + '') ;; + *) DEFS="SHAREDMODS=$SHAREDMODS$NL$DEFS";; + esac + + case $noobjects in + yes) BASELIBS=$LIBS;; + *) LOCALLIBS=$LIBS;; + esac + LIBS='$(LOCALMODLIBS) $(BASEMODLIBS)' + DEFS="BASEMODLIBS=$BASELIBS$NL$DEFS" + DEFS="LOCALMODLIBS=$LOCALLIBS$NL$DEFS" + + EXTDECLS= + INITBITS= + for mod in $MODS + do + EXTDECLS="${EXTDECLS}extern void init$mod(void);$NL" + INITBITS="${INITBITS} {\"$mod\", init$mod},$NL" + done + + + case $config in + -) ;; + *) sed -e " + 1i$NL/* Generated automatically from $config by makesetup. */ + /MARKER 1/i$NL$EXTDECLS + + /MARKER 2/i$NL$INITBITS + + " $config >config.c + ;; + esac + + case $makepre in + -) ;; + *) sedf="@sed.in.$$" + trap 'rm -f $sedf' 0 1 2 3 + echo "1i\\" >$sedf + str="# Generated automatically from $makepre by makesetup." + echo "$str" >>$sedf + echo "s%_MODOBJS_%$OBJS%" >>$sedf + echo "s%_MODLIBS_%$LIBS%" >>$sedf + echo "/Definitions added by makesetup/a$NL$NL$DEFS" >>$sedf + sed -f $sedf $makepre >Makefile + cat $rulesf >>Makefile + rm -f $sedf + ;; + esac + + rm -f $rulesf +) From python-checkins at python.org Fri May 5 20:00:16 2006 From: python-checkins at python.org (richard.tew) Date: Fri, 5 May 2006 20:00:16 +0200 (CEST) Subject: [Python-checkins] r45912 - stackless/Python-2.4.3/dev/configure Message-ID: <20060505180016.389501E4017@bag.python.org> Author: richard.tew Date: Fri May 5 20:00:15 2006 New Revision: 45912 Modified: stackless/Python-2.4.3/dev/configure (props changed) Log: Made it executable. From python-checkins at python.org Fri May 5 20:42:14 2006 From: python-checkins at python.org (thomas.heller) Date: Fri, 5 May 2006 20:42:14 +0200 (CEST) Subject: [Python-checkins] r45913 - python/trunk/Modules/_ctypes/_ctypes_test.c Message-ID: <20060505184214.EF9F91E4008@bag.python.org> Author: thomas.heller Date: Fri May 5 20:42:14 2006 New Revision: 45913 Modified: python/trunk/Modules/_ctypes/_ctypes_test.c Log: Export the 'free' standard C function for use in the test suite. Modified: python/trunk/Modules/_ctypes/_ctypes_test.c ============================================================================== --- python/trunk/Modules/_ctypes/_ctypes_test.c (original) +++ python/trunk/Modules/_ctypes/_ctypes_test.c Fri May 5 20:42:14 2006 @@ -96,6 +96,11 @@ return dst; } +EXPORT(void) free(void *ptr) +{ + free(ptr); +} + #ifdef HAVE_WCHAR_H EXPORT(wchar_t *) my_wcsdup(wchar_t *src) { From python-checkins at python.org Fri May 5 20:43:24 2006 From: python-checkins at python.org (thomas.heller) Date: Fri, 5 May 2006 20:43:24 +0200 (CEST) Subject: [Python-checkins] r45914 - python/trunk/Lib/ctypes/test/test_slicing.py Message-ID: <20060505184324.EB7CD1E400C@bag.python.org> Author: thomas.heller Date: Fri May 5 20:43:24 2006 New Revision: 45914 Modified: python/trunk/Lib/ctypes/test/test_slicing.py Log: Fix memory leaks in the ctypes test suite, reported by valgrind, by free()ing the memory we allocate. Modified: python/trunk/Lib/ctypes/test/test_slicing.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_slicing.py (original) +++ python/trunk/Lib/ctypes/test/test_slicing.py Fri May 5 20:43:24 2006 @@ -39,16 +39,19 @@ dll = CDLL(_ctypes_test.__file__) dll.my_strdup.restype = POINTER(c_char) + dll.my_free.restype = None res = dll.my_strdup(s) self.failUnlessEqual(res[:len(s)], s) import operator self.assertRaises(TypeError, operator.setslice, res, 0, 5, u"abcde") + dll.free(res) dll.my_strdup.restype = POINTER(c_byte) res = dll.my_strdup(s) self.failUnlessEqual(res[:len(s)-1], range(ord("a"), ord("z")+1)) + dll.free(res) def test_char_array(self): s = "abcdefghijklmnopqrstuvwxyz\0" @@ -68,12 +71,14 @@ dll = CDLL(_ctypes_test.__file__) dll.my_wcsdup.restype = POINTER(c_wchar) dll.my_wcsdup.argtypes = POINTER(c_wchar), + dll.my_free.restype = None res = dll.my_wcsdup(s) self.failUnlessEqual(res[:len(s)], s) import operator self.assertRaises(TypeError, operator.setslice, res, 0, 5, u"abcde") + dll.free(res) if sizeof(c_wchar) == sizeof(c_short): dll.my_wcsdup.restype = POINTER(c_short) @@ -81,8 +86,11 @@ dll.my_wcsdup.restype = POINTER(c_int) elif sizeof(c_wchar) == sizeof(c_long): dll.my_wcsdup.restype = POINTER(c_long) + else: + return res = dll.my_wcsdup(s) self.failUnlessEqual(res[:len(s)-1], range(ord("a"), ord("z")+1)) + dll.free(res) ################################################################ From python-checkins at python.org Fri May 5 20:46:28 2006 From: python-checkins at python.org (thomas.heller) Date: Fri, 5 May 2006 20:46:28 +0200 (CEST) Subject: [Python-checkins] r45915 - python/trunk/Lib/ctypes/test/test_slicing.py Message-ID: <20060505184628.5ED141E400C@bag.python.org> Author: thomas.heller Date: Fri May 5 20:46:27 2006 New Revision: 45915 Modified: python/trunk/Lib/ctypes/test/test_slicing.py Log: oops - the function is exported as 'my_free', not 'free'. Modified: python/trunk/Lib/ctypes/test/test_slicing.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_slicing.py (original) +++ python/trunk/Lib/ctypes/test/test_slicing.py Fri May 5 20:46:27 2006 @@ -46,12 +46,12 @@ import operator self.assertRaises(TypeError, operator.setslice, res, 0, 5, u"abcde") - dll.free(res) + dll.my_free(res) dll.my_strdup.restype = POINTER(c_byte) res = dll.my_strdup(s) self.failUnlessEqual(res[:len(s)-1], range(ord("a"), ord("z")+1)) - dll.free(res) + dll.my_free(res) def test_char_array(self): s = "abcdefghijklmnopqrstuvwxyz\0" @@ -78,7 +78,7 @@ import operator self.assertRaises(TypeError, operator.setslice, res, 0, 5, u"abcde") - dll.free(res) + dll.my_free(res) if sizeof(c_wchar) == sizeof(c_short): dll.my_wcsdup.restype = POINTER(c_short) @@ -90,7 +90,7 @@ return res = dll.my_wcsdup(s) self.failUnlessEqual(res[:len(s)-1], range(ord("a"), ord("z")+1)) - dll.free(res) + dll.my_free(res) ################################################################ From python-checkins at python.org Fri May 5 21:14:24 2006 From: python-checkins at python.org (thomas.heller) Date: Fri, 5 May 2006 21:14:24 +0200 (CEST) Subject: [Python-checkins] r45916 - python/trunk/Modules/_ctypes/_ctypes_test.c Message-ID: <20060505191424.CD2C41E400B@bag.python.org> Author: thomas.heller Date: Fri May 5 21:14:24 2006 New Revision: 45916 Modified: python/trunk/Modules/_ctypes/_ctypes_test.c Log: Clean up. Modified: python/trunk/Modules/_ctypes/_ctypes_test.c ============================================================================== --- python/trunk/Modules/_ctypes/_ctypes_test.c (original) +++ python/trunk/Modules/_ctypes/_ctypes_test.c Fri May 5 21:14:24 2006 @@ -96,7 +96,7 @@ return dst; } -EXPORT(void) free(void *ptr) +EXPORT(void)my_free(void *ptr) { free(ptr); } @@ -204,11 +204,6 @@ return 0; } -EXPORT(void) my_free(void *p) -{ - printf("my_free got %p\n", p); -} - typedef struct { char *name; char *value; From python-checkins at python.org Fri May 5 21:26:02 2006 From: python-checkins at python.org (richard.tew) Date: Fri, 5 May 2006 21:26:02 +0200 (CEST) Subject: [Python-checkins] r45917 - stackless/Python-2.4.3/dev/Lib/test/output/test_MimeWriter stackless/Python-2.4.3/dev/Lib/test/output/test_asynchat stackless/Python-2.4.3/dev/Lib/test/output/test_augassign stackless/Python-2.4.3/dev/Lib/test/output/test_cgi stackless/Python-2.4.3/dev/Lib/test/output/test_class stackless/Python-2.4.3/dev/Lib/test/output/test_coercion stackless/Python-2.4.3/dev/Lib/test/output/test_compare stackless/Python-2.4.3/dev/Lib/test/output/test_cookie stackless/Python-2.4.3/dev/Lib/test/output/test_exceptions stackless/Python-2.4.3/dev/Lib/test/output/test_extcall stackless/Python-2.4.3/dev/Lib/test/output/test_frozen stackless/Python-2.4.3/dev/Lib/test/output/test_global stackless/Python-2.4.3/dev/Lib/test/output/test_grammar stackless/Python-2.4.3/dev/Lib/test/output/test_httplib stackless/Python-2.4.3/dev/Lib/test/output/test_linuxaudiodev stackless/Python-2.4.3/dev/Lib/test/output/test_logging stackless/Python-2.4.3/dev/Lib/test/output/test_math stackless/Python-2.4.3/dev/Lib/test/output/test_mmap stackless/Python-2.4.3/dev/Lib/test/output/test_new stackless/Python-2.4.3/dev/Lib/test/output/test_nis stackless/Python-2.4.3/dev/Lib/test/output/test_opcodes stackless/Python-2.4.3/dev/Lib/test/output/test_openpty stackless/Python-2.4.3/dev/Lib/test/output/test_operations stackless/Python-2.4.3/dev/Lib/test/output/test_ossaudiodev stackless/Python-2.4.3/dev/Lib/test/output/test_pep277 stackless/Python-2.4.3/dev/Lib/test/output/test_pkg stackless/Python-2.4.3/dev/Lib/test/output/test_poll stackless/Python-2.4.3/dev/Lib/test/output/test_popen stackless/Python-2.4.3/dev/Lib/test/output/test_popen2 stackless/Python-2.4.3/dev/Lib/test/output/test_profile stackless/Python-2.4.3/dev/Lib/test/output/test_pty stackless/Python-2.4.3/dev/Lib/test/output/test_pyexpat stackless/Python-2.4.3/dev/Lib/test/output/test_regex stackless/Python-2.4.3/dev/Lib/test/output/test_resource stackless/Python-2.4.3/dev/Lib/test/output/test_rgbimg stackless/Python-2.4.3/dev/Lib/test/output/test_scope stackless/Python-2.4.3/dev/Lib/test/output/test_signal stackless/Python-2.4.3/dev/Lib/test/output/test_thread stackless/Python-2.4.3/dev/Lib/test/output/test_threadedtempfile stackless/Python-2.4.3/dev/Lib/test/output/test_tokenize stackless/Python-2.4.3/dev/Lib/test/output/test_types stackless/Python-2.4.3/dev/Lib/test/output/test_winreg stackless/Python-2.4.3/dev/Lib/test/output/xmltests Message-ID: <20060505192602.6ECE11E401A@bag.python.org> Author: richard.tew Date: Fri May 5 21:25:58 2006 New Revision: 45917 Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_MimeWriter (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_asynchat (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_augassign (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_cgi (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_class (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_coercion (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_compare (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_cookie (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_exceptions (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_extcall (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_frozen (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_global (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_grammar (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_httplib (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_linuxaudiodev (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_logging (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_math (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_mmap (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_new (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_nis (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_opcodes (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_openpty (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_operations (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_ossaudiodev (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_pep277 (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_pkg (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_poll (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_popen (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_popen2 (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_profile (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_pty (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_pyexpat (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_regex (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_resource (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_rgbimg (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_scope (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_signal (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_thread (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_threadedtempfile (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_tokenize (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_types (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/test_winreg (contents, props changed) stackless/Python-2.4.3/dev/Lib/test/output/xmltests (contents, props changed) Log: Fixed up SVN properties for Python test output files. Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_MimeWriter ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_MimeWriter (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_MimeWriter Fri May 5 21:25:58 2006 @@ -1,110 +1,110 @@ -test_MimeWriter -From: bwarsaw at cnri.reston.va.us -Date: Mon Feb 12 17:21:48 EST 1996 -To: kss-submit at cnri.reston.va.us -MIME-Version: 1.0 -Content-Type: multipart/knowbot; - boundary="801spam999"; - version="0.1" - -This is a multi-part message in MIME format. - ---801spam999 -Content-Type: multipart/knowbot-metadata; - boundary="802spam999" - - ---802spam999 -Content-Type: message/rfc822 -KP-Metadata-Type: simple -KP-Access: read-only - -KPMD-Interpreter: python -KPMD-Interpreter-Version: 1.3 -KPMD-Owner-Name: Barry Warsaw -KPMD-Owner-Rendezvous: bwarsaw at cnri.reston.va.us -KPMD-Home-KSS: kss.cnri.reston.va.us -KPMD-Identifier: hdl://cnri.kss/my_first_knowbot -KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996 - ---802spam999 -Content-Type: text/isl -KP-Metadata-Type: complex -KP-Metadata-Key: connection -KP-Access: read-only -KP-Connection-Description: Barry's Big Bass Business -KP-Connection-Id: B4 -KP-Connection-Direction: client - -INTERFACE Seller-1; - -TYPE Seller = OBJECT - DOCUMENTATION "A simple Seller interface to test ILU" - METHODS - price():INTEGER, - END; - ---802spam999 -Content-Type: message/external-body; - access-type="URL"; - URL="hdl://cnri.kss/generic-knowbot" - -Content-Type: text/isl -KP-Metadata-Type: complex -KP-Metadata-Key: generic-interface -KP-Access: read-only -KP-Connection-Description: Generic Interface for All Knowbots -KP-Connection-Id: generic-kp -KP-Connection-Direction: client - - ---802spam999-- - ---801spam999 -Content-Type: multipart/knowbot-code; - boundary="803spam999" - - ---803spam999 -Content-Type: text/plain -KP-Module-Name: BuyerKP - -class Buyer: - def __setup__(self, maxprice): - self._maxprice = maxprice - - def __main__(self, kos): - """Entry point upon arrival at a new KOS.""" - broker = kos.broker() - # B4 == Barry's Big Bass Business :-) - seller = broker.lookup('Seller_1.Seller', 'B4') - if seller: - price = seller.price() - print 'Seller wants $', price, '... ' - if price > self._maxprice: - print 'too much!' - else: - print "I'll take it!" - else: - print 'no seller found here' - ---803spam999-- - ---801spam999 -Content-Type: multipart/knowbot-state; - boundary="804spam999" -KP-Main-Module: main - - ---804spam999 -Content-Type: text/plain -KP-Module-Name: main - -# instantiate a buyer instance and put it in a magic place for the KOS -# to find. -__kp__ = Buyer() -__kp__.__setup__(500) - ---804spam999-- - ---801spam999-- +test_MimeWriter +From: bwarsaw at cnri.reston.va.us +Date: Mon Feb 12 17:21:48 EST 1996 +To: kss-submit at cnri.reston.va.us +MIME-Version: 1.0 +Content-Type: multipart/knowbot; + boundary="801spam999"; + version="0.1" + +This is a multi-part message in MIME format. + +--801spam999 +Content-Type: multipart/knowbot-metadata; + boundary="802spam999" + + +--802spam999 +Content-Type: message/rfc822 +KP-Metadata-Type: simple +KP-Access: read-only + +KPMD-Interpreter: python +KPMD-Interpreter-Version: 1.3 +KPMD-Owner-Name: Barry Warsaw +KPMD-Owner-Rendezvous: bwarsaw at cnri.reston.va.us +KPMD-Home-KSS: kss.cnri.reston.va.us +KPMD-Identifier: hdl://cnri.kss/my_first_knowbot +KPMD-Launch-Date: Mon Feb 12 16:39:03 EST 1996 + +--802spam999 +Content-Type: text/isl +KP-Metadata-Type: complex +KP-Metadata-Key: connection +KP-Access: read-only +KP-Connection-Description: Barry's Big Bass Business +KP-Connection-Id: B4 +KP-Connection-Direction: client + +INTERFACE Seller-1; + +TYPE Seller = OBJECT + DOCUMENTATION "A simple Seller interface to test ILU" + METHODS + price():INTEGER, + END; + +--802spam999 +Content-Type: message/external-body; + access-type="URL"; + URL="hdl://cnri.kss/generic-knowbot" + +Content-Type: text/isl +KP-Metadata-Type: complex +KP-Metadata-Key: generic-interface +KP-Access: read-only +KP-Connection-Description: Generic Interface for All Knowbots +KP-Connection-Id: generic-kp +KP-Connection-Direction: client + + +--802spam999-- + +--801spam999 +Content-Type: multipart/knowbot-code; + boundary="803spam999" + + +--803spam999 +Content-Type: text/plain +KP-Module-Name: BuyerKP + +class Buyer: + def __setup__(self, maxprice): + self._maxprice = maxprice + + def __main__(self, kos): + """Entry point upon arrival at a new KOS.""" + broker = kos.broker() + # B4 == Barry's Big Bass Business :-) + seller = broker.lookup('Seller_1.Seller', 'B4') + if seller: + price = seller.price() + print 'Seller wants $', price, '... ' + if price > self._maxprice: + print 'too much!' + else: + print "I'll take it!" + else: + print 'no seller found here' + +--803spam999-- + +--801spam999 +Content-Type: multipart/knowbot-state; + boundary="804spam999" +KP-Main-Module: main + + +--804spam999 +Content-Type: text/plain +KP-Module-Name: main + +# instantiate a buyer instance and put it in a magic place for the KOS +# to find. +__kp__ = Buyer() +__kp__.__setup__(500) + +--804spam999-- + +--801spam999-- Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_asynchat ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_asynchat (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_asynchat Fri May 5 21:25:58 2006 @@ -1,3 +1,3 @@ -test_asynchat -Connected -Received: 'hello world' +test_asynchat +Connected +Received: 'hello world' Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_augassign ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_augassign (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_augassign Fri May 5 21:25:58 2006 @@ -1,51 +1,51 @@ -test_augassign -6 -[6] -6 -[1, 2, 3, 4, 1, 2, 3, 4] -[1, 2, 1, 2, 3] -True -True -True -11 -True -12 -True -True -13 -__add__ called -__radd__ called -__iadd__ called -__sub__ called -__rsub__ called -__isub__ called -__mul__ called -__rmul__ called -__imul__ called -__div__ called -__rdiv__ called -__idiv__ called -__floordiv__ called -__rfloordiv__ called -__ifloordiv__ called -__mod__ called -__rmod__ called -__imod__ called -__pow__ called -__rpow__ called -__ipow__ called -__or__ called -__ror__ called -__ior__ called -__and__ called -__rand__ called -__iand__ called -__xor__ called -__rxor__ called -__ixor__ called -__rshift__ called -__rrshift__ called -__irshift__ called -__lshift__ called -__rlshift__ called -__ilshift__ called +test_augassign +6 +[6] +6 +[1, 2, 3, 4, 1, 2, 3, 4] +[1, 2, 1, 2, 3] +True +True +True +11 +True +12 +True +True +13 +__add__ called +__radd__ called +__iadd__ called +__sub__ called +__rsub__ called +__isub__ called +__mul__ called +__rmul__ called +__imul__ called +__div__ called +__rdiv__ called +__idiv__ called +__floordiv__ called +__rfloordiv__ called +__ifloordiv__ called +__mod__ called +__rmod__ called +__imod__ called +__pow__ called +__rpow__ called +__ipow__ called +__or__ called +__ror__ called +__ior__ called +__and__ called +__rand__ called +__iand__ called +__xor__ called +__rxor__ called +__ixor__ called +__rshift__ called +__rrshift__ called +__irshift__ called +__lshift__ called +__rlshift__ called +__ilshift__ called Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_cgi ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_cgi (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_cgi Fri May 5 21:25:58 2006 @@ -1,40 +1,40 @@ -test_cgi -'' => [] -'&' => [] -'&&' => [] -'=' => [('', '')] -'=a' => [('', 'a')] -'a' => [('a', '')] -'a=' => [('a', '')] -'a=' => [('a', '')] -'&a=b' => [('a', 'b')] -'a=a+b&b=b+c' => [('a', 'a b'), ('b', 'b c')] -'a=1&a=2' => [('a', '1'), ('a', '2')] -'' -'&' -'&&' -';' -';&;' -'=' -'=&=' -'=;=' -'=a' -'&=a' -'=a&' -'=&a' -'b=a' -'b+=a' -'a=b=a' -'a=+b=a' -'&b=a' -'b&=a' -'a=a+b&b=b+c' -'a=a+b&a=b+a' -'x=1&y=2.0&z=2-3.%2b0' -'x=1;y=2.0&z=2-3.%2b0' -'x=1;y=2.0;z=2-3.%2b0' -'Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env' -'group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse' -Testing log -Testing initlog 1 -Testing log 2 +test_cgi +'' => [] +'&' => [] +'&&' => [] +'=' => [('', '')] +'=a' => [('', 'a')] +'a' => [('a', '')] +'a=' => [('a', '')] +'a=' => [('a', '')] +'&a=b' => [('a', 'b')] +'a=a+b&b=b+c' => [('a', 'a b'), ('b', 'b c')] +'a=1&a=2' => [('a', '1'), ('a', '2')] +'' +'&' +'&&' +';' +';&;' +'=' +'=&=' +'=;=' +'=a' +'&=a' +'=a&' +'=&a' +'b=a' +'b+=a' +'a=b=a' +'a=+b=a' +'&b=a' +'b&=a' +'a=a+b&b=b+c' +'a=a+b&a=b+a' +'x=1&y=2.0&z=2-3.%2b0' +'x=1;y=2.0&z=2-3.%2b0' +'x=1;y=2.0;z=2-3.%2b0' +'Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env' +'group_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=Browse' +Testing log +Testing initlog 1 +Testing log 2 Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_class ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_class (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_class Fri May 5 21:25:58 2006 @@ -1,101 +1,101 @@ -test_class -__init__: () -__coerce__: (1,) -__add__: (1,) -__coerce__: (1,) -__radd__: (1,) -__coerce__: (1,) -__sub__: (1,) -__coerce__: (1,) -__rsub__: (1,) -__coerce__: (1,) -__mul__: (1,) -__coerce__: (1,) -__rmul__: (1,) -__coerce__: (1,) -__div__: (1,) -__coerce__: (1,) -__rdiv__: (1,) -__coerce__: (1,) -__mod__: (1,) -__coerce__: (1,) -__rmod__: (1,) -__coerce__: (1,) -__divmod__: (1,) -__coerce__: (1,) -__rdivmod__: (1,) -__coerce__: (1,) -__pow__: (1,) -__coerce__: (1,) -__rpow__: (1,) -__coerce__: (1,) -__rshift__: (1,) -__coerce__: (1,) -__rrshift__: (1,) -__coerce__: (1,) -__lshift__: (1,) -__coerce__: (1,) -__rlshift__: (1,) -__coerce__: (1,) -__and__: (1,) -__coerce__: (1,) -__rand__: (1,) -__coerce__: (1,) -__or__: (1,) -__coerce__: (1,) -__ror__: (1,) -__coerce__: (1,) -__xor__: (1,) -__coerce__: (1,) -__rxor__: (1,) -__contains__: (1,) -__getitem__: (1,) -__setitem__: (1, 1) -__delitem__: (1,) -__getslice__: (0, 42) -__setslice__: (0, 42, 'The Answer') -__delslice__: (0, 42) -__getitem__: (slice(2, 1024, 10),) -__setitem__: (slice(2, 1024, 10), 'A lot') -__delitem__: (slice(2, 1024, 10),) -__getitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) -__setitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100), 'Strange') -__delitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) -__getitem__: (slice(0, 42, None),) -__setitem__: (slice(0, 42, None), 'The Answer') -__delitem__: (slice(0, 42, None),) -__neg__: () -__pos__: () -__abs__: () -__int__: () -__long__: () -__float__: () -__oct__: () -__hex__: () -__hash__: () -__repr__: () -__str__: () -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__coerce__: (1,) -__cmp__: (1,) -__del__: () -__getattr__: ('spam',) -__setattr__: ('eggs', 'spam, spam, spam and ham') -__delattr__: ('cardinal',) +test_class +__init__: () +__coerce__: (1,) +__add__: (1,) +__coerce__: (1,) +__radd__: (1,) +__coerce__: (1,) +__sub__: (1,) +__coerce__: (1,) +__rsub__: (1,) +__coerce__: (1,) +__mul__: (1,) +__coerce__: (1,) +__rmul__: (1,) +__coerce__: (1,) +__div__: (1,) +__coerce__: (1,) +__rdiv__: (1,) +__coerce__: (1,) +__mod__: (1,) +__coerce__: (1,) +__rmod__: (1,) +__coerce__: (1,) +__divmod__: (1,) +__coerce__: (1,) +__rdivmod__: (1,) +__coerce__: (1,) +__pow__: (1,) +__coerce__: (1,) +__rpow__: (1,) +__coerce__: (1,) +__rshift__: (1,) +__coerce__: (1,) +__rrshift__: (1,) +__coerce__: (1,) +__lshift__: (1,) +__coerce__: (1,) +__rlshift__: (1,) +__coerce__: (1,) +__and__: (1,) +__coerce__: (1,) +__rand__: (1,) +__coerce__: (1,) +__or__: (1,) +__coerce__: (1,) +__ror__: (1,) +__coerce__: (1,) +__xor__: (1,) +__coerce__: (1,) +__rxor__: (1,) +__contains__: (1,) +__getitem__: (1,) +__setitem__: (1, 1) +__delitem__: (1,) +__getslice__: (0, 42) +__setslice__: (0, 42, 'The Answer') +__delslice__: (0, 42) +__getitem__: (slice(2, 1024, 10),) +__setitem__: (slice(2, 1024, 10), 'A lot') +__delitem__: (slice(2, 1024, 10),) +__getitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) +__setitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100), 'Strange') +__delitem__: ((slice(None, 42, None), Ellipsis, slice(None, 24, None), 24, 100),) +__getitem__: (slice(0, 42, None),) +__setitem__: (slice(0, 42, None), 'The Answer') +__delitem__: (slice(0, 42, None),) +__neg__: () +__pos__: () +__abs__: () +__int__: () +__long__: () +__float__: () +__oct__: () +__hex__: () +__hash__: () +__repr__: () +__str__: () +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__coerce__: (1,) +__cmp__: (1,) +__del__: () +__getattr__: ('spam',) +__setattr__: ('eggs', 'spam, spam, spam and ham') +__delattr__: ('cardinal',) Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_coercion ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_coercion (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_coercion Fri May 5 21:25:58 2006 @@ -1,1054 +1,1054 @@ -test_coercion -2 + 2 = 4 -2 += 2 => 4 -2 - 2 = 0 -2 -= 2 => 0 -2 * 2 = 4 -2 *= 2 => 4 -2 / 2 = 1 -2 /= 2 => 1 -2 ** 2 = 4 -2 **= 2 => 4 -2 % 2 = 0 -2 %= 2 => 0 -2 + 4.0 = 6.0 -2 += 4.0 => 6.0 -2 - 4.0 = -2.0 -2 -= 4.0 => -2.0 -2 * 4.0 = 8.0 -2 *= 4.0 => 8.0 -2 / 4.0 = 0.5 -2 /= 4.0 => 0.5 -2 ** 4.0 = 16.0 -2 **= 4.0 => 16.0 -2 % 4.0 = 2.0 -2 %= 4.0 => 2.0 -2 + 2 = 4 -2 += 2 => 4 -2 - 2 = 0 -2 -= 2 => 0 -2 * 2 = 4 -2 *= 2 => 4 -2 / 2 = 1 -2 /= 2 => 1 -2 ** 2 = 4 -2 **= 2 => 4 -2 % 2 = 0 -2 %= 2 => 0 -2 + (2+0j) = (4.0 + 0.0j) -2 += (2+0j) => (4.0 + 0.0j) -2 - (2+0j) = (0.0 + 0.0j) -2 -= (2+0j) => (0.0 + 0.0j) -2 * (2+0j) = (4.0 + 0.0j) -2 *= (2+0j) => (4.0 + 0.0j) -2 / (2+0j) = (1.0 + 0.0j) -2 /= (2+0j) => (1.0 + 0.0j) -2 ** (2+0j) = (4.0 + 0.0j) -2 **= (2+0j) => (4.0 + 0.0j) -2 % (2+0j) = (0.0 + 0.0j) -2 %= (2+0j) => (0.0 + 0.0j) -2 + [1] ... exceptions.TypeError -2 += [1] ... exceptions.TypeError -2 - [1] ... exceptions.TypeError -2 -= [1] ... exceptions.TypeError -2 * [1] = [1, 1] -2 *= [1] => [1, 1] -2 / [1] ... exceptions.TypeError -2 /= [1] ... exceptions.TypeError -2 ** [1] ... exceptions.TypeError -2 **= [1] ... exceptions.TypeError -2 % [1] ... exceptions.TypeError -2 %= [1] ... exceptions.TypeError -2 + (2,) ... exceptions.TypeError -2 += (2,) ... exceptions.TypeError -2 - (2,) ... exceptions.TypeError -2 -= (2,) ... exceptions.TypeError -2 * (2,) = (2, 2) -2 *= (2,) => (2, 2) -2 / (2,) ... exceptions.TypeError -2 /= (2,) ... exceptions.TypeError -2 ** (2,) ... exceptions.TypeError -2 **= (2,) ... exceptions.TypeError -2 % (2,) ... exceptions.TypeError -2 %= (2,) ... exceptions.TypeError -2 + None ... exceptions.TypeError -2 += None ... exceptions.TypeError -2 - None ... exceptions.TypeError -2 -= None ... exceptions.TypeError -2 * None ... exceptions.TypeError -2 *= None ... exceptions.TypeError -2 / None ... exceptions.TypeError -2 /= None ... exceptions.TypeError -2 ** None ... exceptions.TypeError -2 **= None ... exceptions.TypeError -2 % None ... exceptions.TypeError -2 %= None ... exceptions.TypeError -2 + = 4 -2 += => 4 -2 - = 0 -2 -= => 0 -2 * = 4 -2 *= => 4 -2 / = 1 -2 /= => 1 -2 ** = 4 -2 **= => 4 -2 % = 0 -2 %= => 0 -2 + = 4 -2 += => 4 -2 - = 0 -2 -= => 0 -2 * = 4 -2 *= => 4 -2 / = 1 -2 /= => 1 -2 ** = 4 -2 **= => 4 -2 % = 0 -2 %= => 0 -4.0 + 2 = 6.0 -4.0 += 2 => 6.0 -4.0 - 2 = 2.0 -4.0 -= 2 => 2.0 -4.0 * 2 = 8.0 -4.0 *= 2 => 8.0 -4.0 / 2 = 2.0 -4.0 /= 2 => 2.0 -4.0 ** 2 = 16.0 -4.0 **= 2 => 16.0 -4.0 % 2 = 0.0 -4.0 %= 2 => 0.0 -4.0 + 4.0 = 8.0 -4.0 += 4.0 => 8.0 -4.0 - 4.0 = 0.0 -4.0 -= 4.0 => 0.0 -4.0 * 4.0 = 16.0 -4.0 *= 4.0 => 16.0 -4.0 / 4.0 = 1.0 -4.0 /= 4.0 => 1.0 -4.0 ** 4.0 = 256.0 -4.0 **= 4.0 => 256.0 -4.0 % 4.0 = 0.0 -4.0 %= 4.0 => 0.0 -4.0 + 2 = 6.0 -4.0 += 2 => 6.0 -4.0 - 2 = 2.0 -4.0 -= 2 => 2.0 -4.0 * 2 = 8.0 -4.0 *= 2 => 8.0 -4.0 / 2 = 2.0 -4.0 /= 2 => 2.0 -4.0 ** 2 = 16.0 -4.0 **= 2 => 16.0 -4.0 % 2 = 0.0 -4.0 %= 2 => 0.0 -4.0 + (2+0j) = (6.0 + 0.0j) -4.0 += (2+0j) => (6.0 + 0.0j) -4.0 - (2+0j) = (2.0 + 0.0j) -4.0 -= (2+0j) => (2.0 + 0.0j) -4.0 * (2+0j) = (8.0 + 0.0j) -4.0 *= (2+0j) => (8.0 + 0.0j) -4.0 / (2+0j) = (2.0 + 0.0j) -4.0 /= (2+0j) => (2.0 + 0.0j) -4.0 ** (2+0j) = (16.0 + 0.0j) -4.0 **= (2+0j) => (16.0 + 0.0j) -4.0 % (2+0j) = (0.0 + 0.0j) -4.0 %= (2+0j) => (0.0 + 0.0j) -4.0 + [1] ... exceptions.TypeError -4.0 += [1] ... exceptions.TypeError -4.0 - [1] ... exceptions.TypeError -4.0 -= [1] ... exceptions.TypeError -4.0 * [1] ... exceptions.TypeError -4.0 *= [1] ... exceptions.TypeError -4.0 / [1] ... exceptions.TypeError -4.0 /= [1] ... exceptions.TypeError -4.0 ** [1] ... exceptions.TypeError -4.0 **= [1] ... exceptions.TypeError -4.0 % [1] ... exceptions.TypeError -4.0 %= [1] ... exceptions.TypeError -4.0 + (2,) ... exceptions.TypeError -4.0 += (2,) ... exceptions.TypeError -4.0 - (2,) ... exceptions.TypeError -4.0 -= (2,) ... exceptions.TypeError -4.0 * (2,) ... exceptions.TypeError -4.0 *= (2,) ... exceptions.TypeError -4.0 / (2,) ... exceptions.TypeError -4.0 /= (2,) ... exceptions.TypeError -4.0 ** (2,) ... exceptions.TypeError -4.0 **= (2,) ... exceptions.TypeError -4.0 % (2,) ... exceptions.TypeError -4.0 %= (2,) ... exceptions.TypeError -4.0 + None ... exceptions.TypeError -4.0 += None ... exceptions.TypeError -4.0 - None ... exceptions.TypeError -4.0 -= None ... exceptions.TypeError -4.0 * None ... exceptions.TypeError -4.0 *= None ... exceptions.TypeError -4.0 / None ... exceptions.TypeError -4.0 /= None ... exceptions.TypeError -4.0 ** None ... exceptions.TypeError -4.0 **= None ... exceptions.TypeError -4.0 % None ... exceptions.TypeError -4.0 %= None ... exceptions.TypeError -4.0 + = 6.0 -4.0 += => 6.0 -4.0 - = 2.0 -4.0 -= => 2.0 -4.0 * = 8.0 -4.0 *= => 8.0 -4.0 / = 2.0 -4.0 /= => 2.0 -4.0 ** = 16.0 -4.0 **= => 16.0 -4.0 % = 0.0 -4.0 %= => 0.0 -4.0 + = 6.0 -4.0 += => 6.0 -4.0 - = 2.0 -4.0 -= => 2.0 -4.0 * = 8.0 -4.0 *= => 8.0 -4.0 / = 2.0 -4.0 /= => 2.0 -4.0 ** = 16.0 -4.0 **= => 16.0 -4.0 % = 0.0 -4.0 %= => 0.0 -2 + 2 = 4 -2 += 2 => 4 -2 - 2 = 0 -2 -= 2 => 0 -2 * 2 = 4 -2 *= 2 => 4 -2 / 2 = 1 -2 /= 2 => 1 -2 ** 2 = 4 -2 **= 2 => 4 -2 % 2 = 0 -2 %= 2 => 0 -2 + 4.0 = 6.0 -2 += 4.0 => 6.0 -2 - 4.0 = -2.0 -2 -= 4.0 => -2.0 -2 * 4.0 = 8.0 -2 *= 4.0 => 8.0 -2 / 4.0 = 0.5 -2 /= 4.0 => 0.5 -2 ** 4.0 = 16.0 -2 **= 4.0 => 16.0 -2 % 4.0 = 2.0 -2 %= 4.0 => 2.0 -2 + 2 = 4 -2 += 2 => 4 -2 - 2 = 0 -2 -= 2 => 0 -2 * 2 = 4 -2 *= 2 => 4 -2 / 2 = 1 -2 /= 2 => 1 -2 ** 2 = 4 -2 **= 2 => 4 -2 % 2 = 0 -2 %= 2 => 0 -2 + (2+0j) = (4.0 + 0.0j) -2 += (2+0j) => (4.0 + 0.0j) -2 - (2+0j) = (0.0 + 0.0j) -2 -= (2+0j) => (0.0 + 0.0j) -2 * (2+0j) = (4.0 + 0.0j) -2 *= (2+0j) => (4.0 + 0.0j) -2 / (2+0j) = (1.0 + 0.0j) -2 /= (2+0j) => (1.0 + 0.0j) -2 ** (2+0j) = (4.0 + 0.0j) -2 **= (2+0j) => (4.0 + 0.0j) -2 % (2+0j) = (0.0 + 0.0j) -2 %= (2+0j) => (0.0 + 0.0j) -2 + [1] ... exceptions.TypeError -2 += [1] ... exceptions.TypeError -2 - [1] ... exceptions.TypeError -2 -= [1] ... exceptions.TypeError -2 * [1] = [1, 1] -2 *= [1] => [1, 1] -2 / [1] ... exceptions.TypeError -2 /= [1] ... exceptions.TypeError -2 ** [1] ... exceptions.TypeError -2 **= [1] ... exceptions.TypeError -2 % [1] ... exceptions.TypeError -2 %= [1] ... exceptions.TypeError -2 + (2,) ... exceptions.TypeError -2 += (2,) ... exceptions.TypeError -2 - (2,) ... exceptions.TypeError -2 -= (2,) ... exceptions.TypeError -2 * (2,) = (2, 2) -2 *= (2,) => (2, 2) -2 / (2,) ... exceptions.TypeError -2 /= (2,) ... exceptions.TypeError -2 ** (2,) ... exceptions.TypeError -2 **= (2,) ... exceptions.TypeError -2 % (2,) ... exceptions.TypeError -2 %= (2,) ... exceptions.TypeError -2 + None ... exceptions.TypeError -2 += None ... exceptions.TypeError -2 - None ... exceptions.TypeError -2 -= None ... exceptions.TypeError -2 * None ... exceptions.TypeError -2 *= None ... exceptions.TypeError -2 / None ... exceptions.TypeError -2 /= None ... exceptions.TypeError -2 ** None ... exceptions.TypeError -2 **= None ... exceptions.TypeError -2 % None ... exceptions.TypeError -2 %= None ... exceptions.TypeError -2 + = 4 -2 += => 4 -2 - = 0 -2 -= => 0 -2 * = 4 -2 *= => 4 -2 / = 1 -2 /= => 1 -2 ** = 4 -2 **= => 4 -2 % = 0 -2 %= => 0 -2 + = 4 -2 += => 4 -2 - = 0 -2 -= => 0 -2 * = 4 -2 *= => 4 -2 / = 1 -2 /= => 1 -2 ** = 4 -2 **= => 4 -2 % = 0 -2 %= => 0 -(2+0j) + 2 = (4.0 + 0.0j) -(2+0j) += 2 => (4.0 + 0.0j) -(2+0j) - 2 = (0.0 + 0.0j) -(2+0j) -= 2 => (0.0 + 0.0j) -(2+0j) * 2 = (4.0 + 0.0j) -(2+0j) *= 2 => (4.0 + 0.0j) -(2+0j) / 2 = (1.0 + 0.0j) -(2+0j) /= 2 => (1.0 + 0.0j) -(2+0j) ** 2 = (4.0 + 0.0j) -(2+0j) **= 2 => (4.0 + 0.0j) -(2+0j) % 2 = (0.0 + 0.0j) -(2+0j) %= 2 => (0.0 + 0.0j) -(2+0j) + 4.0 = (6.0 + 0.0j) -(2+0j) += 4.0 => (6.0 + 0.0j) -(2+0j) - 4.0 = (-2.0 + 0.0j) -(2+0j) -= 4.0 => (-2.0 + 0.0j) -(2+0j) * 4.0 = (8.0 + 0.0j) -(2+0j) *= 4.0 => (8.0 + 0.0j) -(2+0j) / 4.0 = (0.5 + 0.0j) -(2+0j) /= 4.0 => (0.5 + 0.0j) -(2+0j) ** 4.0 = (16.0 + 0.0j) -(2+0j) **= 4.0 => (16.0 + 0.0j) -(2+0j) % 4.0 = (2.0 + 0.0j) -(2+0j) %= 4.0 => (2.0 + 0.0j) -(2+0j) + 2 = (4.0 + 0.0j) -(2+0j) += 2 => (4.0 + 0.0j) -(2+0j) - 2 = (0.0 + 0.0j) -(2+0j) -= 2 => (0.0 + 0.0j) -(2+0j) * 2 = (4.0 + 0.0j) -(2+0j) *= 2 => (4.0 + 0.0j) -(2+0j) / 2 = (1.0 + 0.0j) -(2+0j) /= 2 => (1.0 + 0.0j) -(2+0j) ** 2 = (4.0 + 0.0j) -(2+0j) **= 2 => (4.0 + 0.0j) -(2+0j) % 2 = (0.0 + 0.0j) -(2+0j) %= 2 => (0.0 + 0.0j) -(2+0j) + (2+0j) = (4.0 + 0.0j) -(2+0j) += (2+0j) => (4.0 + 0.0j) -(2+0j) - (2+0j) = (0.0 + 0.0j) -(2+0j) -= (2+0j) => (0.0 + 0.0j) -(2+0j) * (2+0j) = (4.0 + 0.0j) -(2+0j) *= (2+0j) => (4.0 + 0.0j) -(2+0j) / (2+0j) = (1.0 + 0.0j) -(2+0j) /= (2+0j) => (1.0 + 0.0j) -(2+0j) ** (2+0j) = (4.0 + 0.0j) -(2+0j) **= (2+0j) => (4.0 + 0.0j) -(2+0j) % (2+0j) = (0.0 + 0.0j) -(2+0j) %= (2+0j) => (0.0 + 0.0j) -(2+0j) + [1] ... exceptions.TypeError -(2+0j) += [1] ... exceptions.TypeError -(2+0j) - [1] ... exceptions.TypeError -(2+0j) -= [1] ... exceptions.TypeError -(2+0j) * [1] ... exceptions.TypeError -(2+0j) *= [1] ... exceptions.TypeError -(2+0j) / [1] ... exceptions.TypeError -(2+0j) /= [1] ... exceptions.TypeError -(2+0j) ** [1] ... exceptions.TypeError -(2+0j) **= [1] ... exceptions.TypeError -(2+0j) % [1] ... exceptions.TypeError -(2+0j) %= [1] ... exceptions.TypeError -(2+0j) + (2,) ... exceptions.TypeError -(2+0j) += (2,) ... exceptions.TypeError -(2+0j) - (2,) ... exceptions.TypeError -(2+0j) -= (2,) ... exceptions.TypeError -(2+0j) * (2,) ... exceptions.TypeError -(2+0j) *= (2,) ... exceptions.TypeError -(2+0j) / (2,) ... exceptions.TypeError -(2+0j) /= (2,) ... exceptions.TypeError -(2+0j) ** (2,) ... exceptions.TypeError -(2+0j) **= (2,) ... exceptions.TypeError -(2+0j) % (2,) ... exceptions.TypeError -(2+0j) %= (2,) ... exceptions.TypeError -(2+0j) + None ... exceptions.TypeError -(2+0j) += None ... exceptions.TypeError -(2+0j) - None ... exceptions.TypeError -(2+0j) -= None ... exceptions.TypeError -(2+0j) * None ... exceptions.TypeError -(2+0j) *= None ... exceptions.TypeError -(2+0j) / None ... exceptions.TypeError -(2+0j) /= None ... exceptions.TypeError -(2+0j) ** None ... exceptions.TypeError -(2+0j) **= None ... exceptions.TypeError -(2+0j) % None ... exceptions.TypeError -(2+0j) %= None ... exceptions.TypeError -(2+0j) + = (4.0 + 0.0j) -(2+0j) += => (4.0 + 0.0j) -(2+0j) - = (0.0 + 0.0j) -(2+0j) -= => (0.0 + 0.0j) -(2+0j) * = (4.0 + 0.0j) -(2+0j) *= => (4.0 + 0.0j) -(2+0j) / = (1.0 + 0.0j) -(2+0j) /= => (1.0 + 0.0j) -(2+0j) ** = (4.0 + 0.0j) -(2+0j) **= => (4.0 + 0.0j) -(2+0j) % = (0.0 + 0.0j) -(2+0j) %= => (0.0 + 0.0j) -(2+0j) + = (4.0 + 0.0j) -(2+0j) += => (4.0 + 0.0j) -(2+0j) - = (0.0 + 0.0j) -(2+0j) -= => (0.0 + 0.0j) -(2+0j) * = (4.0 + 0.0j) -(2+0j) *= => (4.0 + 0.0j) -(2+0j) / = (1.0 + 0.0j) -(2+0j) /= => (1.0 + 0.0j) -(2+0j) ** = (4.0 + 0.0j) -(2+0j) **= => (4.0 + 0.0j) -(2+0j) % = (0.0 + 0.0j) -(2+0j) %= => (0.0 + 0.0j) -[1] + 2 ... exceptions.TypeError -[1] += 2 ... exceptions.TypeError -[1] - 2 ... exceptions.TypeError -[1] -= 2 ... exceptions.TypeError -[1] * 2 = [1, 1] -[1] *= 2 => [1, 1] -[1] / 2 ... exceptions.TypeError -[1] /= 2 ... exceptions.TypeError -[1] ** 2 ... exceptions.TypeError -[1] **= 2 ... exceptions.TypeError -[1] % 2 ... exceptions.TypeError -[1] %= 2 ... exceptions.TypeError -[1] + 4.0 ... exceptions.TypeError -[1] += 4.0 ... exceptions.TypeError -[1] - 4.0 ... exceptions.TypeError -[1] -= 4.0 ... exceptions.TypeError -[1] * 4.0 ... exceptions.TypeError -[1] *= 4.0 ... exceptions.TypeError -[1] / 4.0 ... exceptions.TypeError -[1] /= 4.0 ... exceptions.TypeError -[1] ** 4.0 ... exceptions.TypeError -[1] **= 4.0 ... exceptions.TypeError -[1] % 4.0 ... exceptions.TypeError -[1] %= 4.0 ... exceptions.TypeError -[1] + 2 ... exceptions.TypeError -[1] += 2 ... exceptions.TypeError -[1] - 2 ... exceptions.TypeError -[1] -= 2 ... exceptions.TypeError -[1] * 2 = [1, 1] -[1] *= 2 => [1, 1] -[1] / 2 ... exceptions.TypeError -[1] /= 2 ... exceptions.TypeError -[1] ** 2 ... exceptions.TypeError -[1] **= 2 ... exceptions.TypeError -[1] % 2 ... exceptions.TypeError -[1] %= 2 ... exceptions.TypeError -[1] + (2+0j) ... exceptions.TypeError -[1] += (2+0j) ... exceptions.TypeError -[1] - (2+0j) ... exceptions.TypeError -[1] -= (2+0j) ... exceptions.TypeError -[1] * (2+0j) ... exceptions.TypeError -[1] *= (2+0j) ... exceptions.TypeError -[1] / (2+0j) ... exceptions.TypeError -[1] /= (2+0j) ... exceptions.TypeError -[1] ** (2+0j) ... exceptions.TypeError -[1] **= (2+0j) ... exceptions.TypeError -[1] % (2+0j) ... exceptions.TypeError -[1] %= (2+0j) ... exceptions.TypeError -[1] + [1] = [1, 1] -[1] += [1] => [1, 1] -[1] - [1] ... exceptions.TypeError -[1] -= [1] ... exceptions.TypeError -[1] * [1] ... exceptions.TypeError -[1] *= [1] ... exceptions.TypeError -[1] / [1] ... exceptions.TypeError -[1] /= [1] ... exceptions.TypeError -[1] ** [1] ... exceptions.TypeError -[1] **= [1] ... exceptions.TypeError -[1] % [1] ... exceptions.TypeError -[1] %= [1] ... exceptions.TypeError -[1] + (2,) ... exceptions.TypeError -[1] += (2,) => [1, 2] -[1] - (2,) ... exceptions.TypeError -[1] -= (2,) ... exceptions.TypeError -[1] * (2,) ... exceptions.TypeError -[1] *= (2,) ... exceptions.TypeError -[1] / (2,) ... exceptions.TypeError -[1] /= (2,) ... exceptions.TypeError -[1] ** (2,) ... exceptions.TypeError -[1] **= (2,) ... exceptions.TypeError -[1] % (2,) ... exceptions.TypeError -[1] %= (2,) ... exceptions.TypeError -[1] + None ... exceptions.TypeError -[1] += None ... exceptions.TypeError -[1] - None ... exceptions.TypeError -[1] -= None ... exceptions.TypeError -[1] * None ... exceptions.TypeError -[1] *= None ... exceptions.TypeError -[1] / None ... exceptions.TypeError -[1] /= None ... exceptions.TypeError -[1] ** None ... exceptions.TypeError -[1] **= None ... exceptions.TypeError -[1] % None ... exceptions.TypeError -[1] %= None ... exceptions.TypeError -[1] + ... exceptions.TypeError -[1] += ... exceptions.TypeError -[1] - ... exceptions.TypeError -[1] -= ... exceptions.TypeError -[1] * = [1, 1] -[1] *= => [1, 1] -[1] / ... exceptions.TypeError -[1] /= ... exceptions.TypeError -[1] ** ... exceptions.TypeError -[1] **= ... exceptions.TypeError -[1] % ... exceptions.TypeError -[1] %= ... exceptions.TypeError -[1] + ... exceptions.TypeError -[1] += ... exceptions.TypeError -[1] - ... exceptions.TypeError -[1] -= ... exceptions.TypeError -[1] * = [1, 1] -[1] *= => [1, 1] -[1] / ... exceptions.TypeError -[1] /= ... exceptions.TypeError -[1] ** ... exceptions.TypeError -[1] **= ... exceptions.TypeError -[1] % ... exceptions.TypeError -[1] %= ... exceptions.TypeError -(2,) + 2 ... exceptions.TypeError -(2,) += 2 ... exceptions.TypeError -(2,) - 2 ... exceptions.TypeError -(2,) -= 2 ... exceptions.TypeError -(2,) * 2 = (2, 2) -(2,) *= 2 => (2, 2) -(2,) / 2 ... exceptions.TypeError -(2,) /= 2 ... exceptions.TypeError -(2,) ** 2 ... exceptions.TypeError -(2,) **= 2 ... exceptions.TypeError -(2,) % 2 ... exceptions.TypeError -(2,) %= 2 ... exceptions.TypeError -(2,) + 4.0 ... exceptions.TypeError -(2,) += 4.0 ... exceptions.TypeError -(2,) - 4.0 ... exceptions.TypeError -(2,) -= 4.0 ... exceptions.TypeError -(2,) * 4.0 ... exceptions.TypeError -(2,) *= 4.0 ... exceptions.TypeError -(2,) / 4.0 ... exceptions.TypeError -(2,) /= 4.0 ... exceptions.TypeError -(2,) ** 4.0 ... exceptions.TypeError -(2,) **= 4.0 ... exceptions.TypeError -(2,) % 4.0 ... exceptions.TypeError -(2,) %= 4.0 ... exceptions.TypeError -(2,) + 2 ... exceptions.TypeError -(2,) += 2 ... exceptions.TypeError -(2,) - 2 ... exceptions.TypeError -(2,) -= 2 ... exceptions.TypeError -(2,) * 2 = (2, 2) -(2,) *= 2 => (2, 2) -(2,) / 2 ... exceptions.TypeError -(2,) /= 2 ... exceptions.TypeError -(2,) ** 2 ... exceptions.TypeError -(2,) **= 2 ... exceptions.TypeError -(2,) % 2 ... exceptions.TypeError -(2,) %= 2 ... exceptions.TypeError -(2,) + (2+0j) ... exceptions.TypeError -(2,) += (2+0j) ... exceptions.TypeError -(2,) - (2+0j) ... exceptions.TypeError -(2,) -= (2+0j) ... exceptions.TypeError -(2,) * (2+0j) ... exceptions.TypeError -(2,) *= (2+0j) ... exceptions.TypeError -(2,) / (2+0j) ... exceptions.TypeError -(2,) /= (2+0j) ... exceptions.TypeError -(2,) ** (2+0j) ... exceptions.TypeError -(2,) **= (2+0j) ... exceptions.TypeError -(2,) % (2+0j) ... exceptions.TypeError -(2,) %= (2+0j) ... exceptions.TypeError -(2,) + [1] ... exceptions.TypeError -(2,) += [1] ... exceptions.TypeError -(2,) - [1] ... exceptions.TypeError -(2,) -= [1] ... exceptions.TypeError -(2,) * [1] ... exceptions.TypeError -(2,) *= [1] ... exceptions.TypeError -(2,) / [1] ... exceptions.TypeError -(2,) /= [1] ... exceptions.TypeError -(2,) ** [1] ... exceptions.TypeError -(2,) **= [1] ... exceptions.TypeError -(2,) % [1] ... exceptions.TypeError -(2,) %= [1] ... exceptions.TypeError -(2,) + (2,) = (2, 2) -(2,) += (2,) => (2, 2) -(2,) - (2,) ... exceptions.TypeError -(2,) -= (2,) ... exceptions.TypeError -(2,) * (2,) ... exceptions.TypeError -(2,) *= (2,) ... exceptions.TypeError -(2,) / (2,) ... exceptions.TypeError -(2,) /= (2,) ... exceptions.TypeError -(2,) ** (2,) ... exceptions.TypeError -(2,) **= (2,) ... exceptions.TypeError -(2,) % (2,) ... exceptions.TypeError -(2,) %= (2,) ... exceptions.TypeError -(2,) + None ... exceptions.TypeError -(2,) += None ... exceptions.TypeError -(2,) - None ... exceptions.TypeError -(2,) -= None ... exceptions.TypeError -(2,) * None ... exceptions.TypeError -(2,) *= None ... exceptions.TypeError -(2,) / None ... exceptions.TypeError -(2,) /= None ... exceptions.TypeError -(2,) ** None ... exceptions.TypeError -(2,) **= None ... exceptions.TypeError -(2,) % None ... exceptions.TypeError -(2,) %= None ... exceptions.TypeError -(2,) + ... exceptions.TypeError -(2,) += ... exceptions.TypeError -(2,) - ... exceptions.TypeError -(2,) -= ... exceptions.TypeError -(2,) * = (2, 2) -(2,) *= => (2, 2) -(2,) / ... exceptions.TypeError -(2,) /= ... exceptions.TypeError -(2,) ** ... exceptions.TypeError -(2,) **= ... exceptions.TypeError -(2,) % ... exceptions.TypeError -(2,) %= ... exceptions.TypeError -(2,) + ... exceptions.TypeError -(2,) += ... exceptions.TypeError -(2,) - ... exceptions.TypeError -(2,) -= ... exceptions.TypeError -(2,) * = (2, 2) -(2,) *= => (2, 2) -(2,) / ... exceptions.TypeError -(2,) /= ... exceptions.TypeError -(2,) ** ... exceptions.TypeError -(2,) **= ... exceptions.TypeError -(2,) % ... exceptions.TypeError -(2,) %= ... exceptions.TypeError -None + 2 ... exceptions.TypeError -None += 2 ... exceptions.TypeError -None - 2 ... exceptions.TypeError -None -= 2 ... exceptions.TypeError -None * 2 ... exceptions.TypeError -None *= 2 ... exceptions.TypeError -None / 2 ... exceptions.TypeError -None /= 2 ... exceptions.TypeError -None ** 2 ... exceptions.TypeError -None **= 2 ... exceptions.TypeError -None % 2 ... exceptions.TypeError -None %= 2 ... exceptions.TypeError -None + 4.0 ... exceptions.TypeError -None += 4.0 ... exceptions.TypeError -None - 4.0 ... exceptions.TypeError -None -= 4.0 ... exceptions.TypeError -None * 4.0 ... exceptions.TypeError -None *= 4.0 ... exceptions.TypeError -None / 4.0 ... exceptions.TypeError -None /= 4.0 ... exceptions.TypeError -None ** 4.0 ... exceptions.TypeError -None **= 4.0 ... exceptions.TypeError -None % 4.0 ... exceptions.TypeError -None %= 4.0 ... exceptions.TypeError -None + 2 ... exceptions.TypeError -None += 2 ... exceptions.TypeError -None - 2 ... exceptions.TypeError -None -= 2 ... exceptions.TypeError -None * 2 ... exceptions.TypeError -None *= 2 ... exceptions.TypeError -None / 2 ... exceptions.TypeError -None /= 2 ... exceptions.TypeError -None ** 2 ... exceptions.TypeError -None **= 2 ... exceptions.TypeError -None % 2 ... exceptions.TypeError -None %= 2 ... exceptions.TypeError -None + (2+0j) ... exceptions.TypeError -None += (2+0j) ... exceptions.TypeError -None - (2+0j) ... exceptions.TypeError -None -= (2+0j) ... exceptions.TypeError -None * (2+0j) ... exceptions.TypeError -None *= (2+0j) ... exceptions.TypeError -None / (2+0j) ... exceptions.TypeError -None /= (2+0j) ... exceptions.TypeError -None ** (2+0j) ... exceptions.TypeError -None **= (2+0j) ... exceptions.TypeError -None % (2+0j) ... exceptions.TypeError -None %= (2+0j) ... exceptions.TypeError -None + [1] ... exceptions.TypeError -None += [1] ... exceptions.TypeError -None - [1] ... exceptions.TypeError -None -= [1] ... exceptions.TypeError -None * [1] ... exceptions.TypeError -None *= [1] ... exceptions.TypeError -None / [1] ... exceptions.TypeError -None /= [1] ... exceptions.TypeError -None ** [1] ... exceptions.TypeError -None **= [1] ... exceptions.TypeError -None % [1] ... exceptions.TypeError -None %= [1] ... exceptions.TypeError -None + (2,) ... exceptions.TypeError -None += (2,) ... exceptions.TypeError -None - (2,) ... exceptions.TypeError -None -= (2,) ... exceptions.TypeError -None * (2,) ... exceptions.TypeError -None *= (2,) ... exceptions.TypeError -None / (2,) ... exceptions.TypeError -None /= (2,) ... exceptions.TypeError -None ** (2,) ... exceptions.TypeError -None **= (2,) ... exceptions.TypeError -None % (2,) ... exceptions.TypeError -None %= (2,) ... exceptions.TypeError -None + None ... exceptions.TypeError -None += None ... exceptions.TypeError -None - None ... exceptions.TypeError -None -= None ... exceptions.TypeError -None * None ... exceptions.TypeError -None *= None ... exceptions.TypeError -None / None ... exceptions.TypeError -None /= None ... exceptions.TypeError -None ** None ... exceptions.TypeError -None **= None ... exceptions.TypeError -None % None ... exceptions.TypeError -None %= None ... exceptions.TypeError -None + ... exceptions.TypeError -None += ... exceptions.TypeError -None - ... exceptions.TypeError -None -= ... exceptions.TypeError -None * ... exceptions.TypeError -None *= ... exceptions.TypeError -None / ... exceptions.TypeError -None /= ... exceptions.TypeError -None ** ... exceptions.TypeError -None **= ... exceptions.TypeError -None % ... exceptions.TypeError -None %= ... exceptions.TypeError -None + ... exceptions.TypeError -None += ... exceptions.TypeError -None - ... exceptions.TypeError -None -= ... exceptions.TypeError -None * ... exceptions.TypeError -None *= ... exceptions.TypeError -None / ... exceptions.TypeError -None /= ... exceptions.TypeError -None ** ... exceptions.TypeError -None **= ... exceptions.TypeError -None % ... exceptions.TypeError -None %= ... exceptions.TypeError - + 2 = 4 - += 2 => 4 - - 2 = 0 - -= 2 => 0 - * 2 = 4 - *= 2 => 4 - / 2 = 1 - /= 2 => 1 - ** 2 = 4 - **= 2 => 4 - % 2 = 0 - %= 2 => 0 - + 4.0 = 6.0 - += 4.0 => 6.0 - - 4.0 = -2.0 - -= 4.0 => -2.0 - * 4.0 = 8.0 - *= 4.0 => 8.0 - / 4.0 = 0.5 - /= 4.0 => 0.5 - ** 4.0 = 16.0 - **= 4.0 => 16.0 - % 4.0 = 2.0 - %= 4.0 => 2.0 - + 2 = 4 - += 2 => 4 - - 2 = 0 - -= 2 => 0 - * 2 = 4 - *= 2 => 4 - / 2 = 1 - /= 2 => 1 - ** 2 = 4 - **= 2 => 4 - % 2 = 0 - %= 2 => 0 - + (2+0j) = (4.0 + 0.0j) - += (2+0j) => (4.0 + 0.0j) - - (2+0j) = (0.0 + 0.0j) - -= (2+0j) => (0.0 + 0.0j) - * (2+0j) = (4.0 + 0.0j) - *= (2+0j) => (4.0 + 0.0j) - / (2+0j) = (1.0 + 0.0j) - /= (2+0j) => (1.0 + 0.0j) - ** (2+0j) = (4.0 + 0.0j) - **= (2+0j) => (4.0 + 0.0j) - % (2+0j) = (0.0 + 0.0j) - %= (2+0j) => (0.0 + 0.0j) - + [1] ... exceptions.TypeError - += [1] ... exceptions.TypeError - - [1] ... exceptions.TypeError - -= [1] ... exceptions.TypeError - * [1] = [1, 1] - *= [1] => [1, 1] - / [1] ... exceptions.TypeError - /= [1] ... exceptions.TypeError - ** [1] ... exceptions.TypeError - **= [1] ... exceptions.TypeError - % [1] ... exceptions.TypeError - %= [1] ... exceptions.TypeError - + (2,) ... exceptions.TypeError - += (2,) ... exceptions.TypeError - - (2,) ... exceptions.TypeError - -= (2,) ... exceptions.TypeError - * (2,) = (2, 2) - *= (2,) => (2, 2) - / (2,) ... exceptions.TypeError - /= (2,) ... exceptions.TypeError - ** (2,) ... exceptions.TypeError - **= (2,) ... exceptions.TypeError - % (2,) ... exceptions.TypeError - %= (2,) ... exceptions.TypeError - + None ... exceptions.TypeError - += None ... exceptions.TypeError - - None ... exceptions.TypeError - -= None ... exceptions.TypeError - * None ... exceptions.TypeError - *= None ... exceptions.TypeError - / None ... exceptions.TypeError - /= None ... exceptions.TypeError - ** None ... exceptions.TypeError - **= None ... exceptions.TypeError - % None ... exceptions.TypeError - %= None ... exceptions.TypeError - + = 4 - += => 4 - - = 0 - -= => 0 - * = 4 - *= => 4 - / = 1 - /= => 1 - ** = 4 - **= => 4 - % = 0 - %= => 0 - + = 4 - += => 4 - - = 0 - -= => 0 - * = 4 - *= => 4 - / = 1 - /= => 1 - ** = 4 - **= => 4 - % = 0 - %= => 0 - + 2 = 4 - += 2 => 4 - - 2 = 0 - -= 2 => 0 - * 2 = 4 - *= 2 => 4 - / 2 = 1 - /= 2 => 1 - ** 2 = 4 - **= 2 => 4 - % 2 = 0 - %= 2 => 0 - + 4.0 = 6.0 - += 4.0 => 6.0 - - 4.0 = -2.0 - -= 4.0 => -2.0 - * 4.0 = 8.0 - *= 4.0 => 8.0 - / 4.0 = 0.5 - /= 4.0 => 0.5 - ** 4.0 = 16.0 - **= 4.0 => 16.0 - % 4.0 = 2.0 - %= 4.0 => 2.0 - + 2 = 4 - += 2 => 4 - - 2 = 0 - -= 2 => 0 - * 2 = 4 - *= 2 => 4 - / 2 = 1 - /= 2 => 1 - ** 2 = 4 - **= 2 => 4 - % 2 = 0 - %= 2 => 0 - + (2+0j) = (4.0 + 0.0j) - += (2+0j) => (4.0 + 0.0j) - - (2+0j) = (0.0 + 0.0j) - -= (2+0j) => (0.0 + 0.0j) - * (2+0j) = (4.0 + 0.0j) - *= (2+0j) => (4.0 + 0.0j) - / (2+0j) = (1.0 + 0.0j) - /= (2+0j) => (1.0 + 0.0j) - ** (2+0j) = (4.0 + 0.0j) - **= (2+0j) => (4.0 + 0.0j) - % (2+0j) = (0.0 + 0.0j) - %= (2+0j) => (0.0 + 0.0j) - + [1] ... exceptions.TypeError - += [1] ... exceptions.TypeError - - [1] ... exceptions.TypeError - -= [1] ... exceptions.TypeError - * [1] = [1, 1] - *= [1] => [1, 1] - / [1] ... exceptions.TypeError - /= [1] ... exceptions.TypeError - ** [1] ... exceptions.TypeError - **= [1] ... exceptions.TypeError - % [1] ... exceptions.TypeError - %= [1] ... exceptions.TypeError - + (2,) ... exceptions.TypeError - += (2,) ... exceptions.TypeError - - (2,) ... exceptions.TypeError - -= (2,) ... exceptions.TypeError - * (2,) = (2, 2) - *= (2,) => (2, 2) - / (2,) ... exceptions.TypeError - /= (2,) ... exceptions.TypeError - ** (2,) ... exceptions.TypeError - **= (2,) ... exceptions.TypeError - % (2,) ... exceptions.TypeError - %= (2,) ... exceptions.TypeError - + None ... exceptions.TypeError - += None ... exceptions.TypeError - - None ... exceptions.TypeError - -= None ... exceptions.TypeError - * None ... exceptions.TypeError - *= None ... exceptions.TypeError - / None ... exceptions.TypeError - /= None ... exceptions.TypeError - ** None ... exceptions.TypeError - **= None ... exceptions.TypeError - % None ... exceptions.TypeError - %= None ... exceptions.TypeError - + = 4 - += => 4 - - = 0 - -= => 0 - * = 4 - *= => 4 - / = 1 - /= => 1 - ** = 4 - **= => 4 - % = 0 - %= => 0 - + = 4 - += => 4 - - = 0 - -= => 0 - * = 4 - *= => 4 - / = 1 - /= => 1 - ** = 4 - **= => 4 - % = 0 - %= => 0 -divmod(2, 2) = (1, 0) -divmod(2, 4.0) = (0.0, 2.0) -divmod(2, 2) = (1L, 0L) -divmod(2, (2+0j)) = ((1+0j), 0j) -divmod(2, [1]) ... exceptions.TypeError -divmod(2, (2,)) ... exceptions.TypeError -divmod(2, None) ... exceptions.TypeError -divmod(2, ) ... exceptions.TypeError -divmod(2, ) = (1, 0) -divmod(4.0, 2) = (2.0, 0.0) -divmod(4.0, 4.0) = (1.0, 0.0) -divmod(4.0, 2) = (2.0, 0.0) -divmod(4.0, (2+0j)) = ((2+0j), 0j) -divmod(4.0, [1]) ... exceptions.TypeError -divmod(4.0, (2,)) ... exceptions.TypeError -divmod(4.0, None) ... exceptions.TypeError -divmod(4.0, ) ... exceptions.TypeError -divmod(4.0, ) = (2.0, 0.0) -divmod(2, 2) = (1L, 0L) -divmod(2, 4.0) = (0.0, 2.0) -divmod(2, 2) = (1L, 0L) -divmod(2, (2+0j)) = ((1+0j), 0j) -divmod(2, [1]) ... exceptions.TypeError -divmod(2, (2,)) ... exceptions.TypeError -divmod(2, None) ... exceptions.TypeError -divmod(2, ) ... exceptions.TypeError -divmod(2, ) = (1L, 0L) -divmod((2+0j), 2) = ((1+0j), 0j) -divmod((2+0j), 4.0) = (0j, (2+0j)) -divmod((2+0j), 2) = ((1+0j), 0j) -divmod((2+0j), (2+0j)) = ((1+0j), 0j) -divmod((2+0j), [1]) ... exceptions.TypeError -divmod((2+0j), (2,)) ... exceptions.TypeError -divmod((2+0j), None) ... exceptions.TypeError -divmod((2+0j), ) ... exceptions.TypeError -divmod((2+0j), ) = ((1+0j), 0j) -divmod([1], 2) ... exceptions.TypeError -divmod([1], 4.0) ... exceptions.TypeError -divmod([1], 2) ... exceptions.TypeError -divmod([1], (2+0j)) ... exceptions.TypeError -divmod([1], [1]) ... exceptions.TypeError -divmod([1], (2,)) ... exceptions.TypeError -divmod([1], None) ... exceptions.TypeError -divmod([1], ) ... exceptions.TypeError -divmod([1], ) ... exceptions.TypeError -divmod((2,), 2) ... exceptions.TypeError -divmod((2,), 4.0) ... exceptions.TypeError -divmod((2,), 2) ... exceptions.TypeError -divmod((2,), (2+0j)) ... exceptions.TypeError -divmod((2,), [1]) ... exceptions.TypeError -divmod((2,), (2,)) ... exceptions.TypeError -divmod((2,), None) ... exceptions.TypeError -divmod((2,), ) ... exceptions.TypeError -divmod((2,), ) ... exceptions.TypeError -divmod(None, 2) ... exceptions.TypeError -divmod(None, 4.0) ... exceptions.TypeError -divmod(None, 2) ... exceptions.TypeError -divmod(None, (2+0j)) ... exceptions.TypeError -divmod(None, [1]) ... exceptions.TypeError -divmod(None, (2,)) ... exceptions.TypeError -divmod(None, None) ... exceptions.TypeError -divmod(None, ) ... exceptions.TypeError -divmod(None, ) ... exceptions.TypeError -divmod(, 2) ... exceptions.TypeError -divmod(, 4.0) ... exceptions.TypeError -divmod(, 2) ... exceptions.TypeError -divmod(, (2+0j)) ... exceptions.TypeError -divmod(, [1]) ... exceptions.TypeError -divmod(, (2,)) ... exceptions.TypeError -divmod(, None) ... exceptions.TypeError -divmod(, ) ... exceptions.TypeError -divmod(, ) ... exceptions.TypeError -divmod(, 2) = (1, 0) -divmod(, 4.0) = (0.0, 2.0) -divmod(, 2) = (1L, 0L) -divmod(, (2+0j)) = ((1+0j), 0j) -divmod(, [1]) ... exceptions.TypeError -divmod(, (2,)) ... exceptions.TypeError -divmod(, None) ... exceptions.TypeError -divmod(, ) ... exceptions.TypeError -divmod(, ) = (1, 0) +test_coercion +2 + 2 = 4 +2 += 2 => 4 +2 - 2 = 0 +2 -= 2 => 0 +2 * 2 = 4 +2 *= 2 => 4 +2 / 2 = 1 +2 /= 2 => 1 +2 ** 2 = 4 +2 **= 2 => 4 +2 % 2 = 0 +2 %= 2 => 0 +2 + 4.0 = 6.0 +2 += 4.0 => 6.0 +2 - 4.0 = -2.0 +2 -= 4.0 => -2.0 +2 * 4.0 = 8.0 +2 *= 4.0 => 8.0 +2 / 4.0 = 0.5 +2 /= 4.0 => 0.5 +2 ** 4.0 = 16.0 +2 **= 4.0 => 16.0 +2 % 4.0 = 2.0 +2 %= 4.0 => 2.0 +2 + 2 = 4 +2 += 2 => 4 +2 - 2 = 0 +2 -= 2 => 0 +2 * 2 = 4 +2 *= 2 => 4 +2 / 2 = 1 +2 /= 2 => 1 +2 ** 2 = 4 +2 **= 2 => 4 +2 % 2 = 0 +2 %= 2 => 0 +2 + (2+0j) = (4.0 + 0.0j) +2 += (2+0j) => (4.0 + 0.0j) +2 - (2+0j) = (0.0 + 0.0j) +2 -= (2+0j) => (0.0 + 0.0j) +2 * (2+0j) = (4.0 + 0.0j) +2 *= (2+0j) => (4.0 + 0.0j) +2 / (2+0j) = (1.0 + 0.0j) +2 /= (2+0j) => (1.0 + 0.0j) +2 ** (2+0j) = (4.0 + 0.0j) +2 **= (2+0j) => (4.0 + 0.0j) +2 % (2+0j) = (0.0 + 0.0j) +2 %= (2+0j) => (0.0 + 0.0j) +2 + [1] ... exceptions.TypeError +2 += [1] ... exceptions.TypeError +2 - [1] ... exceptions.TypeError +2 -= [1] ... exceptions.TypeError +2 * [1] = [1, 1] +2 *= [1] => [1, 1] +2 / [1] ... exceptions.TypeError +2 /= [1] ... exceptions.TypeError +2 ** [1] ... exceptions.TypeError +2 **= [1] ... exceptions.TypeError +2 % [1] ... exceptions.TypeError +2 %= [1] ... exceptions.TypeError +2 + (2,) ... exceptions.TypeError +2 += (2,) ... exceptions.TypeError +2 - (2,) ... exceptions.TypeError +2 -= (2,) ... exceptions.TypeError +2 * (2,) = (2, 2) +2 *= (2,) => (2, 2) +2 / (2,) ... exceptions.TypeError +2 /= (2,) ... exceptions.TypeError +2 ** (2,) ... exceptions.TypeError +2 **= (2,) ... exceptions.TypeError +2 % (2,) ... exceptions.TypeError +2 %= (2,) ... exceptions.TypeError +2 + None ... exceptions.TypeError +2 += None ... exceptions.TypeError +2 - None ... exceptions.TypeError +2 -= None ... exceptions.TypeError +2 * None ... exceptions.TypeError +2 *= None ... exceptions.TypeError +2 / None ... exceptions.TypeError +2 /= None ... exceptions.TypeError +2 ** None ... exceptions.TypeError +2 **= None ... exceptions.TypeError +2 % None ... exceptions.TypeError +2 %= None ... exceptions.TypeError +2 + = 4 +2 += => 4 +2 - = 0 +2 -= => 0 +2 * = 4 +2 *= => 4 +2 / = 1 +2 /= => 1 +2 ** = 4 +2 **= => 4 +2 % = 0 +2 %= => 0 +2 + = 4 +2 += => 4 +2 - = 0 +2 -= => 0 +2 * = 4 +2 *= => 4 +2 / = 1 +2 /= => 1 +2 ** = 4 +2 **= => 4 +2 % = 0 +2 %= => 0 +4.0 + 2 = 6.0 +4.0 += 2 => 6.0 +4.0 - 2 = 2.0 +4.0 -= 2 => 2.0 +4.0 * 2 = 8.0 +4.0 *= 2 => 8.0 +4.0 / 2 = 2.0 +4.0 /= 2 => 2.0 +4.0 ** 2 = 16.0 +4.0 **= 2 => 16.0 +4.0 % 2 = 0.0 +4.0 %= 2 => 0.0 +4.0 + 4.0 = 8.0 +4.0 += 4.0 => 8.0 +4.0 - 4.0 = 0.0 +4.0 -= 4.0 => 0.0 +4.0 * 4.0 = 16.0 +4.0 *= 4.0 => 16.0 +4.0 / 4.0 = 1.0 +4.0 /= 4.0 => 1.0 +4.0 ** 4.0 = 256.0 +4.0 **= 4.0 => 256.0 +4.0 % 4.0 = 0.0 +4.0 %= 4.0 => 0.0 +4.0 + 2 = 6.0 +4.0 += 2 => 6.0 +4.0 - 2 = 2.0 +4.0 -= 2 => 2.0 +4.0 * 2 = 8.0 +4.0 *= 2 => 8.0 +4.0 / 2 = 2.0 +4.0 /= 2 => 2.0 +4.0 ** 2 = 16.0 +4.0 **= 2 => 16.0 +4.0 % 2 = 0.0 +4.0 %= 2 => 0.0 +4.0 + (2+0j) = (6.0 + 0.0j) +4.0 += (2+0j) => (6.0 + 0.0j) +4.0 - (2+0j) = (2.0 + 0.0j) +4.0 -= (2+0j) => (2.0 + 0.0j) +4.0 * (2+0j) = (8.0 + 0.0j) +4.0 *= (2+0j) => (8.0 + 0.0j) +4.0 / (2+0j) = (2.0 + 0.0j) +4.0 /= (2+0j) => (2.0 + 0.0j) +4.0 ** (2+0j) = (16.0 + 0.0j) +4.0 **= (2+0j) => (16.0 + 0.0j) +4.0 % (2+0j) = (0.0 + 0.0j) +4.0 %= (2+0j) => (0.0 + 0.0j) +4.0 + [1] ... exceptions.TypeError +4.0 += [1] ... exceptions.TypeError +4.0 - [1] ... exceptions.TypeError +4.0 -= [1] ... exceptions.TypeError +4.0 * [1] ... exceptions.TypeError +4.0 *= [1] ... exceptions.TypeError +4.0 / [1] ... exceptions.TypeError +4.0 /= [1] ... exceptions.TypeError +4.0 ** [1] ... exceptions.TypeError +4.0 **= [1] ... exceptions.TypeError +4.0 % [1] ... exceptions.TypeError +4.0 %= [1] ... exceptions.TypeError +4.0 + (2,) ... exceptions.TypeError +4.0 += (2,) ... exceptions.TypeError +4.0 - (2,) ... exceptions.TypeError +4.0 -= (2,) ... exceptions.TypeError +4.0 * (2,) ... exceptions.TypeError +4.0 *= (2,) ... exceptions.TypeError +4.0 / (2,) ... exceptions.TypeError +4.0 /= (2,) ... exceptions.TypeError +4.0 ** (2,) ... exceptions.TypeError +4.0 **= (2,) ... exceptions.TypeError +4.0 % (2,) ... exceptions.TypeError +4.0 %= (2,) ... exceptions.TypeError +4.0 + None ... exceptions.TypeError +4.0 += None ... exceptions.TypeError +4.0 - None ... exceptions.TypeError +4.0 -= None ... exceptions.TypeError +4.0 * None ... exceptions.TypeError +4.0 *= None ... exceptions.TypeError +4.0 / None ... exceptions.TypeError +4.0 /= None ... exceptions.TypeError +4.0 ** None ... exceptions.TypeError +4.0 **= None ... exceptions.TypeError +4.0 % None ... exceptions.TypeError +4.0 %= None ... exceptions.TypeError +4.0 + = 6.0 +4.0 += => 6.0 +4.0 - = 2.0 +4.0 -= => 2.0 +4.0 * = 8.0 +4.0 *= => 8.0 +4.0 / = 2.0 +4.0 /= => 2.0 +4.0 ** = 16.0 +4.0 **= => 16.0 +4.0 % = 0.0 +4.0 %= => 0.0 +4.0 + = 6.0 +4.0 += => 6.0 +4.0 - = 2.0 +4.0 -= => 2.0 +4.0 * = 8.0 +4.0 *= => 8.0 +4.0 / = 2.0 +4.0 /= => 2.0 +4.0 ** = 16.0 +4.0 **= => 16.0 +4.0 % = 0.0 +4.0 %= => 0.0 +2 + 2 = 4 +2 += 2 => 4 +2 - 2 = 0 +2 -= 2 => 0 +2 * 2 = 4 +2 *= 2 => 4 +2 / 2 = 1 +2 /= 2 => 1 +2 ** 2 = 4 +2 **= 2 => 4 +2 % 2 = 0 +2 %= 2 => 0 +2 + 4.0 = 6.0 +2 += 4.0 => 6.0 +2 - 4.0 = -2.0 +2 -= 4.0 => -2.0 +2 * 4.0 = 8.0 +2 *= 4.0 => 8.0 +2 / 4.0 = 0.5 +2 /= 4.0 => 0.5 +2 ** 4.0 = 16.0 +2 **= 4.0 => 16.0 +2 % 4.0 = 2.0 +2 %= 4.0 => 2.0 +2 + 2 = 4 +2 += 2 => 4 +2 - 2 = 0 +2 -= 2 => 0 +2 * 2 = 4 +2 *= 2 => 4 +2 / 2 = 1 +2 /= 2 => 1 +2 ** 2 = 4 +2 **= 2 => 4 +2 % 2 = 0 +2 %= 2 => 0 +2 + (2+0j) = (4.0 + 0.0j) +2 += (2+0j) => (4.0 + 0.0j) +2 - (2+0j) = (0.0 + 0.0j) +2 -= (2+0j) => (0.0 + 0.0j) +2 * (2+0j) = (4.0 + 0.0j) +2 *= (2+0j) => (4.0 + 0.0j) +2 / (2+0j) = (1.0 + 0.0j) +2 /= (2+0j) => (1.0 + 0.0j) +2 ** (2+0j) = (4.0 + 0.0j) +2 **= (2+0j) => (4.0 + 0.0j) +2 % (2+0j) = (0.0 + 0.0j) +2 %= (2+0j) => (0.0 + 0.0j) +2 + [1] ... exceptions.TypeError +2 += [1] ... exceptions.TypeError +2 - [1] ... exceptions.TypeError +2 -= [1] ... exceptions.TypeError +2 * [1] = [1, 1] +2 *= [1] => [1, 1] +2 / [1] ... exceptions.TypeError +2 /= [1] ... exceptions.TypeError +2 ** [1] ... exceptions.TypeError +2 **= [1] ... exceptions.TypeError +2 % [1] ... exceptions.TypeError +2 %= [1] ... exceptions.TypeError +2 + (2,) ... exceptions.TypeError +2 += (2,) ... exceptions.TypeError +2 - (2,) ... exceptions.TypeError +2 -= (2,) ... exceptions.TypeError +2 * (2,) = (2, 2) +2 *= (2,) => (2, 2) +2 / (2,) ... exceptions.TypeError +2 /= (2,) ... exceptions.TypeError +2 ** (2,) ... exceptions.TypeError +2 **= (2,) ... exceptions.TypeError +2 % (2,) ... exceptions.TypeError +2 %= (2,) ... exceptions.TypeError +2 + None ... exceptions.TypeError +2 += None ... exceptions.TypeError +2 - None ... exceptions.TypeError +2 -= None ... exceptions.TypeError +2 * None ... exceptions.TypeError +2 *= None ... exceptions.TypeError +2 / None ... exceptions.TypeError +2 /= None ... exceptions.TypeError +2 ** None ... exceptions.TypeError +2 **= None ... exceptions.TypeError +2 % None ... exceptions.TypeError +2 %= None ... exceptions.TypeError +2 + = 4 +2 += => 4 +2 - = 0 +2 -= => 0 +2 * = 4 +2 *= => 4 +2 / = 1 +2 /= => 1 +2 ** = 4 +2 **= => 4 +2 % = 0 +2 %= => 0 +2 + = 4 +2 += => 4 +2 - = 0 +2 -= => 0 +2 * = 4 +2 *= => 4 +2 / = 1 +2 /= => 1 +2 ** = 4 +2 **= => 4 +2 % = 0 +2 %= => 0 +(2+0j) + 2 = (4.0 + 0.0j) +(2+0j) += 2 => (4.0 + 0.0j) +(2+0j) - 2 = (0.0 + 0.0j) +(2+0j) -= 2 => (0.0 + 0.0j) +(2+0j) * 2 = (4.0 + 0.0j) +(2+0j) *= 2 => (4.0 + 0.0j) +(2+0j) / 2 = (1.0 + 0.0j) +(2+0j) /= 2 => (1.0 + 0.0j) +(2+0j) ** 2 = (4.0 + 0.0j) +(2+0j) **= 2 => (4.0 + 0.0j) +(2+0j) % 2 = (0.0 + 0.0j) +(2+0j) %= 2 => (0.0 + 0.0j) +(2+0j) + 4.0 = (6.0 + 0.0j) +(2+0j) += 4.0 => (6.0 + 0.0j) +(2+0j) - 4.0 = (-2.0 + 0.0j) +(2+0j) -= 4.0 => (-2.0 + 0.0j) +(2+0j) * 4.0 = (8.0 + 0.0j) +(2+0j) *= 4.0 => (8.0 + 0.0j) +(2+0j) / 4.0 = (0.5 + 0.0j) +(2+0j) /= 4.0 => (0.5 + 0.0j) +(2+0j) ** 4.0 = (16.0 + 0.0j) +(2+0j) **= 4.0 => (16.0 + 0.0j) +(2+0j) % 4.0 = (2.0 + 0.0j) +(2+0j) %= 4.0 => (2.0 + 0.0j) +(2+0j) + 2 = (4.0 + 0.0j) +(2+0j) += 2 => (4.0 + 0.0j) +(2+0j) - 2 = (0.0 + 0.0j) +(2+0j) -= 2 => (0.0 + 0.0j) +(2+0j) * 2 = (4.0 + 0.0j) +(2+0j) *= 2 => (4.0 + 0.0j) +(2+0j) / 2 = (1.0 + 0.0j) +(2+0j) /= 2 => (1.0 + 0.0j) +(2+0j) ** 2 = (4.0 + 0.0j) +(2+0j) **= 2 => (4.0 + 0.0j) +(2+0j) % 2 = (0.0 + 0.0j) +(2+0j) %= 2 => (0.0 + 0.0j) +(2+0j) + (2+0j) = (4.0 + 0.0j) +(2+0j) += (2+0j) => (4.0 + 0.0j) +(2+0j) - (2+0j) = (0.0 + 0.0j) +(2+0j) -= (2+0j) => (0.0 + 0.0j) +(2+0j) * (2+0j) = (4.0 + 0.0j) +(2+0j) *= (2+0j) => (4.0 + 0.0j) +(2+0j) / (2+0j) = (1.0 + 0.0j) +(2+0j) /= (2+0j) => (1.0 + 0.0j) +(2+0j) ** (2+0j) = (4.0 + 0.0j) +(2+0j) **= (2+0j) => (4.0 + 0.0j) +(2+0j) % (2+0j) = (0.0 + 0.0j) +(2+0j) %= (2+0j) => (0.0 + 0.0j) +(2+0j) + [1] ... exceptions.TypeError +(2+0j) += [1] ... exceptions.TypeError +(2+0j) - [1] ... exceptions.TypeError +(2+0j) -= [1] ... exceptions.TypeError +(2+0j) * [1] ... exceptions.TypeError +(2+0j) *= [1] ... exceptions.TypeError +(2+0j) / [1] ... exceptions.TypeError +(2+0j) /= [1] ... exceptions.TypeError +(2+0j) ** [1] ... exceptions.TypeError +(2+0j) **= [1] ... exceptions.TypeError +(2+0j) % [1] ... exceptions.TypeError +(2+0j) %= [1] ... exceptions.TypeError +(2+0j) + (2,) ... exceptions.TypeError +(2+0j) += (2,) ... exceptions.TypeError +(2+0j) - (2,) ... exceptions.TypeError +(2+0j) -= (2,) ... exceptions.TypeError +(2+0j) * (2,) ... exceptions.TypeError +(2+0j) *= (2,) ... exceptions.TypeError +(2+0j) / (2,) ... exceptions.TypeError +(2+0j) /= (2,) ... exceptions.TypeError +(2+0j) ** (2,) ... exceptions.TypeError +(2+0j) **= (2,) ... exceptions.TypeError +(2+0j) % (2,) ... exceptions.TypeError +(2+0j) %= (2,) ... exceptions.TypeError +(2+0j) + None ... exceptions.TypeError +(2+0j) += None ... exceptions.TypeError +(2+0j) - None ... exceptions.TypeError +(2+0j) -= None ... exceptions.TypeError +(2+0j) * None ... exceptions.TypeError +(2+0j) *= None ... exceptions.TypeError +(2+0j) / None ... exceptions.TypeError +(2+0j) /= None ... exceptions.TypeError +(2+0j) ** None ... exceptions.TypeError +(2+0j) **= None ... exceptions.TypeError +(2+0j) % None ... exceptions.TypeError +(2+0j) %= None ... exceptions.TypeError +(2+0j) + = (4.0 + 0.0j) +(2+0j) += => (4.0 + 0.0j) +(2+0j) - = (0.0 + 0.0j) +(2+0j) -= => (0.0 + 0.0j) +(2+0j) * = (4.0 + 0.0j) +(2+0j) *= => (4.0 + 0.0j) +(2+0j) / = (1.0 + 0.0j) +(2+0j) /= => (1.0 + 0.0j) +(2+0j) ** = (4.0 + 0.0j) +(2+0j) **= => (4.0 + 0.0j) +(2+0j) % = (0.0 + 0.0j) +(2+0j) %= => (0.0 + 0.0j) +(2+0j) + = (4.0 + 0.0j) +(2+0j) += => (4.0 + 0.0j) +(2+0j) - = (0.0 + 0.0j) +(2+0j) -= => (0.0 + 0.0j) +(2+0j) * = (4.0 + 0.0j) +(2+0j) *= => (4.0 + 0.0j) +(2+0j) / = (1.0 + 0.0j) +(2+0j) /= => (1.0 + 0.0j) +(2+0j) ** = (4.0 + 0.0j) +(2+0j) **= => (4.0 + 0.0j) +(2+0j) % = (0.0 + 0.0j) +(2+0j) %= => (0.0 + 0.0j) +[1] + 2 ... exceptions.TypeError +[1] += 2 ... exceptions.TypeError +[1] - 2 ... exceptions.TypeError +[1] -= 2 ... exceptions.TypeError +[1] * 2 = [1, 1] +[1] *= 2 => [1, 1] +[1] / 2 ... exceptions.TypeError +[1] /= 2 ... exceptions.TypeError +[1] ** 2 ... exceptions.TypeError +[1] **= 2 ... exceptions.TypeError +[1] % 2 ... exceptions.TypeError +[1] %= 2 ... exceptions.TypeError +[1] + 4.0 ... exceptions.TypeError +[1] += 4.0 ... exceptions.TypeError +[1] - 4.0 ... exceptions.TypeError +[1] -= 4.0 ... exceptions.TypeError +[1] * 4.0 ... exceptions.TypeError +[1] *= 4.0 ... exceptions.TypeError +[1] / 4.0 ... exceptions.TypeError +[1] /= 4.0 ... exceptions.TypeError +[1] ** 4.0 ... exceptions.TypeError +[1] **= 4.0 ... exceptions.TypeError +[1] % 4.0 ... exceptions.TypeError +[1] %= 4.0 ... exceptions.TypeError +[1] + 2 ... exceptions.TypeError +[1] += 2 ... exceptions.TypeError +[1] - 2 ... exceptions.TypeError +[1] -= 2 ... exceptions.TypeError +[1] * 2 = [1, 1] +[1] *= 2 => [1, 1] +[1] / 2 ... exceptions.TypeError +[1] /= 2 ... exceptions.TypeError +[1] ** 2 ... exceptions.TypeError +[1] **= 2 ... exceptions.TypeError +[1] % 2 ... exceptions.TypeError +[1] %= 2 ... exceptions.TypeError +[1] + (2+0j) ... exceptions.TypeError +[1] += (2+0j) ... exceptions.TypeError +[1] - (2+0j) ... exceptions.TypeError +[1] -= (2+0j) ... exceptions.TypeError +[1] * (2+0j) ... exceptions.TypeError +[1] *= (2+0j) ... exceptions.TypeError +[1] / (2+0j) ... exceptions.TypeError +[1] /= (2+0j) ... exceptions.TypeError +[1] ** (2+0j) ... exceptions.TypeError +[1] **= (2+0j) ... exceptions.TypeError +[1] % (2+0j) ... exceptions.TypeError +[1] %= (2+0j) ... exceptions.TypeError +[1] + [1] = [1, 1] +[1] += [1] => [1, 1] +[1] - [1] ... exceptions.TypeError +[1] -= [1] ... exceptions.TypeError +[1] * [1] ... exceptions.TypeError +[1] *= [1] ... exceptions.TypeError +[1] / [1] ... exceptions.TypeError +[1] /= [1] ... exceptions.TypeError +[1] ** [1] ... exceptions.TypeError +[1] **= [1] ... exceptions.TypeError +[1] % [1] ... exceptions.TypeError +[1] %= [1] ... exceptions.TypeError +[1] + (2,) ... exceptions.TypeError +[1] += (2,) => [1, 2] +[1] - (2,) ... exceptions.TypeError +[1] -= (2,) ... exceptions.TypeError +[1] * (2,) ... exceptions.TypeError +[1] *= (2,) ... exceptions.TypeError +[1] / (2,) ... exceptions.TypeError +[1] /= (2,) ... exceptions.TypeError +[1] ** (2,) ... exceptions.TypeError +[1] **= (2,) ... exceptions.TypeError +[1] % (2,) ... exceptions.TypeError +[1] %= (2,) ... exceptions.TypeError +[1] + None ... exceptions.TypeError +[1] += None ... exceptions.TypeError +[1] - None ... exceptions.TypeError +[1] -= None ... exceptions.TypeError +[1] * None ... exceptions.TypeError +[1] *= None ... exceptions.TypeError +[1] / None ... exceptions.TypeError +[1] /= None ... exceptions.TypeError +[1] ** None ... exceptions.TypeError +[1] **= None ... exceptions.TypeError +[1] % None ... exceptions.TypeError +[1] %= None ... exceptions.TypeError +[1] + ... exceptions.TypeError +[1] += ... exceptions.TypeError +[1] - ... exceptions.TypeError +[1] -= ... exceptions.TypeError +[1] * = [1, 1] +[1] *= => [1, 1] +[1] / ... exceptions.TypeError +[1] /= ... exceptions.TypeError +[1] ** ... exceptions.TypeError +[1] **= ... exceptions.TypeError +[1] % ... exceptions.TypeError +[1] %= ... exceptions.TypeError +[1] + ... exceptions.TypeError +[1] += ... exceptions.TypeError +[1] - ... exceptions.TypeError +[1] -= ... exceptions.TypeError +[1] * = [1, 1] +[1] *= => [1, 1] +[1] / ... exceptions.TypeError +[1] /= ... exceptions.TypeError +[1] ** ... exceptions.TypeError +[1] **= ... exceptions.TypeError +[1] % ... exceptions.TypeError +[1] %= ... exceptions.TypeError +(2,) + 2 ... exceptions.TypeError +(2,) += 2 ... exceptions.TypeError +(2,) - 2 ... exceptions.TypeError +(2,) -= 2 ... exceptions.TypeError +(2,) * 2 = (2, 2) +(2,) *= 2 => (2, 2) +(2,) / 2 ... exceptions.TypeError +(2,) /= 2 ... exceptions.TypeError +(2,) ** 2 ... exceptions.TypeError +(2,) **= 2 ... exceptions.TypeError +(2,) % 2 ... exceptions.TypeError +(2,) %= 2 ... exceptions.TypeError +(2,) + 4.0 ... exceptions.TypeError +(2,) += 4.0 ... exceptions.TypeError +(2,) - 4.0 ... exceptions.TypeError +(2,) -= 4.0 ... exceptions.TypeError +(2,) * 4.0 ... exceptions.TypeError +(2,) *= 4.0 ... exceptions.TypeError +(2,) / 4.0 ... exceptions.TypeError +(2,) /= 4.0 ... exceptions.TypeError +(2,) ** 4.0 ... exceptions.TypeError +(2,) **= 4.0 ... exceptions.TypeError +(2,) % 4.0 ... exceptions.TypeError +(2,) %= 4.0 ... exceptions.TypeError +(2,) + 2 ... exceptions.TypeError +(2,) += 2 ... exceptions.TypeError +(2,) - 2 ... exceptions.TypeError +(2,) -= 2 ... exceptions.TypeError +(2,) * 2 = (2, 2) +(2,) *= 2 => (2, 2) +(2,) / 2 ... exceptions.TypeError +(2,) /= 2 ... exceptions.TypeError +(2,) ** 2 ... exceptions.TypeError +(2,) **= 2 ... exceptions.TypeError +(2,) % 2 ... exceptions.TypeError +(2,) %= 2 ... exceptions.TypeError +(2,) + (2+0j) ... exceptions.TypeError +(2,) += (2+0j) ... exceptions.TypeError +(2,) - (2+0j) ... exceptions.TypeError +(2,) -= (2+0j) ... exceptions.TypeError +(2,) * (2+0j) ... exceptions.TypeError +(2,) *= (2+0j) ... exceptions.TypeError +(2,) / (2+0j) ... exceptions.TypeError +(2,) /= (2+0j) ... exceptions.TypeError +(2,) ** (2+0j) ... exceptions.TypeError +(2,) **= (2+0j) ... exceptions.TypeError +(2,) % (2+0j) ... exceptions.TypeError +(2,) %= (2+0j) ... exceptions.TypeError +(2,) + [1] ... exceptions.TypeError +(2,) += [1] ... exceptions.TypeError +(2,) - [1] ... exceptions.TypeError +(2,) -= [1] ... exceptions.TypeError +(2,) * [1] ... exceptions.TypeError +(2,) *= [1] ... exceptions.TypeError +(2,) / [1] ... exceptions.TypeError +(2,) /= [1] ... exceptions.TypeError +(2,) ** [1] ... exceptions.TypeError +(2,) **= [1] ... exceptions.TypeError +(2,) % [1] ... exceptions.TypeError +(2,) %= [1] ... exceptions.TypeError +(2,) + (2,) = (2, 2) +(2,) += (2,) => (2, 2) +(2,) - (2,) ... exceptions.TypeError +(2,) -= (2,) ... exceptions.TypeError +(2,) * (2,) ... exceptions.TypeError +(2,) *= (2,) ... exceptions.TypeError +(2,) / (2,) ... exceptions.TypeError +(2,) /= (2,) ... exceptions.TypeError +(2,) ** (2,) ... exceptions.TypeError +(2,) **= (2,) ... exceptions.TypeError +(2,) % (2,) ... exceptions.TypeError +(2,) %= (2,) ... exceptions.TypeError +(2,) + None ... exceptions.TypeError +(2,) += None ... exceptions.TypeError +(2,) - None ... exceptions.TypeError +(2,) -= None ... exceptions.TypeError +(2,) * None ... exceptions.TypeError +(2,) *= None ... exceptions.TypeError +(2,) / None ... exceptions.TypeError +(2,) /= None ... exceptions.TypeError +(2,) ** None ... exceptions.TypeError +(2,) **= None ... exceptions.TypeError +(2,) % None ... exceptions.TypeError +(2,) %= None ... exceptions.TypeError +(2,) + ... exceptions.TypeError +(2,) += ... exceptions.TypeError +(2,) - ... exceptions.TypeError +(2,) -= ... exceptions.TypeError +(2,) * = (2, 2) +(2,) *= => (2, 2) +(2,) / ... exceptions.TypeError +(2,) /= ... exceptions.TypeError +(2,) ** ... exceptions.TypeError +(2,) **= ... exceptions.TypeError +(2,) % ... exceptions.TypeError +(2,) %= ... exceptions.TypeError +(2,) + ... exceptions.TypeError +(2,) += ... exceptions.TypeError +(2,) - ... exceptions.TypeError +(2,) -= ... exceptions.TypeError +(2,) * = (2, 2) +(2,) *= => (2, 2) +(2,) / ... exceptions.TypeError +(2,) /= ... exceptions.TypeError +(2,) ** ... exceptions.TypeError +(2,) **= ... exceptions.TypeError +(2,) % ... exceptions.TypeError +(2,) %= ... exceptions.TypeError +None + 2 ... exceptions.TypeError +None += 2 ... exceptions.TypeError +None - 2 ... exceptions.TypeError +None -= 2 ... exceptions.TypeError +None * 2 ... exceptions.TypeError +None *= 2 ... exceptions.TypeError +None / 2 ... exceptions.TypeError +None /= 2 ... exceptions.TypeError +None ** 2 ... exceptions.TypeError +None **= 2 ... exceptions.TypeError +None % 2 ... exceptions.TypeError +None %= 2 ... exceptions.TypeError +None + 4.0 ... exceptions.TypeError +None += 4.0 ... exceptions.TypeError +None - 4.0 ... exceptions.TypeError +None -= 4.0 ... exceptions.TypeError +None * 4.0 ... exceptions.TypeError +None *= 4.0 ... exceptions.TypeError +None / 4.0 ... exceptions.TypeError +None /= 4.0 ... exceptions.TypeError +None ** 4.0 ... exceptions.TypeError +None **= 4.0 ... exceptions.TypeError +None % 4.0 ... exceptions.TypeError +None %= 4.0 ... exceptions.TypeError +None + 2 ... exceptions.TypeError +None += 2 ... exceptions.TypeError +None - 2 ... exceptions.TypeError +None -= 2 ... exceptions.TypeError +None * 2 ... exceptions.TypeError +None *= 2 ... exceptions.TypeError +None / 2 ... exceptions.TypeError +None /= 2 ... exceptions.TypeError +None ** 2 ... exceptions.TypeError +None **= 2 ... exceptions.TypeError +None % 2 ... exceptions.TypeError +None %= 2 ... exceptions.TypeError +None + (2+0j) ... exceptions.TypeError +None += (2+0j) ... exceptions.TypeError +None - (2+0j) ... exceptions.TypeError +None -= (2+0j) ... exceptions.TypeError +None * (2+0j) ... exceptions.TypeError +None *= (2+0j) ... exceptions.TypeError +None / (2+0j) ... exceptions.TypeError +None /= (2+0j) ... exceptions.TypeError +None ** (2+0j) ... exceptions.TypeError +None **= (2+0j) ... exceptions.TypeError +None % (2+0j) ... exceptions.TypeError +None %= (2+0j) ... exceptions.TypeError +None + [1] ... exceptions.TypeError +None += [1] ... exceptions.TypeError +None - [1] ... exceptions.TypeError +None -= [1] ... exceptions.TypeError +None * [1] ... exceptions.TypeError +None *= [1] ... exceptions.TypeError +None / [1] ... exceptions.TypeError +None /= [1] ... exceptions.TypeError +None ** [1] ... exceptions.TypeError +None **= [1] ... exceptions.TypeError +None % [1] ... exceptions.TypeError +None %= [1] ... exceptions.TypeError +None + (2,) ... exceptions.TypeError +None += (2,) ... exceptions.TypeError +None - (2,) ... exceptions.TypeError +None -= (2,) ... exceptions.TypeError +None * (2,) ... exceptions.TypeError +None *= (2,) ... exceptions.TypeError +None / (2,) ... exceptions.TypeError +None /= (2,) ... exceptions.TypeError +None ** (2,) ... exceptions.TypeError +None **= (2,) ... exceptions.TypeError +None % (2,) ... exceptions.TypeError +None %= (2,) ... exceptions.TypeError +None + None ... exceptions.TypeError +None += None ... exceptions.TypeError +None - None ... exceptions.TypeError +None -= None ... exceptions.TypeError +None * None ... exceptions.TypeError +None *= None ... exceptions.TypeError +None / None ... exceptions.TypeError +None /= None ... exceptions.TypeError +None ** None ... exceptions.TypeError +None **= None ... exceptions.TypeError +None % None ... exceptions.TypeError +None %= None ... exceptions.TypeError +None + ... exceptions.TypeError +None += ... exceptions.TypeError +None - ... exceptions.TypeError +None -= ... exceptions.TypeError +None * ... exceptions.TypeError +None *= ... exceptions.TypeError +None / ... exceptions.TypeError +None /= ... exceptions.TypeError +None ** ... exceptions.TypeError +None **= ... exceptions.TypeError +None % ... exceptions.TypeError +None %= ... exceptions.TypeError +None + ... exceptions.TypeError +None += ... exceptions.TypeError +None - ... exceptions.TypeError +None -= ... exceptions.TypeError +None * ... exceptions.TypeError +None *= ... exceptions.TypeError +None / ... exceptions.TypeError +None /= ... exceptions.TypeError +None ** ... exceptions.TypeError +None **= ... exceptions.TypeError +None % ... exceptions.TypeError +None %= ... exceptions.TypeError + + 2 = 4 + += 2 => 4 + - 2 = 0 + -= 2 => 0 + * 2 = 4 + *= 2 => 4 + / 2 = 1 + /= 2 => 1 + ** 2 = 4 + **= 2 => 4 + % 2 = 0 + %= 2 => 0 + + 4.0 = 6.0 + += 4.0 => 6.0 + - 4.0 = -2.0 + -= 4.0 => -2.0 + * 4.0 = 8.0 + *= 4.0 => 8.0 + / 4.0 = 0.5 + /= 4.0 => 0.5 + ** 4.0 = 16.0 + **= 4.0 => 16.0 + % 4.0 = 2.0 + %= 4.0 => 2.0 + + 2 = 4 + += 2 => 4 + - 2 = 0 + -= 2 => 0 + * 2 = 4 + *= 2 => 4 + / 2 = 1 + /= 2 => 1 + ** 2 = 4 + **= 2 => 4 + % 2 = 0 + %= 2 => 0 + + (2+0j) = (4.0 + 0.0j) + += (2+0j) => (4.0 + 0.0j) + - (2+0j) = (0.0 + 0.0j) + -= (2+0j) => (0.0 + 0.0j) + * (2+0j) = (4.0 + 0.0j) + *= (2+0j) => (4.0 + 0.0j) + / (2+0j) = (1.0 + 0.0j) + /= (2+0j) => (1.0 + 0.0j) + ** (2+0j) = (4.0 + 0.0j) + **= (2+0j) => (4.0 + 0.0j) + % (2+0j) = (0.0 + 0.0j) + %= (2+0j) => (0.0 + 0.0j) + + [1] ... exceptions.TypeError + += [1] ... exceptions.TypeError + - [1] ... exceptions.TypeError + -= [1] ... exceptions.TypeError + * [1] = [1, 1] + *= [1] => [1, 1] + / [1] ... exceptions.TypeError + /= [1] ... exceptions.TypeError + ** [1] ... exceptions.TypeError + **= [1] ... exceptions.TypeError + % [1] ... exceptions.TypeError + %= [1] ... exceptions.TypeError + + (2,) ... exceptions.TypeError + += (2,) ... exceptions.TypeError + - (2,) ... exceptions.TypeError + -= (2,) ... exceptions.TypeError + * (2,) = (2, 2) + *= (2,) => (2, 2) + / (2,) ... exceptions.TypeError + /= (2,) ... exceptions.TypeError + ** (2,) ... exceptions.TypeError + **= (2,) ... exceptions.TypeError + % (2,) ... exceptions.TypeError + %= (2,) ... exceptions.TypeError + + None ... exceptions.TypeError + += None ... exceptions.TypeError + - None ... exceptions.TypeError + -= None ... exceptions.TypeError + * None ... exceptions.TypeError + *= None ... exceptions.TypeError + / None ... exceptions.TypeError + /= None ... exceptions.TypeError + ** None ... exceptions.TypeError + **= None ... exceptions.TypeError + % None ... exceptions.TypeError + %= None ... exceptions.TypeError + + = 4 + += => 4 + - = 0 + -= => 0 + * = 4 + *= => 4 + / = 1 + /= => 1 + ** = 4 + **= => 4 + % = 0 + %= => 0 + + = 4 + += => 4 + - = 0 + -= => 0 + * = 4 + *= => 4 + / = 1 + /= => 1 + ** = 4 + **= => 4 + % = 0 + %= => 0 + + 2 = 4 + += 2 => 4 + - 2 = 0 + -= 2 => 0 + * 2 = 4 + *= 2 => 4 + / 2 = 1 + /= 2 => 1 + ** 2 = 4 + **= 2 => 4 + % 2 = 0 + %= 2 => 0 + + 4.0 = 6.0 + += 4.0 => 6.0 + - 4.0 = -2.0 + -= 4.0 => -2.0 + * 4.0 = 8.0 + *= 4.0 => 8.0 + / 4.0 = 0.5 + /= 4.0 => 0.5 + ** 4.0 = 16.0 + **= 4.0 => 16.0 + % 4.0 = 2.0 + %= 4.0 => 2.0 + + 2 = 4 + += 2 => 4 + - 2 = 0 + -= 2 => 0 + * 2 = 4 + *= 2 => 4 + / 2 = 1 + /= 2 => 1 + ** 2 = 4 + **= 2 => 4 + % 2 = 0 + %= 2 => 0 + + (2+0j) = (4.0 + 0.0j) + += (2+0j) => (4.0 + 0.0j) + - (2+0j) = (0.0 + 0.0j) + -= (2+0j) => (0.0 + 0.0j) + * (2+0j) = (4.0 + 0.0j) + *= (2+0j) => (4.0 + 0.0j) + / (2+0j) = (1.0 + 0.0j) + /= (2+0j) => (1.0 + 0.0j) + ** (2+0j) = (4.0 + 0.0j) + **= (2+0j) => (4.0 + 0.0j) + % (2+0j) = (0.0 + 0.0j) + %= (2+0j) => (0.0 + 0.0j) + + [1] ... exceptions.TypeError + += [1] ... exceptions.TypeError + - [1] ... exceptions.TypeError + -= [1] ... exceptions.TypeError + * [1] = [1, 1] + *= [1] => [1, 1] + / [1] ... exceptions.TypeError + /= [1] ... exceptions.TypeError + ** [1] ... exceptions.TypeError + **= [1] ... exceptions.TypeError + % [1] ... exceptions.TypeError + %= [1] ... exceptions.TypeError + + (2,) ... exceptions.TypeError + += (2,) ... exceptions.TypeError + - (2,) ... exceptions.TypeError + -= (2,) ... exceptions.TypeError + * (2,) = (2, 2) + *= (2,) => (2, 2) + / (2,) ... exceptions.TypeError + /= (2,) ... exceptions.TypeError + ** (2,) ... exceptions.TypeError + **= (2,) ... exceptions.TypeError + % (2,) ... exceptions.TypeError + %= (2,) ... exceptions.TypeError + + None ... exceptions.TypeError + += None ... exceptions.TypeError + - None ... exceptions.TypeError + -= None ... exceptions.TypeError + * None ... exceptions.TypeError + *= None ... exceptions.TypeError + / None ... exceptions.TypeError + /= None ... exceptions.TypeError + ** None ... exceptions.TypeError + **= None ... exceptions.TypeError + % None ... exceptions.TypeError + %= None ... exceptions.TypeError + + = 4 + += => 4 + - = 0 + -= => 0 + * = 4 + *= => 4 + / = 1 + /= => 1 + ** = 4 + **= => 4 + % = 0 + %= => 0 + + = 4 + += => 4 + - = 0 + -= => 0 + * = 4 + *= => 4 + / = 1 + /= => 1 + ** = 4 + **= => 4 + % = 0 + %= => 0 +divmod(2, 2) = (1, 0) +divmod(2, 4.0) = (0.0, 2.0) +divmod(2, 2) = (1L, 0L) +divmod(2, (2+0j)) = ((1+0j), 0j) +divmod(2, [1]) ... exceptions.TypeError +divmod(2, (2,)) ... exceptions.TypeError +divmod(2, None) ... exceptions.TypeError +divmod(2, ) ... exceptions.TypeError +divmod(2, ) = (1, 0) +divmod(4.0, 2) = (2.0, 0.0) +divmod(4.0, 4.0) = (1.0, 0.0) +divmod(4.0, 2) = (2.0, 0.0) +divmod(4.0, (2+0j)) = ((2+0j), 0j) +divmod(4.0, [1]) ... exceptions.TypeError +divmod(4.0, (2,)) ... exceptions.TypeError +divmod(4.0, None) ... exceptions.TypeError +divmod(4.0, ) ... exceptions.TypeError +divmod(4.0, ) = (2.0, 0.0) +divmod(2, 2) = (1L, 0L) +divmod(2, 4.0) = (0.0, 2.0) +divmod(2, 2) = (1L, 0L) +divmod(2, (2+0j)) = ((1+0j), 0j) +divmod(2, [1]) ... exceptions.TypeError +divmod(2, (2,)) ... exceptions.TypeError +divmod(2, None) ... exceptions.TypeError +divmod(2, ) ... exceptions.TypeError +divmod(2, ) = (1L, 0L) +divmod((2+0j), 2) = ((1+0j), 0j) +divmod((2+0j), 4.0) = (0j, (2+0j)) +divmod((2+0j), 2) = ((1+0j), 0j) +divmod((2+0j), (2+0j)) = ((1+0j), 0j) +divmod((2+0j), [1]) ... exceptions.TypeError +divmod((2+0j), (2,)) ... exceptions.TypeError +divmod((2+0j), None) ... exceptions.TypeError +divmod((2+0j), ) ... exceptions.TypeError +divmod((2+0j), ) = ((1+0j), 0j) +divmod([1], 2) ... exceptions.TypeError +divmod([1], 4.0) ... exceptions.TypeError +divmod([1], 2) ... exceptions.TypeError +divmod([1], (2+0j)) ... exceptions.TypeError +divmod([1], [1]) ... exceptions.TypeError +divmod([1], (2,)) ... exceptions.TypeError +divmod([1], None) ... exceptions.TypeError +divmod([1], ) ... exceptions.TypeError +divmod([1], ) ... exceptions.TypeError +divmod((2,), 2) ... exceptions.TypeError +divmod((2,), 4.0) ... exceptions.TypeError +divmod((2,), 2) ... exceptions.TypeError +divmod((2,), (2+0j)) ... exceptions.TypeError +divmod((2,), [1]) ... exceptions.TypeError +divmod((2,), (2,)) ... exceptions.TypeError +divmod((2,), None) ... exceptions.TypeError +divmod((2,), ) ... exceptions.TypeError +divmod((2,), ) ... exceptions.TypeError +divmod(None, 2) ... exceptions.TypeError +divmod(None, 4.0) ... exceptions.TypeError +divmod(None, 2) ... exceptions.TypeError +divmod(None, (2+0j)) ... exceptions.TypeError +divmod(None, [1]) ... exceptions.TypeError +divmod(None, (2,)) ... exceptions.TypeError +divmod(None, None) ... exceptions.TypeError +divmod(None, ) ... exceptions.TypeError +divmod(None, ) ... exceptions.TypeError +divmod(, 2) ... exceptions.TypeError +divmod(, 4.0) ... exceptions.TypeError +divmod(, 2) ... exceptions.TypeError +divmod(, (2+0j)) ... exceptions.TypeError +divmod(, [1]) ... exceptions.TypeError +divmod(, (2,)) ... exceptions.TypeError +divmod(, None) ... exceptions.TypeError +divmod(, ) ... exceptions.TypeError +divmod(, ) ... exceptions.TypeError +divmod(, 2) = (1, 0) +divmod(, 4.0) = (0.0, 2.0) +divmod(, 2) = (1L, 0L) +divmod(, (2+0j)) = ((1+0j), 0j) +divmod(, [1]) ... exceptions.TypeError +divmod(, (2,)) ... exceptions.TypeError +divmod(, None) ... exceptions.TypeError +divmod(, ) ... exceptions.TypeError +divmod(, ) = (1, 0) Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_compare ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_compare (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_compare Fri May 5 21:25:58 2006 @@ -1,101 +1,101 @@ -test_compare -2 == 2 -2 == 2.0 -2 == 2 -2 == (2+0j) -2 != [1] -2 != (3,) -2 != None -2 != -2 == -2 == -2.0 == 2 -2.0 == 2.0 -2.0 == 2 -2.0 == (2+0j) -2.0 != [1] -2.0 != (3,) -2.0 != None -2.0 != -2.0 == -2.0 == -2 == 2 -2 == 2.0 -2 == 2 -2 == (2+0j) -2 != [1] -2 != (3,) -2 != None -2 != -2 == -2 == -(2+0j) == 2 -(2+0j) == 2.0 -(2+0j) == 2 -(2+0j) == (2+0j) -(2+0j) != [1] -(2+0j) != (3,) -(2+0j) != None -(2+0j) != -(2+0j) == -(2+0j) == -[1] != 2 -[1] != 2.0 -[1] != 2 -[1] != (2+0j) -[1] == [1] -[1] != (3,) -[1] != None -[1] != -[1] != -[1] != -(3,) != 2 -(3,) != 2.0 -(3,) != 2 -(3,) != (2+0j) -(3,) != [1] -(3,) == (3,) -(3,) != None -(3,) != -(3,) != -(3,) != -None != 2 -None != 2.0 -None != 2 -None != (2+0j) -None != [1] -None != (3,) -None == None -None != -None != -None != - != 2 - != 2.0 - != 2 - != (2+0j) - != [1] - != (3,) - != None - == - != - != - == 2 - == 2.0 - == 2 - == (2+0j) - != [1] - != (3,) - != None - != - == - == - == 2 - == 2.0 - == 2 - == (2+0j) - != [1] - != (3,) - != None - != - == - == +test_compare +2 == 2 +2 == 2.0 +2 == 2 +2 == (2+0j) +2 != [1] +2 != (3,) +2 != None +2 != +2 == +2 == +2.0 == 2 +2.0 == 2.0 +2.0 == 2 +2.0 == (2+0j) +2.0 != [1] +2.0 != (3,) +2.0 != None +2.0 != +2.0 == +2.0 == +2 == 2 +2 == 2.0 +2 == 2 +2 == (2+0j) +2 != [1] +2 != (3,) +2 != None +2 != +2 == +2 == +(2+0j) == 2 +(2+0j) == 2.0 +(2+0j) == 2 +(2+0j) == (2+0j) +(2+0j) != [1] +(2+0j) != (3,) +(2+0j) != None +(2+0j) != +(2+0j) == +(2+0j) == +[1] != 2 +[1] != 2.0 +[1] != 2 +[1] != (2+0j) +[1] == [1] +[1] != (3,) +[1] != None +[1] != +[1] != +[1] != +(3,) != 2 +(3,) != 2.0 +(3,) != 2 +(3,) != (2+0j) +(3,) != [1] +(3,) == (3,) +(3,) != None +(3,) != +(3,) != +(3,) != +None != 2 +None != 2.0 +None != 2 +None != (2+0j) +None != [1] +None != (3,) +None == None +None != +None != +None != + != 2 + != 2.0 + != 2 + != (2+0j) + != [1] + != (3,) + != None + == + != + != + == 2 + == 2.0 + == 2 + == (2+0j) + != [1] + != (3,) + != None + != + == + == + == 2 + == 2.0 + == 2 + == (2+0j) + != [1] + != (3,) + != None + != + == + == Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_cookie ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_cookie (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_cookie Fri May 5 21:25:58 2006 @@ -1,32 +1,32 @@ -test_cookie - -Set-Cookie: chips=ahoy; -Set-Cookie: vienna=finger; - chips 'ahoy' 'ahoy' -Set-Cookie: chips=ahoy; - vienna 'finger' 'finger' -Set-Cookie: vienna=finger; - -Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; - keebler 'E=mc2; L="Loves"; fudge=\n;' 'E=mc2; L="Loves"; fudge=\n;' -Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; - -Set-Cookie: keebler=E=mc2; - keebler 'E=mc2' 'E=mc2' -Set-Cookie: keebler=E=mc2; -Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; - - - - - - -If anything blows up after this line, it's from Cookie's doctest. +test_cookie + +Set-Cookie: chips=ahoy; +Set-Cookie: vienna=finger; + chips 'ahoy' 'ahoy' +Set-Cookie: chips=ahoy; + vienna 'finger' 'finger' +Set-Cookie: vienna=finger; + +Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; + keebler 'E=mc2; L="Loves"; fudge=\n;' 'E=mc2; L="Loves"; fudge=\n;' +Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"; + +Set-Cookie: keebler=E=mc2; + keebler 'E=mc2' 'E=mc2' +Set-Cookie: keebler=E=mc2; +Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme; + + + + + + +If anything blows up after this line, it's from Cookie's doctest. Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_exceptions ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_exceptions (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_exceptions Fri May 5 21:25:58 2006 @@ -1,52 +1,52 @@ -test_exceptions -5. Built-in exceptions -spam -AttributeError -spam -EOFError -spam -IOError -spam -ImportError -spam -IndexError -'spam' -KeyError -spam -KeyboardInterrupt -(not testable in a script) -spam -MemoryError -(not safe to test) -spam -NameError -spam -OverflowError -spam -RuntimeError -(not used any more?) -spam -SyntaxError -'continue' not supported inside 'finally' clause -ok -'continue' not properly in loop -ok -'continue' not properly in loop -ok -spam -IndentationError -spam -TabError -spam -SystemError -(hard to reproduce) -spam -SystemExit -spam -TypeError -spam -ValueError -spam -ZeroDivisionError -spam -Exception +test_exceptions +5. Built-in exceptions +spam +AttributeError +spam +EOFError +spam +IOError +spam +ImportError +spam +IndexError +'spam' +KeyError +spam +KeyboardInterrupt +(not testable in a script) +spam +MemoryError +(not safe to test) +spam +NameError +spam +OverflowError +spam +RuntimeError +(not used any more?) +spam +SyntaxError +'continue' not supported inside 'finally' clause +ok +'continue' not properly in loop +ok +'continue' not properly in loop +ok +spam +IndentationError +spam +TabError +spam +SystemError +(hard to reproduce) +spam +SystemExit +spam +TypeError +spam +ValueError +spam +ZeroDivisionError +spam +Exception Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_extcall ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_extcall (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_extcall Fri May 5 21:25:58 2006 @@ -1,112 +1,112 @@ -test_extcall -() {} -(1,) {} -(1, 2) {} -(1, 2, 3) {} -(1, 2, 3, 4, 5) {} -(1, 2, 3, 4, 5) {} -(1, 2, 3, 4, 5) {} -(1, 2, 3) {'a': 4, 'b': 5} -(1, 2, 3, 4, 5) {'a': 6, 'b': 7} -(1, 2, 3, 6, 7) {'a': 8, 'b': 9, 'x': 4, 'y': 5} -TypeError: g() takes at least 1 argument (0 given) -TypeError: g() takes at least 1 argument (0 given) -TypeError: g() takes at least 1 argument (0 given) -1 () {} -1 (2,) {} -1 (2, 3) {} -1 (2, 3, 4, 5) {} -0 (1, 2) {} -0 (1, 2, 3) {} -1 () {'a': 1, 'b': 2, 'c': 3, 'd': 4} -{'a': 1, 'b': 2, 'c': 3} -{'a': 1, 'b': 2, 'c': 3} -g() got multiple values for keyword argument 'x' -g() got multiple values for keyword argument 'b' -f() keywords must be strings -h() got an unexpected keyword argument 'e' -h() argument after * must be a sequence -dir() argument after * must be a sequence -NoneType object argument after * must be a sequence -h() argument after ** must be a dictionary -dir() argument after ** must be a dictionary -NoneType object argument after ** must be a dictionary -dir() got multiple values for keyword argument 'b' -3 512 True -3 -3 -za () {} -> za() takes exactly 1 argument (0 given) -za () {'a': 'aa'} -> ok za aa B D E V a -za () {'d': 'dd'} -> za() got an unexpected keyword argument 'd' -za () {'a': 'aa', 'd': 'dd'} -> za() got an unexpected keyword argument 'd' -za () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() got an unexpected keyword argument 'b' -za (1, 2) {} -> za() takes exactly 1 argument (2 given) -za (1, 2) {'a': 'aa'} -> za() takes exactly 1 non-keyword argument (2 given) -za (1, 2) {'d': 'dd'} -> za() takes exactly 1 non-keyword argument (2 given) -za (1, 2) {'a': 'aa', 'd': 'dd'} -> za() takes exactly 1 non-keyword argument (2 given) -za (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() takes exactly 1 non-keyword argument (2 given) -za (1, 2, 3, 4, 5) {} -> za() takes exactly 1 argument (5 given) -za (1, 2, 3, 4, 5) {'a': 'aa'} -> za() takes exactly 1 non-keyword argument (5 given) -za (1, 2, 3, 4, 5) {'d': 'dd'} -> za() takes exactly 1 non-keyword argument (5 given) -za (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> za() takes exactly 1 non-keyword argument (5 given) -za (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() takes exactly 1 non-keyword argument (5 given) -zade () {} -> zade() takes at least 1 argument (0 given) -zade () {'a': 'aa'} -> ok zade aa B d e V a -zade () {'d': 'dd'} -> zade() takes at least 1 non-keyword argument (0 given) -zade () {'a': 'aa', 'd': 'dd'} -> ok zade aa B dd e V d -zade () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() got an unexpected keyword argument 'b' -zade (1, 2) {} -> ok zade 1 B 2 e V e -zade (1, 2) {'a': 'aa'} -> zade() got multiple values for keyword argument 'a' -zade (1, 2) {'d': 'dd'} -> zade() got multiple values for keyword argument 'd' -zade (1, 2) {'a': 'aa', 'd': 'dd'} -> zade() got multiple values for keyword argument 'a' -zade (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() got multiple values for keyword argument 'a' -zade (1, 2, 3, 4, 5) {} -> zade() takes at most 3 arguments (5 given) -zade (1, 2, 3, 4, 5) {'a': 'aa'} -> zade() takes at most 3 non-keyword arguments (5 given) -zade (1, 2, 3, 4, 5) {'d': 'dd'} -> zade() takes at most 3 non-keyword arguments (5 given) -zade (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zade() takes at most 3 non-keyword arguments (5 given) -zade (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() takes at most 3 non-keyword arguments (5 given) -zabk () {} -> zabk() takes exactly 2 arguments (0 given) -zabk () {'a': 'aa'} -> zabk() takes exactly 2 non-keyword arguments (1 given) -zabk () {'d': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (0 given) -zabk () {'a': 'aa', 'd': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (1 given) -zabk () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> ok zabk aa bb D E V {'d': 'dd', 'e': 'ee'} -zabk (1, 2) {} -> ok zabk 1 2 D E V {} -zabk (1, 2) {'a': 'aa'} -> zabk() got multiple values for keyword argument 'a' -zabk (1, 2) {'d': 'dd'} -> ok zabk 1 2 D E V {'d': 'dd'} -zabk (1, 2) {'a': 'aa', 'd': 'dd'} -> zabk() got multiple values for keyword argument 'a' -zabk (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabk() got multiple values for keyword argument 'a' -zabk (1, 2, 3, 4, 5) {} -> zabk() takes exactly 2 arguments (5 given) -zabk (1, 2, 3, 4, 5) {'a': 'aa'} -> zabk() takes exactly 2 non-keyword arguments (5 given) -zabk (1, 2, 3, 4, 5) {'d': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (5 given) -zabk (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (5 given) -zabk (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabk() takes exactly 2 non-keyword arguments (5 given) -zabdv () {} -> zabdv() takes at least 2 arguments (0 given) -zabdv () {'a': 'aa'} -> zabdv() takes at least 2 non-keyword arguments (1 given) -zabdv () {'d': 'dd'} -> zabdv() takes at least 2 non-keyword arguments (0 given) -zabdv () {'a': 'aa', 'd': 'dd'} -> zabdv() takes at least 2 non-keyword arguments (1 given) -zabdv () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got an unexpected keyword argument 'e' -zabdv (1, 2) {} -> ok zabdv 1 2 d E () e -zabdv (1, 2) {'a': 'aa'} -> zabdv() got multiple values for keyword argument 'a' -zabdv (1, 2) {'d': 'dd'} -> ok zabdv 1 2 dd E () d -zabdv (1, 2) {'a': 'aa', 'd': 'dd'} -> zabdv() got multiple values for keyword argument 'a' -zabdv (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got multiple values for keyword argument 'a' -zabdv (1, 2, 3, 4, 5) {} -> ok zabdv 1 2 3 E (4, 5) e -zabdv (1, 2, 3, 4, 5) {'a': 'aa'} -> zabdv() got multiple values for keyword argument 'a' -zabdv (1, 2, 3, 4, 5) {'d': 'dd'} -> zabdv() got multiple values for keyword argument 'd' -zabdv (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabdv() got multiple values for keyword argument 'a' -zabdv (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got multiple values for keyword argument 'a' -zabdevk () {} -> zabdevk() takes at least 2 arguments (0 given) -zabdevk () {'a': 'aa'} -> zabdevk() takes at least 2 non-keyword arguments (1 given) -zabdevk () {'d': 'dd'} -> zabdevk() takes at least 2 non-keyword arguments (0 given) -zabdevk () {'a': 'aa', 'd': 'dd'} -> zabdevk() takes at least 2 non-keyword arguments (1 given) -zabdevk () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> ok zabdevk aa bb dd ee () {} -zabdevk (1, 2) {} -> ok zabdevk 1 2 d e () {} -zabdevk (1, 2) {'a': 'aa'} -> zabdevk() got multiple values for keyword argument 'a' -zabdevk (1, 2) {'d': 'dd'} -> ok zabdevk 1 2 dd e () {} -zabdevk (1, 2) {'a': 'aa', 'd': 'dd'} -> zabdevk() got multiple values for keyword argument 'a' -zabdevk (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdevk() got multiple values for keyword argument 'a' -zabdevk (1, 2, 3, 4, 5) {} -> ok zabdevk 1 2 3 4 (5,) {} -zabdevk (1, 2, 3, 4, 5) {'a': 'aa'} -> zabdevk() got multiple values for keyword argument 'a' -zabdevk (1, 2, 3, 4, 5) {'d': 'dd'} -> zabdevk() got multiple values for keyword argument 'd' -zabdevk (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabdevk() got multiple values for keyword argument 'a' -zabdevk (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdevk() got multiple values for keyword argument 'a' +test_extcall +() {} +(1,) {} +(1, 2) {} +(1, 2, 3) {} +(1, 2, 3, 4, 5) {} +(1, 2, 3, 4, 5) {} +(1, 2, 3, 4, 5) {} +(1, 2, 3) {'a': 4, 'b': 5} +(1, 2, 3, 4, 5) {'a': 6, 'b': 7} +(1, 2, 3, 6, 7) {'a': 8, 'b': 9, 'x': 4, 'y': 5} +TypeError: g() takes at least 1 argument (0 given) +TypeError: g() takes at least 1 argument (0 given) +TypeError: g() takes at least 1 argument (0 given) +1 () {} +1 (2,) {} +1 (2, 3) {} +1 (2, 3, 4, 5) {} +0 (1, 2) {} +0 (1, 2, 3) {} +1 () {'a': 1, 'b': 2, 'c': 3, 'd': 4} +{'a': 1, 'b': 2, 'c': 3} +{'a': 1, 'b': 2, 'c': 3} +g() got multiple values for keyword argument 'x' +g() got multiple values for keyword argument 'b' +f() keywords must be strings +h() got an unexpected keyword argument 'e' +h() argument after * must be a sequence +dir() argument after * must be a sequence +NoneType object argument after * must be a sequence +h() argument after ** must be a dictionary +dir() argument after ** must be a dictionary +NoneType object argument after ** must be a dictionary +dir() got multiple values for keyword argument 'b' +3 512 True +3 +3 +za () {} -> za() takes exactly 1 argument (0 given) +za () {'a': 'aa'} -> ok za aa B D E V a +za () {'d': 'dd'} -> za() got an unexpected keyword argument 'd' +za () {'a': 'aa', 'd': 'dd'} -> za() got an unexpected keyword argument 'd' +za () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() got an unexpected keyword argument 'b' +za (1, 2) {} -> za() takes exactly 1 argument (2 given) +za (1, 2) {'a': 'aa'} -> za() takes exactly 1 non-keyword argument (2 given) +za (1, 2) {'d': 'dd'} -> za() takes exactly 1 non-keyword argument (2 given) +za (1, 2) {'a': 'aa', 'd': 'dd'} -> za() takes exactly 1 non-keyword argument (2 given) +za (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() takes exactly 1 non-keyword argument (2 given) +za (1, 2, 3, 4, 5) {} -> za() takes exactly 1 argument (5 given) +za (1, 2, 3, 4, 5) {'a': 'aa'} -> za() takes exactly 1 non-keyword argument (5 given) +za (1, 2, 3, 4, 5) {'d': 'dd'} -> za() takes exactly 1 non-keyword argument (5 given) +za (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> za() takes exactly 1 non-keyword argument (5 given) +za (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> za() takes exactly 1 non-keyword argument (5 given) +zade () {} -> zade() takes at least 1 argument (0 given) +zade () {'a': 'aa'} -> ok zade aa B d e V a +zade () {'d': 'dd'} -> zade() takes at least 1 non-keyword argument (0 given) +zade () {'a': 'aa', 'd': 'dd'} -> ok zade aa B dd e V d +zade () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() got an unexpected keyword argument 'b' +zade (1, 2) {} -> ok zade 1 B 2 e V e +zade (1, 2) {'a': 'aa'} -> zade() got multiple values for keyword argument 'a' +zade (1, 2) {'d': 'dd'} -> zade() got multiple values for keyword argument 'd' +zade (1, 2) {'a': 'aa', 'd': 'dd'} -> zade() got multiple values for keyword argument 'a' +zade (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() got multiple values for keyword argument 'a' +zade (1, 2, 3, 4, 5) {} -> zade() takes at most 3 arguments (5 given) +zade (1, 2, 3, 4, 5) {'a': 'aa'} -> zade() takes at most 3 non-keyword arguments (5 given) +zade (1, 2, 3, 4, 5) {'d': 'dd'} -> zade() takes at most 3 non-keyword arguments (5 given) +zade (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zade() takes at most 3 non-keyword arguments (5 given) +zade (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zade() takes at most 3 non-keyword arguments (5 given) +zabk () {} -> zabk() takes exactly 2 arguments (0 given) +zabk () {'a': 'aa'} -> zabk() takes exactly 2 non-keyword arguments (1 given) +zabk () {'d': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (0 given) +zabk () {'a': 'aa', 'd': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (1 given) +zabk () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> ok zabk aa bb D E V {'d': 'dd', 'e': 'ee'} +zabk (1, 2) {} -> ok zabk 1 2 D E V {} +zabk (1, 2) {'a': 'aa'} -> zabk() got multiple values for keyword argument 'a' +zabk (1, 2) {'d': 'dd'} -> ok zabk 1 2 D E V {'d': 'dd'} +zabk (1, 2) {'a': 'aa', 'd': 'dd'} -> zabk() got multiple values for keyword argument 'a' +zabk (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabk() got multiple values for keyword argument 'a' +zabk (1, 2, 3, 4, 5) {} -> zabk() takes exactly 2 arguments (5 given) +zabk (1, 2, 3, 4, 5) {'a': 'aa'} -> zabk() takes exactly 2 non-keyword arguments (5 given) +zabk (1, 2, 3, 4, 5) {'d': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (5 given) +zabk (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabk() takes exactly 2 non-keyword arguments (5 given) +zabk (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabk() takes exactly 2 non-keyword arguments (5 given) +zabdv () {} -> zabdv() takes at least 2 arguments (0 given) +zabdv () {'a': 'aa'} -> zabdv() takes at least 2 non-keyword arguments (1 given) +zabdv () {'d': 'dd'} -> zabdv() takes at least 2 non-keyword arguments (0 given) +zabdv () {'a': 'aa', 'd': 'dd'} -> zabdv() takes at least 2 non-keyword arguments (1 given) +zabdv () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got an unexpected keyword argument 'e' +zabdv (1, 2) {} -> ok zabdv 1 2 d E () e +zabdv (1, 2) {'a': 'aa'} -> zabdv() got multiple values for keyword argument 'a' +zabdv (1, 2) {'d': 'dd'} -> ok zabdv 1 2 dd E () d +zabdv (1, 2) {'a': 'aa', 'd': 'dd'} -> zabdv() got multiple values for keyword argument 'a' +zabdv (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got multiple values for keyword argument 'a' +zabdv (1, 2, 3, 4, 5) {} -> ok zabdv 1 2 3 E (4, 5) e +zabdv (1, 2, 3, 4, 5) {'a': 'aa'} -> zabdv() got multiple values for keyword argument 'a' +zabdv (1, 2, 3, 4, 5) {'d': 'dd'} -> zabdv() got multiple values for keyword argument 'd' +zabdv (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabdv() got multiple values for keyword argument 'a' +zabdv (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdv() got multiple values for keyword argument 'a' +zabdevk () {} -> zabdevk() takes at least 2 arguments (0 given) +zabdevk () {'a': 'aa'} -> zabdevk() takes at least 2 non-keyword arguments (1 given) +zabdevk () {'d': 'dd'} -> zabdevk() takes at least 2 non-keyword arguments (0 given) +zabdevk () {'a': 'aa', 'd': 'dd'} -> zabdevk() takes at least 2 non-keyword arguments (1 given) +zabdevk () {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> ok zabdevk aa bb dd ee () {} +zabdevk (1, 2) {} -> ok zabdevk 1 2 d e () {} +zabdevk (1, 2) {'a': 'aa'} -> zabdevk() got multiple values for keyword argument 'a' +zabdevk (1, 2) {'d': 'dd'} -> ok zabdevk 1 2 dd e () {} +zabdevk (1, 2) {'a': 'aa', 'd': 'dd'} -> zabdevk() got multiple values for keyword argument 'a' +zabdevk (1, 2) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdevk() got multiple values for keyword argument 'a' +zabdevk (1, 2, 3, 4, 5) {} -> ok zabdevk 1 2 3 4 (5,) {} +zabdevk (1, 2, 3, 4, 5) {'a': 'aa'} -> zabdevk() got multiple values for keyword argument 'a' +zabdevk (1, 2, 3, 4, 5) {'d': 'dd'} -> zabdevk() got multiple values for keyword argument 'd' +zabdevk (1, 2, 3, 4, 5) {'a': 'aa', 'd': 'dd'} -> zabdevk() got multiple values for keyword argument 'a' +zabdevk (1, 2, 3, 4, 5) {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} -> zabdevk() got multiple values for keyword argument 'a' Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_frozen ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_frozen (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_frozen Fri May 5 21:25:58 2006 @@ -1,4 +1,4 @@ -test_frozen -Hello world... -Hello world... -Hello world... +test_frozen +Hello world... +Hello world... +Hello world... Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_global ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_global (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_global Fri May 5 21:25:58 2006 @@ -1,5 +1,5 @@ -test_global -got SyntaxError as expected -got SyntaxError as expected -got SyntaxError as expected -as expected, no SyntaxError +test_global +got SyntaxError as expected +got SyntaxError as expected +got SyntaxError as expected +as expected, no SyntaxError Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_grammar ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_grammar (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_grammar Fri May 5 21:25:58 2006 @@ -1,67 +1,67 @@ -test_grammar -1. Parser -1.1 Tokens -1.1.1 Backslashes -1.1.2 Numeric literals -1.1.2.1 Plain integers -1.1.2.2 Long integers -1.1.2.3 Floating point -1.1.3 String literals -1.2 Grammar -single_input -file_input -expr_input -eval_input -funcdef -lambdef -simple_stmt -expr_stmt -print_stmt -1 2 3 -1 2 3 -1 1 1 -extended print_stmt -1 2 3 -1 2 3 -1 1 1 -hello world -del_stmt -pass_stmt -flow_stmt -break_stmt -continue_stmt -continue + try/except ok -continue + try/finally ok -testing continue and break in try/except in loop -return_stmt -raise_stmt -import_name -import_from -global_stmt -exec_stmt -assert_stmt -if_stmt -while_stmt -for_stmt -try_stmt -suite -test -comparison -binary mask ops -shift ops -additive ops -multiplicative ops -unary ops -selectors - -atoms -classdef -['Apple', 'Banana', 'Coco nut'] -[3, 6, 9, 12, 15] -[3, 4, 5] -[(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')] -[(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] -[[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]] -[False, False, False] -[[1, 2], [3, 4], [5, 6]] -[('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] +test_grammar +1. Parser +1.1 Tokens +1.1.1 Backslashes +1.1.2 Numeric literals +1.1.2.1 Plain integers +1.1.2.2 Long integers +1.1.2.3 Floating point +1.1.3 String literals +1.2 Grammar +single_input +file_input +expr_input +eval_input +funcdef +lambdef +simple_stmt +expr_stmt +print_stmt +1 2 3 +1 2 3 +1 1 1 +extended print_stmt +1 2 3 +1 2 3 +1 1 1 +hello world +del_stmt +pass_stmt +flow_stmt +break_stmt +continue_stmt +continue + try/except ok +continue + try/finally ok +testing continue and break in try/except in loop +return_stmt +raise_stmt +import_name +import_from +global_stmt +exec_stmt +assert_stmt +if_stmt +while_stmt +for_stmt +try_stmt +suite +test +comparison +binary mask ops +shift ops +additive ops +multiplicative ops +unary ops +selectors + +atoms +classdef +['Apple', 'Banana', 'Coco nut'] +[3, 6, 9, 12, 15] +[3, 4, 5] +[(1, 'Apple'), (1, 'Banana'), (1, 'Coconut'), (2, 'Apple'), (2, 'Banana'), (2, 'Coconut'), (3, 'Apple'), (3, 'Banana'), (3, 'Coconut'), (4, 'Apple'), (4, 'Banana'), (4, 'Coconut'), (5, 'Apple'), (5, 'Banana'), (5, 'Coconut')] +[(1, 'Banana'), (1, 'Coconut'), (2, 'Banana'), (2, 'Coconut'), (3, 'Banana'), (3, 'Coconut'), (4, 'Banana'), (4, 'Coconut'), (5, 'Banana'), (5, 'Coconut')] +[[1], [1, 1], [1, 2, 4], [1, 3, 9, 27], [1, 4, 16, 64, 256]] +[False, False, False] +[[1, 2], [3, 4], [5, 6]] +[('Boeing', 'Airliner'), ('Boeing', 'Engine'), ('Ford', 'Engine'), ('Macdonalds', 'Cheeseburger')] Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_httplib ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_httplib (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_httplib Fri May 5 21:25:58 2006 @@ -1,13 +1,13 @@ -test_httplib -reply: 'HTTP/1.1 200 Ok\r\n' -Text -reply: 'HTTP/1.1 400.100 Not Ok\r\n' -BadStatusLine raised as expected -InvalidURL raised as expected -InvalidURL raised as expected -reply: 'HTTP/1.1 200 OK\r\n' -header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" -header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" -reply: 'HTTP/1.1 200 OK\r\n' -header: Content-Length: 14432 - +test_httplib +reply: 'HTTP/1.1 200 Ok\r\n' +Text +reply: 'HTTP/1.1 400.100 Not Ok\r\n' +BadStatusLine raised as expected +InvalidURL raised as expected +InvalidURL raised as expected +reply: 'HTTP/1.1 200 OK\r\n' +header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" +header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" +reply: 'HTTP/1.1 200 OK\r\n' +header: Content-Length: 14432 + Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_linuxaudiodev ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_linuxaudiodev (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_linuxaudiodev Fri May 5 21:25:58 2006 @@ -1,7 +1,7 @@ -test_linuxaudiodev -expected rate >= 0, not -1 -expected sample size >= 0, not -2 -nchannels must be 1 or 2, not 3 -unknown audio encoding: 177 -for linear unsigned 16-bit little-endian audio, expected sample size 16, not 8 -for linear unsigned 8-bit audio, expected sample size 8, not 16 +test_linuxaudiodev +expected rate >= 0, not -1 +expected sample size >= 0, not -2 +nchannels must be 1 or 2, not 3 +unknown audio encoding: 177 +for linear unsigned 16-bit little-endian audio, expected sample size 16, not 8 +for linear unsigned 8-bit audio, expected sample size 8, not 16 Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_logging ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_logging (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_logging Fri May 5 21:25:58 2006 @@ -1,515 +1,515 @@ -test_logging --- log_test0 begin --------------------------------------------------- -CRITICAL:ERR:Message 0 -ERROR:ERR:Message 1 -CRITICAL:INF:Message 2 -ERROR:INF:Message 3 -WARNING:INF:Message 4 -INFO:INF:Message 5 -CRITICAL:INF.UNDEF:Message 6 -ERROR:INF.UNDEF:Message 7 -WARNING:INF.UNDEF:Message 8 -INFO:INF.UNDEF:Message 9 -CRITICAL:INF.ERR:Message 10 -ERROR:INF.ERR:Message 11 -CRITICAL:INF.ERR.UNDEF:Message 12 -ERROR:INF.ERR.UNDEF:Message 13 -CRITICAL:DEB:Message 14 -ERROR:DEB:Message 15 -WARNING:DEB:Message 16 -INFO:DEB:Message 17 -DEBUG:DEB:Message 18 -CRITICAL:UNDEF:Message 19 -ERROR:UNDEF:Message 20 -WARNING:UNDEF:Message 21 -INFO:UNDEF:Message 22 -CRITICAL:INF.BADPARENT.UNDEF:Message 23 -CRITICAL:INF.BADPARENT:Message 24 -INFO:INF:Finish up, it's closing time. Messages should bear numbers 0 through 24. --- log_test0 end --------------------------------------------------- --- log_test1 begin --------------------------------------------------- --- setting logging level to 'Boring' ----- -Boring:root:This should only be seen at the 'Boring' logging level (or lower) -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Chatterbox' ----- -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Garrulous' ----- -Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Talkative' ----- -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Verbose' ----- -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Sociable' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Effusive' ----- -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Terse' ----- -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Taciturn' ----- -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Silent' ----- -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- Filtering at handler level to SOCIABLE -- --- setting logging level to 'Boring' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Chatterbox' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Garrulous' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Talkative' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Verbose' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Sociable' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Effusive' ----- -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Terse' ----- -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Taciturn' ----- -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Silent' ----- -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- Filtering using GARRULOUS filter -- --- setting logging level to 'Boring' ----- -Boring:root:This should only be seen at the 'Boring' logging level (or lower) -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Chatterbox' ----- -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Garrulous' ----- -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Talkative' ----- -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Verbose' ----- -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Sociable' ----- -Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Effusive' ----- -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Terse' ----- -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Taciturn' ----- -Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Silent' ----- -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- Filtering using specific filter for SOCIABLE, TACITURN -- --- setting logging level to 'Boring' ----- -Boring:root:This should only be seen at the 'Boring' logging level (or lower) -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Chatterbox' ----- -Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Garrulous' ----- -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Talkative' ----- -Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Verbose' ----- -Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Sociable' ----- -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Effusive' ----- -Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Terse' ----- -Terse:root:This should only be seen at the 'Terse' logging level (or lower) -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Taciturn' ----- -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- setting logging level to 'Silent' ----- -Silent:root:This should only be seen at the 'Silent' logging level (or lower) --- log_test1 end --------------------------------------------------- --- log_test2 begin --------------------------------------------------- --- logging at DEBUG, nothing should be seen yet -- --- logging at INFO, nothing should be seen yet -- --- logging at WARNING, 3 messages should be seen -- -DEBUG:root:Debug message -INFO:root:Info message -WARNING:root:Warn message --- logging 0 at INFO, messages should be seen every 10 events -- --- logging 1 at INFO, messages should be seen every 10 events -- --- logging 2 at INFO, messages should be seen every 10 events -- --- logging 3 at INFO, messages should be seen every 10 events -- --- logging 4 at INFO, messages should be seen every 10 events -- --- logging 5 at INFO, messages should be seen every 10 events -- --- logging 6 at INFO, messages should be seen every 10 events -- --- logging 7 at INFO, messages should be seen every 10 events -- --- logging 8 at INFO, messages should be seen every 10 events -- --- logging 9 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 0 -INFO:root:Info index = 1 -INFO:root:Info index = 2 -INFO:root:Info index = 3 -INFO:root:Info index = 4 -INFO:root:Info index = 5 -INFO:root:Info index = 6 -INFO:root:Info index = 7 -INFO:root:Info index = 8 -INFO:root:Info index = 9 --- logging 10 at INFO, messages should be seen every 10 events -- --- logging 11 at INFO, messages should be seen every 10 events -- --- logging 12 at INFO, messages should be seen every 10 events -- --- logging 13 at INFO, messages should be seen every 10 events -- --- logging 14 at INFO, messages should be seen every 10 events -- --- logging 15 at INFO, messages should be seen every 10 events -- --- logging 16 at INFO, messages should be seen every 10 events -- --- logging 17 at INFO, messages should be seen every 10 events -- --- logging 18 at INFO, messages should be seen every 10 events -- --- logging 19 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 10 -INFO:root:Info index = 11 -INFO:root:Info index = 12 -INFO:root:Info index = 13 -INFO:root:Info index = 14 -INFO:root:Info index = 15 -INFO:root:Info index = 16 -INFO:root:Info index = 17 -INFO:root:Info index = 18 -INFO:root:Info index = 19 --- logging 20 at INFO, messages should be seen every 10 events -- --- logging 21 at INFO, messages should be seen every 10 events -- --- logging 22 at INFO, messages should be seen every 10 events -- --- logging 23 at INFO, messages should be seen every 10 events -- --- logging 24 at INFO, messages should be seen every 10 events -- --- logging 25 at INFO, messages should be seen every 10 events -- --- logging 26 at INFO, messages should be seen every 10 events -- --- logging 27 at INFO, messages should be seen every 10 events -- --- logging 28 at INFO, messages should be seen every 10 events -- --- logging 29 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 20 -INFO:root:Info index = 21 -INFO:root:Info index = 22 -INFO:root:Info index = 23 -INFO:root:Info index = 24 -INFO:root:Info index = 25 -INFO:root:Info index = 26 -INFO:root:Info index = 27 -INFO:root:Info index = 28 -INFO:root:Info index = 29 --- logging 30 at INFO, messages should be seen every 10 events -- --- logging 31 at INFO, messages should be seen every 10 events -- --- logging 32 at INFO, messages should be seen every 10 events -- --- logging 33 at INFO, messages should be seen every 10 events -- --- logging 34 at INFO, messages should be seen every 10 events -- --- logging 35 at INFO, messages should be seen every 10 events -- --- logging 36 at INFO, messages should be seen every 10 events -- --- logging 37 at INFO, messages should be seen every 10 events -- --- logging 38 at INFO, messages should be seen every 10 events -- --- logging 39 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 30 -INFO:root:Info index = 31 -INFO:root:Info index = 32 -INFO:root:Info index = 33 -INFO:root:Info index = 34 -INFO:root:Info index = 35 -INFO:root:Info index = 36 -INFO:root:Info index = 37 -INFO:root:Info index = 38 -INFO:root:Info index = 39 --- logging 40 at INFO, messages should be seen every 10 events -- --- logging 41 at INFO, messages should be seen every 10 events -- --- logging 42 at INFO, messages should be seen every 10 events -- --- logging 43 at INFO, messages should be seen every 10 events -- --- logging 44 at INFO, messages should be seen every 10 events -- --- logging 45 at INFO, messages should be seen every 10 events -- --- logging 46 at INFO, messages should be seen every 10 events -- --- logging 47 at INFO, messages should be seen every 10 events -- --- logging 48 at INFO, messages should be seen every 10 events -- --- logging 49 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 40 -INFO:root:Info index = 41 -INFO:root:Info index = 42 -INFO:root:Info index = 43 -INFO:root:Info index = 44 -INFO:root:Info index = 45 -INFO:root:Info index = 46 -INFO:root:Info index = 47 -INFO:root:Info index = 48 -INFO:root:Info index = 49 --- logging 50 at INFO, messages should be seen every 10 events -- --- logging 51 at INFO, messages should be seen every 10 events -- --- logging 52 at INFO, messages should be seen every 10 events -- --- logging 53 at INFO, messages should be seen every 10 events -- --- logging 54 at INFO, messages should be seen every 10 events -- --- logging 55 at INFO, messages should be seen every 10 events -- --- logging 56 at INFO, messages should be seen every 10 events -- --- logging 57 at INFO, messages should be seen every 10 events -- --- logging 58 at INFO, messages should be seen every 10 events -- --- logging 59 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 50 -INFO:root:Info index = 51 -INFO:root:Info index = 52 -INFO:root:Info index = 53 -INFO:root:Info index = 54 -INFO:root:Info index = 55 -INFO:root:Info index = 56 -INFO:root:Info index = 57 -INFO:root:Info index = 58 -INFO:root:Info index = 59 --- logging 60 at INFO, messages should be seen every 10 events -- --- logging 61 at INFO, messages should be seen every 10 events -- --- logging 62 at INFO, messages should be seen every 10 events -- --- logging 63 at INFO, messages should be seen every 10 events -- --- logging 64 at INFO, messages should be seen every 10 events -- --- logging 65 at INFO, messages should be seen every 10 events -- --- logging 66 at INFO, messages should be seen every 10 events -- --- logging 67 at INFO, messages should be seen every 10 events -- --- logging 68 at INFO, messages should be seen every 10 events -- --- logging 69 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 60 -INFO:root:Info index = 61 -INFO:root:Info index = 62 -INFO:root:Info index = 63 -INFO:root:Info index = 64 -INFO:root:Info index = 65 -INFO:root:Info index = 66 -INFO:root:Info index = 67 -INFO:root:Info index = 68 -INFO:root:Info index = 69 --- logging 70 at INFO, messages should be seen every 10 events -- --- logging 71 at INFO, messages should be seen every 10 events -- --- logging 72 at INFO, messages should be seen every 10 events -- --- logging 73 at INFO, messages should be seen every 10 events -- --- logging 74 at INFO, messages should be seen every 10 events -- --- logging 75 at INFO, messages should be seen every 10 events -- --- logging 76 at INFO, messages should be seen every 10 events -- --- logging 77 at INFO, messages should be seen every 10 events -- --- logging 78 at INFO, messages should be seen every 10 events -- --- logging 79 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 70 -INFO:root:Info index = 71 -INFO:root:Info index = 72 -INFO:root:Info index = 73 -INFO:root:Info index = 74 -INFO:root:Info index = 75 -INFO:root:Info index = 76 -INFO:root:Info index = 77 -INFO:root:Info index = 78 -INFO:root:Info index = 79 --- logging 80 at INFO, messages should be seen every 10 events -- --- logging 81 at INFO, messages should be seen every 10 events -- --- logging 82 at INFO, messages should be seen every 10 events -- --- logging 83 at INFO, messages should be seen every 10 events -- --- logging 84 at INFO, messages should be seen every 10 events -- --- logging 85 at INFO, messages should be seen every 10 events -- --- logging 86 at INFO, messages should be seen every 10 events -- --- logging 87 at INFO, messages should be seen every 10 events -- --- logging 88 at INFO, messages should be seen every 10 events -- --- logging 89 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 80 -INFO:root:Info index = 81 -INFO:root:Info index = 82 -INFO:root:Info index = 83 -INFO:root:Info index = 84 -INFO:root:Info index = 85 -INFO:root:Info index = 86 -INFO:root:Info index = 87 -INFO:root:Info index = 88 -INFO:root:Info index = 89 --- logging 90 at INFO, messages should be seen every 10 events -- --- logging 91 at INFO, messages should be seen every 10 events -- --- logging 92 at INFO, messages should be seen every 10 events -- --- logging 93 at INFO, messages should be seen every 10 events -- --- logging 94 at INFO, messages should be seen every 10 events -- --- logging 95 at INFO, messages should be seen every 10 events -- --- logging 96 at INFO, messages should be seen every 10 events -- --- logging 97 at INFO, messages should be seen every 10 events -- --- logging 98 at INFO, messages should be seen every 10 events -- --- logging 99 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 90 -INFO:root:Info index = 91 -INFO:root:Info index = 92 -INFO:root:Info index = 93 -INFO:root:Info index = 94 -INFO:root:Info index = 95 -INFO:root:Info index = 96 -INFO:root:Info index = 97 -INFO:root:Info index = 98 -INFO:root:Info index = 99 --- logging 100 at INFO, messages should be seen every 10 events -- --- logging 101 at INFO, messages should be seen every 10 events -- -INFO:root:Info index = 100 -INFO:root:Info index = 101 --- log_test2 end --------------------------------------------------- --- log_test3 begin --------------------------------------------------- -Unfiltered... -INFO:a:Info 1 -INFO:a.b:Info 2 -INFO:a.c:Info 3 -INFO:a.b.c:Info 4 -INFO:a.b.c.d:Info 5 -INFO:a.bb.c:Info 6 -INFO:b:Info 7 -INFO:b.a:Info 8 -INFO:c.a.b:Info 9 -INFO:a.bb:Info 10 -Filtered with 'a.b'... -INFO:a.b:Info 2 -INFO:a.b.c:Info 4 -INFO:a.b.c.d:Info 5 --- log_test3 end --------------------------------------------------- --- logrecv output begin --------------------------------------------------- -ERR -> CRITICAL: Message 0 (via logrecv.tcp.ERR) -ERR -> ERROR: Message 1 (via logrecv.tcp.ERR) -INF -> CRITICAL: Message 2 (via logrecv.tcp.INF) -INF -> ERROR: Message 3 (via logrecv.tcp.INF) -INF -> WARNING: Message 4 (via logrecv.tcp.INF) -INF -> INFO: Message 5 (via logrecv.tcp.INF) -INF.UNDEF -> CRITICAL: Message 6 (via logrecv.tcp.INF.UNDEF) -INF.UNDEF -> ERROR: Message 7 (via logrecv.tcp.INF.UNDEF) -INF.UNDEF -> WARNING: Message 8 (via logrecv.tcp.INF.UNDEF) -INF.UNDEF -> INFO: Message 9 (via logrecv.tcp.INF.UNDEF) -INF.ERR -> CRITICAL: Message 10 (via logrecv.tcp.INF.ERR) -INF.ERR -> ERROR: Message 11 (via logrecv.tcp.INF.ERR) -INF.ERR.UNDEF -> CRITICAL: Message 12 (via logrecv.tcp.INF.ERR.UNDEF) -INF.ERR.UNDEF -> ERROR: Message 13 (via logrecv.tcp.INF.ERR.UNDEF) -DEB -> CRITICAL: Message 14 (via logrecv.tcp.DEB) -DEB -> ERROR: Message 15 (via logrecv.tcp.DEB) -DEB -> WARNING: Message 16 (via logrecv.tcp.DEB) -DEB -> INFO: Message 17 (via logrecv.tcp.DEB) -DEB -> DEBUG: Message 18 (via logrecv.tcp.DEB) -UNDEF -> CRITICAL: Message 19 (via logrecv.tcp.UNDEF) -UNDEF -> ERROR: Message 20 (via logrecv.tcp.UNDEF) -UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF) -UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF) -INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF) -INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT) -INF -> INFO: Finish up, it's closing time. Messages should bear numbers 0 through 24. (via logrecv.tcp.INF) --- logrecv output end --------------------------------------------------- +test_logging +-- log_test0 begin --------------------------------------------------- +CRITICAL:ERR:Message 0 +ERROR:ERR:Message 1 +CRITICAL:INF:Message 2 +ERROR:INF:Message 3 +WARNING:INF:Message 4 +INFO:INF:Message 5 +CRITICAL:INF.UNDEF:Message 6 +ERROR:INF.UNDEF:Message 7 +WARNING:INF.UNDEF:Message 8 +INFO:INF.UNDEF:Message 9 +CRITICAL:INF.ERR:Message 10 +ERROR:INF.ERR:Message 11 +CRITICAL:INF.ERR.UNDEF:Message 12 +ERROR:INF.ERR.UNDEF:Message 13 +CRITICAL:DEB:Message 14 +ERROR:DEB:Message 15 +WARNING:DEB:Message 16 +INFO:DEB:Message 17 +DEBUG:DEB:Message 18 +CRITICAL:UNDEF:Message 19 +ERROR:UNDEF:Message 20 +WARNING:UNDEF:Message 21 +INFO:UNDEF:Message 22 +CRITICAL:INF.BADPARENT.UNDEF:Message 23 +CRITICAL:INF.BADPARENT:Message 24 +INFO:INF:Finish up, it's closing time. Messages should bear numbers 0 through 24. +-- log_test0 end --------------------------------------------------- +-- log_test1 begin --------------------------------------------------- +-- setting logging level to 'Boring' ----- +Boring:root:This should only be seen at the 'Boring' logging level (or lower) +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Chatterbox' ----- +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Garrulous' ----- +Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Talkative' ----- +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Verbose' ----- +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Sociable' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Effusive' ----- +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Terse' ----- +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Taciturn' ----- +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Silent' ----- +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- Filtering at handler level to SOCIABLE -- +-- setting logging level to 'Boring' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Chatterbox' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Garrulous' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Talkative' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Verbose' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Sociable' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Effusive' ----- +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Terse' ----- +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Taciturn' ----- +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Silent' ----- +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- Filtering using GARRULOUS filter -- +-- setting logging level to 'Boring' ----- +Boring:root:This should only be seen at the 'Boring' logging level (or lower) +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Chatterbox' ----- +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Garrulous' ----- +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Talkative' ----- +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Verbose' ----- +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Sociable' ----- +Sociable:root:This should only be seen at the 'Sociable' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Effusive' ----- +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Terse' ----- +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Taciturn' ----- +Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Silent' ----- +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- Filtering using specific filter for SOCIABLE, TACITURN -- +-- setting logging level to 'Boring' ----- +Boring:root:This should only be seen at the 'Boring' logging level (or lower) +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Chatterbox' ----- +Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower) +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Garrulous' ----- +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Talkative' ----- +Talkative:root:This should only be seen at the 'Talkative' logging level (or lower) +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Verbose' ----- +Verbose:root:This should only be seen at the 'Verbose' logging level (or lower) +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Sociable' ----- +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Effusive' ----- +Effusive:root:This should only be seen at the 'Effusive' logging level (or lower) +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Terse' ----- +Terse:root:This should only be seen at the 'Terse' logging level (or lower) +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Taciturn' ----- +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- setting logging level to 'Silent' ----- +Silent:root:This should only be seen at the 'Silent' logging level (or lower) +-- log_test1 end --------------------------------------------------- +-- log_test2 begin --------------------------------------------------- +-- logging at DEBUG, nothing should be seen yet -- +-- logging at INFO, nothing should be seen yet -- +-- logging at WARNING, 3 messages should be seen -- +DEBUG:root:Debug message +INFO:root:Info message +WARNING:root:Warn message +-- logging 0 at INFO, messages should be seen every 10 events -- +-- logging 1 at INFO, messages should be seen every 10 events -- +-- logging 2 at INFO, messages should be seen every 10 events -- +-- logging 3 at INFO, messages should be seen every 10 events -- +-- logging 4 at INFO, messages should be seen every 10 events -- +-- logging 5 at INFO, messages should be seen every 10 events -- +-- logging 6 at INFO, messages should be seen every 10 events -- +-- logging 7 at INFO, messages should be seen every 10 events -- +-- logging 8 at INFO, messages should be seen every 10 events -- +-- logging 9 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 0 +INFO:root:Info index = 1 +INFO:root:Info index = 2 +INFO:root:Info index = 3 +INFO:root:Info index = 4 +INFO:root:Info index = 5 +INFO:root:Info index = 6 +INFO:root:Info index = 7 +INFO:root:Info index = 8 +INFO:root:Info index = 9 +-- logging 10 at INFO, messages should be seen every 10 events -- +-- logging 11 at INFO, messages should be seen every 10 events -- +-- logging 12 at INFO, messages should be seen every 10 events -- +-- logging 13 at INFO, messages should be seen every 10 events -- +-- logging 14 at INFO, messages should be seen every 10 events -- +-- logging 15 at INFO, messages should be seen every 10 events -- +-- logging 16 at INFO, messages should be seen every 10 events -- +-- logging 17 at INFO, messages should be seen every 10 events -- +-- logging 18 at INFO, messages should be seen every 10 events -- +-- logging 19 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 10 +INFO:root:Info index = 11 +INFO:root:Info index = 12 +INFO:root:Info index = 13 +INFO:root:Info index = 14 +INFO:root:Info index = 15 +INFO:root:Info index = 16 +INFO:root:Info index = 17 +INFO:root:Info index = 18 +INFO:root:Info index = 19 +-- logging 20 at INFO, messages should be seen every 10 events -- +-- logging 21 at INFO, messages should be seen every 10 events -- +-- logging 22 at INFO, messages should be seen every 10 events -- +-- logging 23 at INFO, messages should be seen every 10 events -- +-- logging 24 at INFO, messages should be seen every 10 events -- +-- logging 25 at INFO, messages should be seen every 10 events -- +-- logging 26 at INFO, messages should be seen every 10 events -- +-- logging 27 at INFO, messages should be seen every 10 events -- +-- logging 28 at INFO, messages should be seen every 10 events -- +-- logging 29 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 20 +INFO:root:Info index = 21 +INFO:root:Info index = 22 +INFO:root:Info index = 23 +INFO:root:Info index = 24 +INFO:root:Info index = 25 +INFO:root:Info index = 26 +INFO:root:Info index = 27 +INFO:root:Info index = 28 +INFO:root:Info index = 29 +-- logging 30 at INFO, messages should be seen every 10 events -- +-- logging 31 at INFO, messages should be seen every 10 events -- +-- logging 32 at INFO, messages should be seen every 10 events -- +-- logging 33 at INFO, messages should be seen every 10 events -- +-- logging 34 at INFO, messages should be seen every 10 events -- +-- logging 35 at INFO, messages should be seen every 10 events -- +-- logging 36 at INFO, messages should be seen every 10 events -- +-- logging 37 at INFO, messages should be seen every 10 events -- +-- logging 38 at INFO, messages should be seen every 10 events -- +-- logging 39 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 30 +INFO:root:Info index = 31 +INFO:root:Info index = 32 +INFO:root:Info index = 33 +INFO:root:Info index = 34 +INFO:root:Info index = 35 +INFO:root:Info index = 36 +INFO:root:Info index = 37 +INFO:root:Info index = 38 +INFO:root:Info index = 39 +-- logging 40 at INFO, messages should be seen every 10 events -- +-- logging 41 at INFO, messages should be seen every 10 events -- +-- logging 42 at INFO, messages should be seen every 10 events -- +-- logging 43 at INFO, messages should be seen every 10 events -- +-- logging 44 at INFO, messages should be seen every 10 events -- +-- logging 45 at INFO, messages should be seen every 10 events -- +-- logging 46 at INFO, messages should be seen every 10 events -- +-- logging 47 at INFO, messages should be seen every 10 events -- +-- logging 48 at INFO, messages should be seen every 10 events -- +-- logging 49 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 40 +INFO:root:Info index = 41 +INFO:root:Info index = 42 +INFO:root:Info index = 43 +INFO:root:Info index = 44 +INFO:root:Info index = 45 +INFO:root:Info index = 46 +INFO:root:Info index = 47 +INFO:root:Info index = 48 +INFO:root:Info index = 49 +-- logging 50 at INFO, messages should be seen every 10 events -- +-- logging 51 at INFO, messages should be seen every 10 events -- +-- logging 52 at INFO, messages should be seen every 10 events -- +-- logging 53 at INFO, messages should be seen every 10 events -- +-- logging 54 at INFO, messages should be seen every 10 events -- +-- logging 55 at INFO, messages should be seen every 10 events -- +-- logging 56 at INFO, messages should be seen every 10 events -- +-- logging 57 at INFO, messages should be seen every 10 events -- +-- logging 58 at INFO, messages should be seen every 10 events -- +-- logging 59 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 50 +INFO:root:Info index = 51 +INFO:root:Info index = 52 +INFO:root:Info index = 53 +INFO:root:Info index = 54 +INFO:root:Info index = 55 +INFO:root:Info index = 56 +INFO:root:Info index = 57 +INFO:root:Info index = 58 +INFO:root:Info index = 59 +-- logging 60 at INFO, messages should be seen every 10 events -- +-- logging 61 at INFO, messages should be seen every 10 events -- +-- logging 62 at INFO, messages should be seen every 10 events -- +-- logging 63 at INFO, messages should be seen every 10 events -- +-- logging 64 at INFO, messages should be seen every 10 events -- +-- logging 65 at INFO, messages should be seen every 10 events -- +-- logging 66 at INFO, messages should be seen every 10 events -- +-- logging 67 at INFO, messages should be seen every 10 events -- +-- logging 68 at INFO, messages should be seen every 10 events -- +-- logging 69 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 60 +INFO:root:Info index = 61 +INFO:root:Info index = 62 +INFO:root:Info index = 63 +INFO:root:Info index = 64 +INFO:root:Info index = 65 +INFO:root:Info index = 66 +INFO:root:Info index = 67 +INFO:root:Info index = 68 +INFO:root:Info index = 69 +-- logging 70 at INFO, messages should be seen every 10 events -- +-- logging 71 at INFO, messages should be seen every 10 events -- +-- logging 72 at INFO, messages should be seen every 10 events -- +-- logging 73 at INFO, messages should be seen every 10 events -- +-- logging 74 at INFO, messages should be seen every 10 events -- +-- logging 75 at INFO, messages should be seen every 10 events -- +-- logging 76 at INFO, messages should be seen every 10 events -- +-- logging 77 at INFO, messages should be seen every 10 events -- +-- logging 78 at INFO, messages should be seen every 10 events -- +-- logging 79 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 70 +INFO:root:Info index = 71 +INFO:root:Info index = 72 +INFO:root:Info index = 73 +INFO:root:Info index = 74 +INFO:root:Info index = 75 +INFO:root:Info index = 76 +INFO:root:Info index = 77 +INFO:root:Info index = 78 +INFO:root:Info index = 79 +-- logging 80 at INFO, messages should be seen every 10 events -- +-- logging 81 at INFO, messages should be seen every 10 events -- +-- logging 82 at INFO, messages should be seen every 10 events -- +-- logging 83 at INFO, messages should be seen every 10 events -- +-- logging 84 at INFO, messages should be seen every 10 events -- +-- logging 85 at INFO, messages should be seen every 10 events -- +-- logging 86 at INFO, messages should be seen every 10 events -- +-- logging 87 at INFO, messages should be seen every 10 events -- +-- logging 88 at INFO, messages should be seen every 10 events -- +-- logging 89 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 80 +INFO:root:Info index = 81 +INFO:root:Info index = 82 +INFO:root:Info index = 83 +INFO:root:Info index = 84 +INFO:root:Info index = 85 +INFO:root:Info index = 86 +INFO:root:Info index = 87 +INFO:root:Info index = 88 +INFO:root:Info index = 89 +-- logging 90 at INFO, messages should be seen every 10 events -- +-- logging 91 at INFO, messages should be seen every 10 events -- +-- logging 92 at INFO, messages should be seen every 10 events -- +-- logging 93 at INFO, messages should be seen every 10 events -- +-- logging 94 at INFO, messages should be seen every 10 events -- +-- logging 95 at INFO, messages should be seen every 10 events -- +-- logging 96 at INFO, messages should be seen every 10 events -- +-- logging 97 at INFO, messages should be seen every 10 events -- +-- logging 98 at INFO, messages should be seen every 10 events -- +-- logging 99 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 90 +INFO:root:Info index = 91 +INFO:root:Info index = 92 +INFO:root:Info index = 93 +INFO:root:Info index = 94 +INFO:root:Info index = 95 +INFO:root:Info index = 96 +INFO:root:Info index = 97 +INFO:root:Info index = 98 +INFO:root:Info index = 99 +-- logging 100 at INFO, messages should be seen every 10 events -- +-- logging 101 at INFO, messages should be seen every 10 events -- +INFO:root:Info index = 100 +INFO:root:Info index = 101 +-- log_test2 end --------------------------------------------------- +-- log_test3 begin --------------------------------------------------- +Unfiltered... +INFO:a:Info 1 +INFO:a.b:Info 2 +INFO:a.c:Info 3 +INFO:a.b.c:Info 4 +INFO:a.b.c.d:Info 5 +INFO:a.bb.c:Info 6 +INFO:b:Info 7 +INFO:b.a:Info 8 +INFO:c.a.b:Info 9 +INFO:a.bb:Info 10 +Filtered with 'a.b'... +INFO:a.b:Info 2 +INFO:a.b.c:Info 4 +INFO:a.b.c.d:Info 5 +-- log_test3 end --------------------------------------------------- +-- logrecv output begin --------------------------------------------------- +ERR -> CRITICAL: Message 0 (via logrecv.tcp.ERR) +ERR -> ERROR: Message 1 (via logrecv.tcp.ERR) +INF -> CRITICAL: Message 2 (via logrecv.tcp.INF) +INF -> ERROR: Message 3 (via logrecv.tcp.INF) +INF -> WARNING: Message 4 (via logrecv.tcp.INF) +INF -> INFO: Message 5 (via logrecv.tcp.INF) +INF.UNDEF -> CRITICAL: Message 6 (via logrecv.tcp.INF.UNDEF) +INF.UNDEF -> ERROR: Message 7 (via logrecv.tcp.INF.UNDEF) +INF.UNDEF -> WARNING: Message 8 (via logrecv.tcp.INF.UNDEF) +INF.UNDEF -> INFO: Message 9 (via logrecv.tcp.INF.UNDEF) +INF.ERR -> CRITICAL: Message 10 (via logrecv.tcp.INF.ERR) +INF.ERR -> ERROR: Message 11 (via logrecv.tcp.INF.ERR) +INF.ERR.UNDEF -> CRITICAL: Message 12 (via logrecv.tcp.INF.ERR.UNDEF) +INF.ERR.UNDEF -> ERROR: Message 13 (via logrecv.tcp.INF.ERR.UNDEF) +DEB -> CRITICAL: Message 14 (via logrecv.tcp.DEB) +DEB -> ERROR: Message 15 (via logrecv.tcp.DEB) +DEB -> WARNING: Message 16 (via logrecv.tcp.DEB) +DEB -> INFO: Message 17 (via logrecv.tcp.DEB) +DEB -> DEBUG: Message 18 (via logrecv.tcp.DEB) +UNDEF -> CRITICAL: Message 19 (via logrecv.tcp.UNDEF) +UNDEF -> ERROR: Message 20 (via logrecv.tcp.UNDEF) +UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF) +UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF) +INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF) +INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT) +INF -> INFO: Finish up, it's closing time. Messages should bear numbers 0 through 24. (via logrecv.tcp.INF) +-- logrecv output end --------------------------------------------------- Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_math ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_math (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_math Fri May 5 21:25:58 2006 @@ -1,28 +1,28 @@ -test_math -math module, testing with eps 1e-05 -constants -acos -asin -atan -atan2 -ceil -cos -cosh -degrees -exp -fabs -floor -fmod -frexp -hypot -ldexp -log -log10 -modf -pow -radians -sin -sinh -sqrt -tan -tanh +test_math +math module, testing with eps 1e-05 +constants +acos +asin +atan +atan2 +ceil +cos +cosh +degrees +exp +fabs +floor +fmod +frexp +hypot +ldexp +log +log10 +modf +pow +radians +sin +sinh +sqrt +tan +tanh Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_mmap ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_mmap (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_mmap Fri May 5 21:25:58 2006 @@ -1,35 +1,35 @@ -test_mmap - - Position of foo: 1.0 pages - Length of file: 2.0 pages - Contents of byte 0: '\x00' - Contents of first 3 bytes: '\x00\x00\x00' - - Modifying file's content... - Contents of byte 0: '3' - Contents of first 3 bytes: '3\x00\x00' - Contents of second page: '\x00foobar\x00' - Regex match on mmap (page start, length of match): 1.0 6 - Seek to zeroth byte - Seek to 42nd byte - Seek to last byte - Try to seek to negative position... - Try to seek beyond end of mmap... - Try to seek to negative position... - Attempting resize() - Creating 10 byte test data file. - Opening mmap with access=ACCESS_READ - Ensuring that readonly mmap can't be slice assigned. - Ensuring that readonly mmap can't be item assigned. - Ensuring that readonly mmap can't be write() to. - Ensuring that readonly mmap can't be write_byte() to. - Ensuring that readonly mmap can't be resized. - Opening mmap with size too big - Opening mmap with access=ACCESS_WRITE - Modifying write-through memory map. - Opening mmap with access=ACCESS_COPY - Modifying copy-on-write memory map. - Ensuring copy-on-write maps cannot be resized. - Ensuring invalid access parameter raises exception. - Try opening a bad file descriptor... - Test passed +test_mmap + + Position of foo: 1.0 pages + Length of file: 2.0 pages + Contents of byte 0: '\x00' + Contents of first 3 bytes: '\x00\x00\x00' + + Modifying file's content... + Contents of byte 0: '3' + Contents of first 3 bytes: '3\x00\x00' + Contents of second page: '\x00foobar\x00' + Regex match on mmap (page start, length of match): 1.0 6 + Seek to zeroth byte + Seek to 42nd byte + Seek to last byte + Try to seek to negative position... + Try to seek beyond end of mmap... + Try to seek to negative position... + Attempting resize() + Creating 10 byte test data file. + Opening mmap with access=ACCESS_READ + Ensuring that readonly mmap can't be slice assigned. + Ensuring that readonly mmap can't be item assigned. + Ensuring that readonly mmap can't be write() to. + Ensuring that readonly mmap can't be write_byte() to. + Ensuring that readonly mmap can't be resized. + Opening mmap with size too big + Opening mmap with access=ACCESS_WRITE + Modifying write-through memory map. + Opening mmap with access=ACCESS_COPY + Modifying copy-on-write memory map. + Ensuring copy-on-write maps cannot be resized. + Ensuring invalid access parameter raises exception. + Try opening a bad file descriptor... + Test passed Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_new ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_new (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_new Fri May 5 21:25:58 2006 @@ -1,7 +1,7 @@ -test_new -new.module() -new.classobj() -new.instance() -new.instancemethod() -new.function() -new.code() +test_new +new.module() +new.classobj() +new.instance() +new.instancemethod() +new.function() +new.code() Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_nis ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_nis (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_nis Fri May 5 21:25:58 2006 @@ -1,2 +1,2 @@ -test_nis -nis.maps() +test_nis +nis.maps() Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_opcodes ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_opcodes (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_opcodes Fri May 5 21:25:58 2006 @@ -1,6 +1,6 @@ -test_opcodes -2. Opcodes -XXX Not yet fully implemented -2.1 try inside for loop -2.2 raise class exceptions -2.3 comparing function objects +test_opcodes +2. Opcodes +XXX Not yet fully implemented +2.1 try inside for loop +2.2 raise class exceptions +2.3 comparing function objects Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_openpty ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_openpty (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_openpty Fri May 5 21:25:58 2006 @@ -1,2 +1,2 @@ -test_openpty -Ping! +test_openpty +Ping! Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_operations ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_operations (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_operations Fri May 5 21:25:58 2006 @@ -1,6 +1,6 @@ -test_operations -3. Operations -XXX Mostly not yet implemented -3.1 Dictionary lookups succeed even if __cmp__() raises an exception -raising error -No exception passed through. +test_operations +3. Operations +XXX Mostly not yet implemented +3.1 Dictionary lookups succeed even if __cmp__() raises an exception +raising error +No exception passed through. Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_ossaudiodev ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_ossaudiodev (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_ossaudiodev Fri May 5 21:25:58 2006 @@ -1,3 +1,3 @@ -test_ossaudiodev -playing test sound file... -elapsed time: 3.1 sec +test_ossaudiodev +playing test sound file... +elapsed time: 3.1 sec Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_pep277 ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_pep277 (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_pep277 Fri May 5 21:25:58 2006 @@ -1,3 +1,3 @@ -test_pep277 -u'\xdf-\u66e8\u66e9\u66eb' -[u'Gr\xfc\xdf-Gott', u'abc', u'ascii', u'\u0393\u03b5\u03b9\u03ac-\u03c3\u03b1\u03c2', u'\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435', u'\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1', u'\u306b\u307d\u3093', u'\u66e8\u05e9\u3093\u0434\u0393\xdf', u'\u66e8\u66e9\u66eb'] +test_pep277 +u'\xdf-\u66e8\u66e9\u66eb' +[u'Gr\xfc\xdf-Gott', u'abc', u'ascii', u'\u0393\u03b5\u03b9\u03ac-\u03c3\u03b1\u03c2', u'\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435', u'\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1', u'\u306b\u307d\u3093', u'\u66e8\u05e9\u3093\u0434\u0393\xdf', u'\u66e8\u66e9\u66eb'] Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_pkg ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_pkg (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_pkg Fri May 5 21:25:58 2006 @@ -1,45 +1,45 @@ -test_pkg -running test t1 -running test t2 -t2 loading -doc for t2 -t2.sub.subsub loading -t2 t2.sub t2.sub.subsub -['sub', 't2'] -t2.sub t2.sub.subsub -t2.sub.subsub -['spam', 'sub', 'subsub', 't2'] -t2 t2.sub t2.sub.subsub -['spam', 'sub', 'subsub', 't2'] -running test t3 -t3 loading -t3.sub.subsub loading -t3 t3.sub t3.sub.subsub -t3 loading -t3.sub.subsub loading -running test t4 -t4 loading -t4.sub.subsub loading -t4.sub.subsub.spam = 1 -running test t5 -t5.foo loading -t5.string loading -1 -['foo', 'string', 't5'] -['__doc__', '__file__', '__name__', '__path__', 'foo', 'string', 't5'] -['__doc__', '__file__', '__name__', 'string'] -['__doc__', '__file__', '__name__', 'spam'] -running test t6 -['__all__', '__doc__', '__file__', '__name__', '__path__'] -t6.spam loading -t6.ham loading -t6.eggs loading -['__all__', '__doc__', '__file__', '__name__', '__path__', 'eggs', 'ham', 'spam'] -['eggs', 'ham', 'spam', 't6'] -running test t7 -t7 loading -['__doc__', '__file__', '__name__', '__path__'] -['__doc__', '__file__', '__name__', '__path__'] -t7.sub.subsub loading -['__doc__', '__file__', '__name__', '__path__', 'spam'] -t7.sub.subsub.spam = 1 +test_pkg +running test t1 +running test t2 +t2 loading +doc for t2 +t2.sub.subsub loading +t2 t2.sub t2.sub.subsub +['sub', 't2'] +t2.sub t2.sub.subsub +t2.sub.subsub +['spam', 'sub', 'subsub', 't2'] +t2 t2.sub t2.sub.subsub +['spam', 'sub', 'subsub', 't2'] +running test t3 +t3 loading +t3.sub.subsub loading +t3 t3.sub t3.sub.subsub +t3 loading +t3.sub.subsub loading +running test t4 +t4 loading +t4.sub.subsub loading +t4.sub.subsub.spam = 1 +running test t5 +t5.foo loading +t5.string loading +1 +['foo', 'string', 't5'] +['__doc__', '__file__', '__name__', '__path__', 'foo', 'string', 't5'] +['__doc__', '__file__', '__name__', 'string'] +['__doc__', '__file__', '__name__', 'spam'] +running test t6 +['__all__', '__doc__', '__file__', '__name__', '__path__'] +t6.spam loading +t6.ham loading +t6.eggs loading +['__all__', '__doc__', '__file__', '__name__', '__path__', 'eggs', 'ham', 'spam'] +['eggs', 'ham', 'spam', 't6'] +running test t7 +t7 loading +['__doc__', '__file__', '__name__', '__path__'] +['__doc__', '__file__', '__name__', '__path__'] +t7.sub.subsub loading +['__doc__', '__file__', '__name__', '__path__', 'spam'] +t7.sub.subsub.spam = 1 Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_poll ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_poll (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_poll Fri May 5 21:25:58 2006 @@ -1,19 +1,19 @@ -test_poll -Running poll test 1 - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. - This is a test. -Poll test 1 complete -Running poll test 2 -Poll test 2 complete -Running poll test 3 -Poll test 3 complete +test_poll +Running poll test 1 + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. + This is a test. +Poll test 1 complete +Running poll test 2 +Poll test 2 complete +Running poll test 3 +Poll test 3 complete Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_popen ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_popen (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_popen Fri May 5 21:25:58 2006 @@ -1,3 +1,3 @@ -test_popen -Test popen: -popen seemed to process the command-line correctly +test_popen +Test popen: +popen seemed to process the command-line correctly Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_popen2 ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_popen2 (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_popen2 Fri May 5 21:25:58 2006 @@ -1,9 +1,9 @@ -test_popen2 -Test popen2 module: -testing popen2... -testing popen3... -All OK -Testing os module: -testing popen2... -testing popen3... -All OK +test_popen2 +Test popen2 module: +testing popen2... +testing popen3... +All OK +Testing os module: +testing popen2... +testing popen3... +All OK Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_profile ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_profile (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_profile Fri May 5 21:25:58 2006 @@ -1,20 +1,20 @@ -test_profile - 74 function calls in 1.000 CPU seconds - - Ordered by: standard name - - ncalls tottime percall cumtime percall filename:lineno(function) - 12 0.000 0.000 0.012 0.001 :0(hasattr) - 8 0.000 0.000 0.000 0.000 :0(range) - 1 0.000 0.000 0.000 0.000 :0(setprofile) - 1 0.000 0.000 1.000 1.000 :1(?) - 0 0.000 0.000 profile:0(profiler) - 1 0.000 0.000 1.000 1.000 profile:0(testfunc()) - 1 0.400 0.400 1.000 1.000 test_profile.py:23(testfunc) - 2 0.080 0.040 0.600 0.300 test_profile.py:32(helper) - 4 0.116 0.029 0.120 0.030 test_profile.py:50(helper1) - 8 0.312 0.039 0.400 0.050 test_profile.py:58(helper2) - 8 0.064 0.008 0.080 0.010 test_profile.py:68(subhelper) - 28 0.028 0.001 0.028 0.001 test_profile.py:80(__getattr__) - - +test_profile + 74 function calls in 1.000 CPU seconds + + Ordered by: standard name + + ncalls tottime percall cumtime percall filename:lineno(function) + 12 0.000 0.000 0.012 0.001 :0(hasattr) + 8 0.000 0.000 0.000 0.000 :0(range) + 1 0.000 0.000 0.000 0.000 :0(setprofile) + 1 0.000 0.000 1.000 1.000 :1(?) + 0 0.000 0.000 profile:0(profiler) + 1 0.000 0.000 1.000 1.000 profile:0(testfunc()) + 1 0.400 0.400 1.000 1.000 test_profile.py:23(testfunc) + 2 0.080 0.040 0.600 0.300 test_profile.py:32(helper) + 4 0.116 0.029 0.120 0.030 test_profile.py:50(helper1) + 8 0.312 0.039 0.400 0.050 test_profile.py:58(helper2) + 8 0.064 0.008 0.080 0.010 test_profile.py:68(subhelper) + 28 0.028 0.001 0.028 0.001 test_profile.py:80(__getattr__) + + Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_pty ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_pty (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_pty Fri May 5 21:25:58 2006 @@ -1,3 +1,3 @@ -test_pty -I wish to buy a fish license. -For my pet fish, Eric. +test_pty +I wish to buy a fish license. +For my pet fish, Eric. Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_pyexpat ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_pyexpat (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_pyexpat Fri May 5 21:25:58 2006 @@ -1,110 +1,110 @@ -test_pyexpat -OK. -OK. -OK. -OK. -OK. -OK. -OK. -OK. -OK. -OK. -OK. -OK. -PI: - 'xml-stylesheet' 'href="stylesheet.css"' -Comment: - ' comment data ' -Notation declared: ('notation', None, 'notation.jpeg', None) -Unparsed entity decl: - ('unparsed_entity', None, 'entity.file', None, 'notation') -Start element: - 'root' {'attr1': 'value1', 'attr2': 'value2\xe1\xbd\x80'} -NS decl: - 'myns' 'http://www.python.org/namespace' -Start element: - 'http://www.python.org/namespace!subelement' {} -Character data: - 'Contents of subelements' -End element: - 'http://www.python.org/namespace!subelement' -End of NS decl: - 'myns' -Start element: - 'sub2' {} -Start of CDATA section -Character data: - 'contents of CDATA section' -End of CDATA section -End element: - 'sub2' -External entity ref: (None, 'entity.file', None) -End element: - 'root' -PI: - u'xml-stylesheet' u'href="stylesheet.css"' -Comment: - u' comment data ' -Notation declared: (u'notation', None, u'notation.jpeg', None) -Unparsed entity decl: - (u'unparsed_entity', None, u'entity.file', None, u'notation') -Start element: - u'root' {u'attr1': u'value1', u'attr2': u'value2\u1f40'} -NS decl: - u'myns' u'http://www.python.org/namespace' -Start element: - u'http://www.python.org/namespace!subelement' {} -Character data: - u'Contents of subelements' -End element: - u'http://www.python.org/namespace!subelement' -End of NS decl: - u'myns' -Start element: - u'sub2' {} -Start of CDATA section -Character data: - u'contents of CDATA section' -End of CDATA section -End element: - u'sub2' -External entity ref: (None, u'entity.file', None) -End element: - u'root' -PI: - u'xml-stylesheet' u'href="stylesheet.css"' -Comment: - u' comment data ' -Notation declared: (u'notation', None, u'notation.jpeg', None) -Unparsed entity decl: - (u'unparsed_entity', None, u'entity.file', None, u'notation') -Start element: - u'root' {u'attr1': u'value1', u'attr2': u'value2\u1f40'} -NS decl: - u'myns' u'http://www.python.org/namespace' -Start element: - u'http://www.python.org/namespace!subelement' {} -Character data: - u'Contents of subelements' -End element: - u'http://www.python.org/namespace!subelement' -End of NS decl: - u'myns' -Start element: - u'sub2' {} -Start of CDATA section -Character data: - u'contents of CDATA section' -End of CDATA section -End element: - u'sub2' -External entity ref: (None, u'entity.file', None) -End element: - u'root' - -Testing constructor for proper handling of namespace_separator values: -Legal values tested o.k. -Caught expected TypeError: -ParserCreate() argument 2 must be string or None, not int -Caught expected ValueError: -namespace_separator must be at most one character, omitted, or None +test_pyexpat +OK. +OK. +OK. +OK. +OK. +OK. +OK. +OK. +OK. +OK. +OK. +OK. +PI: + 'xml-stylesheet' 'href="stylesheet.css"' +Comment: + ' comment data ' +Notation declared: ('notation', None, 'notation.jpeg', None) +Unparsed entity decl: + ('unparsed_entity', None, 'entity.file', None, 'notation') +Start element: + 'root' {'attr1': 'value1', 'attr2': 'value2\xe1\xbd\x80'} +NS decl: + 'myns' 'http://www.python.org/namespace' +Start element: + 'http://www.python.org/namespace!subelement' {} +Character data: + 'Contents of subelements' +End element: + 'http://www.python.org/namespace!subelement' +End of NS decl: + 'myns' +Start element: + 'sub2' {} +Start of CDATA section +Character data: + 'contents of CDATA section' +End of CDATA section +End element: + 'sub2' +External entity ref: (None, 'entity.file', None) +End element: + 'root' +PI: + u'xml-stylesheet' u'href="stylesheet.css"' +Comment: + u' comment data ' +Notation declared: (u'notation', None, u'notation.jpeg', None) +Unparsed entity decl: + (u'unparsed_entity', None, u'entity.file', None, u'notation') +Start element: + u'root' {u'attr1': u'value1', u'attr2': u'value2\u1f40'} +NS decl: + u'myns' u'http://www.python.org/namespace' +Start element: + u'http://www.python.org/namespace!subelement' {} +Character data: + u'Contents of subelements' +End element: + u'http://www.python.org/namespace!subelement' +End of NS decl: + u'myns' +Start element: + u'sub2' {} +Start of CDATA section +Character data: + u'contents of CDATA section' +End of CDATA section +End element: + u'sub2' +External entity ref: (None, u'entity.file', None) +End element: + u'root' +PI: + u'xml-stylesheet' u'href="stylesheet.css"' +Comment: + u' comment data ' +Notation declared: (u'notation', None, u'notation.jpeg', None) +Unparsed entity decl: + (u'unparsed_entity', None, u'entity.file', None, u'notation') +Start element: + u'root' {u'attr1': u'value1', u'attr2': u'value2\u1f40'} +NS decl: + u'myns' u'http://www.python.org/namespace' +Start element: + u'http://www.python.org/namespace!subelement' {} +Character data: + u'Contents of subelements' +End element: + u'http://www.python.org/namespace!subelement' +End of NS decl: + u'myns' +Start element: + u'sub2' {} +Start of CDATA section +Character data: + u'contents of CDATA section' +End of CDATA section +End element: + u'sub2' +External entity ref: (None, u'entity.file', None) +End element: + u'root' + +Testing constructor for proper handling of namespace_separator values: +Legal values tested o.k. +Caught expected TypeError: +ParserCreate() argument 2 must be string or None, not int +Caught expected ValueError: +namespace_separator must be at most one character, omitted, or None Modified: stackless/Python-2.4.3/dev/Lib/test/output/test_regex ============================================================================== --- stackless/Python-2.4.3/dev/Lib/test/output/test_regex (original) +++ stackless/Python-2.4.3/dev/Lib/test/output/test_regex Fri May 5 21:25:58 2006 @@ -1,