diff options
Diffstat (limited to 'Doc/library')
-rw-r--r-- | Doc/library/modulefinder.rst | 62 | ||||
-rw-r--r-- | Doc/library/msilib.rst | 19 | ||||
-rw-r--r-- | Doc/library/operator.rst | 15 | ||||
-rw-r--r-- | Doc/library/thread.rst | 6 | ||||
-rw-r--r-- | Doc/library/threading.rst | 7 | ||||
-rw-r--r-- | Doc/library/xml.dom.rst | 4 |
6 files changed, 102 insertions, 11 deletions
diff --git a/Doc/library/modulefinder.rst b/Doc/library/modulefinder.rst index 9ae0788..d39f412 100644 --- a/Doc/library/modulefinder.rst +++ b/Doc/library/modulefinder.rst @@ -48,3 +48,65 @@ report of the imported modules will be printed. Analyze the contents of the *pathname* file, which must contain Python code. +.. attribute:: ModuleFinder.modules + + A dictionary mapping module names to modules. See :ref:`modulefinder-example` + + +.. _modulefinder-example: + +Example usage of :class:`ModuleFinder` +-------------------------------------- + +The script that is going to get analyzed later on (bacon.py):: + + import re, itertools + + try: + import baconhameggs + except ImportError: + pass + + try: + import guido.python.ham + except ImportError: + pass + + +The script that will output the report of bacon.py:: + + from modulefinder import ModuleFinder + + finder = ModuleFinder() + finder.run_script('bacon.py') + + print 'Loaded modules:' + for name, mod in finder.modules.iteritems(): + print '%s: ' % name, + print ','.join(mod.globalnames.keys()[:3]) + + print '-'*50 + print 'Modules not imported:' + print '\n'.join(finder.badmodules.iterkeys()) + +Sample output (may vary depending on the architecture):: + + Loaded modules: + _types: + copy_reg: _inverted_registry,_slotnames,__all__ + sre_compile: isstring,_sre,_optimize_unicode + _sre: + sre_constants: REPEAT_ONE,makedict,AT_END_LINE + sys: + re: __module__,finditer,_expand + itertools: + __main__: re,itertools,baconhameggs + sre_parse: __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE + array: + types: __module__,IntType,TypeType + --------------------------------------------------- + Modules not imported: + guido.python.ham + baconhameggs + + diff --git a/Doc/library/msilib.rst b/Doc/library/msilib.rst index 35e472c..a8972a8 100644 --- a/Doc/library/msilib.rst +++ b/Doc/library/msilib.rst @@ -65,7 +65,7 @@ structures. .. function:: init_database(name, schema, ProductName, ProductCode, ProductVersion, Manufacturer) - Create and return a new database *name*, initialize it with *schema*, and set + Create and return a new database *name*, initialize it with *schema*, and set the properties *ProductName*, *ProductCode*, *ProductVersion*, and *Manufacturer*. @@ -77,13 +77,20 @@ structures. function returns. -.. function:: add_data(database, records) +.. function:: add_data(database, table, records) - Add all *records* to *database*. *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, ``None`` can be passed. + Add all *records* to the table named *table* in *database*. - Field values can be integers, strings, or instances of the Binary class. + The *table* argument must be one of the predefined tables in the MSI schema, + e.g. ``'Feature'``, ``'File'``, ``'Component'``, ``'Dialog'``, ``'Control'``, + etc. + + *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, + ``None`` can be passed. + + Field values can be int or long numbers, strings, or instances of the Binary + class. .. class:: Binary(filename) diff --git a/Doc/library/operator.rst b/Doc/library/operator.rst index 9a613ab..ca056ab 100644 --- a/Doc/library/operator.rst +++ b/Doc/library/operator.rst @@ -419,10 +419,12 @@ expect a function argument. Return a callable object that fetches *attr* from its operand. If more than one attribute is requested, returns a tuple of attributes. After, - ``f=attrgetter('name')``, the call ``f(b)`` returns ``b.name``. After, - ``f=attrgetter('name', 'date')``, the call ``f(b)`` returns ``(b.name, + ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``. After, + ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns ``(b.name, b.date)``. + The attribute names can also contain dots; after ``f = attrgetter('date.month')``, + the call ``f(b)`` returns ``b.date.month``. .. function:: itemgetter(item[, args...]) @@ -443,6 +445,15 @@ Examples:: [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)] +.. function:: methodcaller(name[, args...]) + + Return a callable object that calls the method *name* on its operand. If + additional arguments and/or keyword arguments are given, they will be given + to the method as well. After ``f = methodcaller('name')``, the call ``f(b)`` + returns ``b.name()``. After ``f = methodcaller('name', 'foo', bar=1)``, the + call ``f(b)`` returns ``b.name('foo', bar=1)``. + + .. _operator-map: Mapping Operators to Functions diff --git a/Doc/library/thread.rst b/Doc/library/thread.rst index 31d58e7..d7d140e 100644 --- a/Doc/library/thread.rst +++ b/Doc/library/thread.rst @@ -147,6 +147,11 @@ In addition to these methods, lock objects can also be used via the exception will be received by an arbitrary thread. (When the :mod:`signal` module is available, interrupts always go to the main thread.) +* The import machinery is not thread safe. In general, an import may not + have the side effect of importing a module, and only the main thread + should import modules. Imports within or caused by a thread other than + the main thread isn't safe. + * Calling :func:`sys.exit` or raising the :exc:`SystemExit` exception is equivalent to calling :func:`exit`. @@ -167,4 +172,3 @@ In addition to these methods, lock objects can also be used via the * When the main thread exits, it does not do any of its usual cleanup (except that :keyword:`try` ... :keyword:`finally` clauses are honored), and the standard I/O files are not flushed. - diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 6f3e95b..56b2b99 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -555,6 +555,13 @@ the :meth:`setDaemon` method and retrieved with the :meth:`isDaemon` method. There is a "main thread" object; this corresponds to the initial thread of control in the Python program. It is not a daemon thread. +.. warning:: + + The import machinery is not thread safe. In general, an import may not + have the side effect of importing a module, and only the main thread + should import modules. Imports within or caused by a thread other than + the main thread isn't safe. + There is the possibility that "dummy thread objects" are created. These are thread objects corresponding to "alien threads", which are threads of control started outside the threading module, such as directly from C code. Dummy diff --git a/Doc/library/xml.dom.rst b/Doc/library/xml.dom.rst index 5ddd6a8..768c9c8 100644 --- a/Doc/library/xml.dom.rst +++ b/Doc/library/xml.dom.rst @@ -641,8 +641,8 @@ of that class. .. method:: Element.removeAttribute(name) - Remove an attribute by name. No exception is raised if there is no matching - attribute. + Remove an attribute by name. If there is no matching attribute, a + :exc:`NotFoundErr` is raised. .. method:: Element.removeAttributeNode(oldAttr) |