mirror of
https://github.com/python/cpython.git
synced 2025-11-15 16:09:29 +00:00
Merged revisions 84249,84264,84326-84327,84407,84476,84480-84482,84484,84530-84531,84553,84619,84684,84915-84916 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k ........ r84249 | georg.brandl | 2010-08-22 01:20:01 +0200 (So, 22 Aug 2010) | 1 line Remove usage of rexec in tkinter demo. ........ r84264 | georg.brandl | 2010-08-22 22:23:38 +0200 (So, 22 Aug 2010) | 1 line #9649: fix default value description. ........ r84326 | georg.brandl | 2010-08-26 16:30:15 +0200 (Do, 26 Aug 2010) | 1 line #9689: add links from overview to in-depth class API descriptions. ........ r84327 | georg.brandl | 2010-08-26 16:30:56 +0200 (Do, 26 Aug 2010) | 1 line #9681: typo. ........ r84407 | georg.brandl | 2010-09-01 23:02:50 +0200 (Mi, 01 Sep 2010) | 1 line #9677: fix link. ........ r84476 | georg.brandl | 2010-09-04 00:14:52 +0200 (Sa, 04 Sep 2010) | 1 line Use tabs consistently. ........ r84480 | georg.brandl | 2010-09-04 00:33:27 +0200 (Sa, 04 Sep 2010) | 1 line More inclusive title. ........ r84481 | georg.brandl | 2010-09-04 00:36:22 +0200 (Sa, 04 Sep 2010) | 1 line #9767: doctest run over json docs. ........ r84482 | georg.brandl | 2010-09-04 00:40:02 +0200 (Sa, 04 Sep 2010) | 1 line #9760: clarify what context expression is. ........ r84484 | georg.brandl | 2010-09-04 00:49:27 +0200 (Sa, 04 Sep 2010) | 1 line Fix missing word. ........ r84530 | georg.brandl | 2010-09-05 19:07:12 +0200 (So, 05 Sep 2010) | 1 line #9747: fix copy-paste error in getresgid() doc. ........ r84531 | georg.brandl | 2010-09-05 19:09:18 +0200 (So, 05 Sep 2010) | 1 line #9776: fix some spacing. ........ r84553 | georg.brandl | 2010-09-06 08:49:07 +0200 (Mo, 06 Sep 2010) | 1 line #9780: both { and } are not valid fill characters. ........ r84619 | georg.brandl | 2010-09-08 12:43:45 +0200 (Mi, 08 Sep 2010) | 1 line Add Lukasz. ........ r84684 | georg.brandl | 2010-09-10 22:43:53 +0200 (Fr, 10 Sep 2010) | 1 line release() is probably not the most important method ........ r84915 | georg.brandl | 2010-09-20 08:27:02 +0200 (Mo, 20 Sep 2010) | 1 line Fix typo. ........ r84916 | georg.brandl | 2010-09-20 08:29:01 +0200 (Mo, 20 Sep 2010) | 1 line Mention % as string formatting. ........
This commit is contained in:
parent
23b4f927d5
commit
57a5e3f0e2
15 changed files with 77 additions and 41 deletions
|
|
@ -4,7 +4,6 @@ import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import cgi
|
import cgi
|
||||||
import rexec
|
|
||||||
from xml.parsers import expat
|
from xml.parsers import expat
|
||||||
|
|
||||||
LEFT, CENTER, RIGHT = "LEFT", "CENTER", "RIGHT"
|
LEFT, CENTER, RIGHT = "LEFT", "CENTER", "RIGHT"
|
||||||
|
|
@ -33,16 +32,16 @@ class Sheet:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.cells = {} # {(x, y): cell, ...}
|
self.cells = {} # {(x, y): cell, ...}
|
||||||
self.rexec = rexec.RExec()
|
self.ns = dict(
|
||||||
m = self.rexec.add_module('__main__')
|
cell = self.cellvalue,
|
||||||
m.cell = self.cellvalue
|
cells = self.multicellvalue,
|
||||||
m.cells = self.multicellvalue
|
sum = sum,
|
||||||
m.sum = sum
|
)
|
||||||
|
|
||||||
def cellvalue(self, x, y):
|
def cellvalue(self, x, y):
|
||||||
cell = self.getcell(x, y)
|
cell = self.getcell(x, y)
|
||||||
if hasattr(cell, 'recalc'):
|
if hasattr(cell, 'recalc'):
|
||||||
return cell.recalc(self.rexec)
|
return cell.recalc(self.ns)
|
||||||
else:
|
else:
|
||||||
return cell
|
return cell
|
||||||
|
|
||||||
|
|
@ -144,7 +143,7 @@ class Sheet:
|
||||||
self.reset()
|
self.reset()
|
||||||
for cell in self.cells.values():
|
for cell in self.cells.values():
|
||||||
if hasattr(cell, 'recalc'):
|
if hasattr(cell, 'recalc'):
|
||||||
cell.recalc(self.rexec)
|
cell.recalc(self.ns)
|
||||||
|
|
||||||
def display(self):
|
def display(self):
|
||||||
maxx, maxy = self.getsize()
|
maxx, maxy = self.getsize()
|
||||||
|
|
@ -164,7 +163,7 @@ class Sheet:
|
||||||
if x <= 0 or y <= 0:
|
if x <= 0 or y <= 0:
|
||||||
continue
|
continue
|
||||||
if hasattr(cell, 'recalc'):
|
if hasattr(cell, 'recalc'):
|
||||||
cell.recalc(self.rexec)
|
cell.recalc(self.ns)
|
||||||
if hasattr(cell, 'format'):
|
if hasattr(cell, 'format'):
|
||||||
text, alignment = cell.format()
|
text, alignment = cell.format()
|
||||||
assert isinstance(text, str)
|
assert isinstance(text, str)
|
||||||
|
|
@ -317,7 +316,7 @@ class BaseCell:
|
||||||
Subclasses may but needn't provide the following APIs:
|
Subclasses may but needn't provide the following APIs:
|
||||||
|
|
||||||
cell.reset() -- prepare for recalculation
|
cell.reset() -- prepare for recalculation
|
||||||
cell.recalc(rexec) -> value -- recalculate formula
|
cell.recalc(ns) -> value -- recalculate formula
|
||||||
cell.format() -> (value, alignment) -- return formatted value
|
cell.format() -> (value, alignment) -- return formatted value
|
||||||
cell.xml() -> string -- return XML
|
cell.xml() -> string -- return XML
|
||||||
"""
|
"""
|
||||||
|
|
@ -331,7 +330,7 @@ class NumericCell(BaseCell):
|
||||||
self.fmt = fmt
|
self.fmt = fmt
|
||||||
self.alignment = alignment
|
self.alignment = alignment
|
||||||
|
|
||||||
def recalc(self, rexec):
|
def recalc(self, ns):
|
||||||
return self.value
|
return self.value
|
||||||
|
|
||||||
def format(self):
|
def format(self):
|
||||||
|
|
@ -372,7 +371,7 @@ class StringCell(BaseCell):
|
||||||
self.fmt = fmt
|
self.fmt = fmt
|
||||||
self.alignment = alignment
|
self.alignment = alignment
|
||||||
|
|
||||||
def recalc(self, rexec):
|
def recalc(self, ns):
|
||||||
return self.text
|
return self.text
|
||||||
|
|
||||||
def format(self):
|
def format(self):
|
||||||
|
|
@ -398,13 +397,11 @@ class FormulaCell(BaseCell):
|
||||||
def reset(self):
|
def reset(self):
|
||||||
self.value = None
|
self.value = None
|
||||||
|
|
||||||
def recalc(self, rexec):
|
def recalc(self, ns):
|
||||||
if self.value is None:
|
if self.value is None:
|
||||||
try:
|
try:
|
||||||
# A hack to evaluate expressions using true division
|
# A hack to evaluate expressions using true division
|
||||||
rexec.r_exec("from __future__ import division\n" +
|
self.value = eval(self.translated, ns)
|
||||||
"__value__ = eval(%s)" % repr(self.translated))
|
|
||||||
self.value = rexec.r_eval("__value__")
|
|
||||||
except:
|
except:
|
||||||
exc = sys.exc_info()[0]
|
exc = sys.exc_info()[0]
|
||||||
if hasattr(exc, "__name__"):
|
if hasattr(exc, "__name__"):
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ latex_documents = [
|
||||||
('tutorial/index', 'tutorial.tex',
|
('tutorial/index', 'tutorial.tex',
|
||||||
'Python Tutorial', _stdauthor, 'manual'),
|
'Python Tutorial', _stdauthor, 'manual'),
|
||||||
('using/index', 'using.tex',
|
('using/index', 'using.tex',
|
||||||
'Python Setup', _stdauthor, 'manual'),
|
'Python Setup and Usage', _stdauthor, 'manual'),
|
||||||
('whatsnew/' + version, 'whatsnew.tex',
|
('whatsnew/' + version, 'whatsnew.tex',
|
||||||
'What\'s New in Python', 'A. M. Kuchling', 'howto'),
|
'What\'s New in Python', 'A. M. Kuchling', 'howto'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -82,12 +82,12 @@ Extending :class:`JSONEncoder`::
|
||||||
... return [obj.real, obj.imag]
|
... return [obj.real, obj.imag]
|
||||||
... return json.JSONEncoder.default(self, obj)
|
... return json.JSONEncoder.default(self, obj)
|
||||||
...
|
...
|
||||||
>>> dumps(2 + 1j, cls=ComplexEncoder)
|
>>> json.dumps(2 + 1j, cls=ComplexEncoder)
|
||||||
'[2.0, 1.0]'
|
'[2.0, 1.0]'
|
||||||
>>> ComplexEncoder().encode(2 + 1j)
|
>>> ComplexEncoder().encode(2 + 1j)
|
||||||
'[2.0, 1.0]'
|
'[2.0, 1.0]'
|
||||||
>>> list(ComplexEncoder().iterencode(2 + 1j))
|
>>> list(ComplexEncoder().iterencode(2 + 1j))
|
||||||
['[', '2.0', ', ', '1.0', ']']
|
['[2.0', ', 1.0', ']']
|
||||||
|
|
||||||
|
|
||||||
.. highlight:: none
|
.. highlight:: none
|
||||||
|
|
@ -339,7 +339,7 @@ Encoders and decoders
|
||||||
encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
|
encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode
|
||||||
such floats.
|
such floats.
|
||||||
|
|
||||||
If *sort_keys* is ``True`` (the default), then the output of dictionaries
|
If *sort_keys* is ``True`` (default ``False``), then the output of dictionaries
|
||||||
will be sorted by key; this is useful for regression tests to ensure that
|
will be sorted by key; this is useful for regression tests to ensure that
|
||||||
JSON serializations can be compared on a day-to-day basis.
|
JSON serializations can be compared on a day-to-day basis.
|
||||||
|
|
||||||
|
|
@ -373,7 +373,7 @@ Encoders and decoders
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return list(iterable)
|
return list(iterable)
|
||||||
return JSONEncoder.default(self, o)
|
return json.JSONEncoder.default(self, o)
|
||||||
|
|
||||||
|
|
||||||
.. method:: encode(o)
|
.. method:: encode(o)
|
||||||
|
|
@ -381,7 +381,7 @@ Encoders and decoders
|
||||||
Return a JSON string representation of a Python data structure, *o*. For
|
Return a JSON string representation of a Python data structure, *o*. For
|
||||||
example::
|
example::
|
||||||
|
|
||||||
>>> JSONEncoder().encode({"foo": ["bar", "baz"]})
|
>>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
|
||||||
'{"foo": ["bar", "baz"]}'
|
'{"foo": ["bar", "baz"]}'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -390,5 +390,5 @@ Encoders and decoders
|
||||||
Encode the given object, *o*, and yield each string representation as
|
Encode the given object, *o*, and yield each string representation as
|
||||||
available. For example::
|
available. For example::
|
||||||
|
|
||||||
for chunk in JSONEncoder().iterencode(bigobject):
|
for chunk in json.JSONEncoder().iterencode(bigobject):
|
||||||
mysocket.write(chunk)
|
mysocket.write(chunk)
|
||||||
|
|
|
||||||
|
|
@ -2210,8 +2210,8 @@ Synchronization types like locks, conditions and queues:
|
||||||
.. literalinclude:: ../includes/mp_synchronize.py
|
.. literalinclude:: ../includes/mp_synchronize.py
|
||||||
|
|
||||||
|
|
||||||
An showing how to use queues to feed tasks to a collection of worker process and
|
An example showing how to use queues to feed tasks to a collection of worker
|
||||||
collect the results:
|
process and collect the results:
|
||||||
|
|
||||||
.. literalinclude:: ../includes/mp_workers.py
|
.. literalinclude:: ../includes/mp_workers.py
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -299,11 +299,11 @@ The general form of a *standard format specifier* is:
|
||||||
precision: `integer`
|
precision: `integer`
|
||||||
type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
|
type: "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
|
||||||
|
|
||||||
The *fill* character can be any character other than '}' (which signifies the
|
The *fill* character can be any character other than '{' or '}'. The presence
|
||||||
end of the field). The presence of a fill character is signaled by the *next*
|
of a fill character is signaled by the character following it, which must be
|
||||||
character, which must be one of the alignment options. If the second character
|
one of the alignment options. If the second character of *format_spec* is not
|
||||||
of *format_spec* is not a valid alignment option, then it is assumed that both
|
a valid alignment option, then it is assumed that both the fill character and
|
||||||
the fill character and the alignment option are absent.
|
the alignment option are absent.
|
||||||
|
|
||||||
The meaning of the various alignment options is as follows:
|
The meaning of the various alignment options is as follows:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@ Exceptions
|
||||||
Exceptions raised in the child process, before the new program has started to
|
Exceptions raised in the child process, before the new program has started to
|
||||||
execute, will be re-raised in the parent. Additionally, the exception object
|
execute, will be re-raised in the parent. Additionally, the exception object
|
||||||
will have one extra attribute called :attr:`child_traceback`, which is a string
|
will have one extra attribute called :attr:`child_traceback`, which is a string
|
||||||
containing traceback information from the childs point of view.
|
containing traceback information from the child's point of view.
|
||||||
|
|
||||||
The most common exception raised is :exc:`OSError`. This occurs, for example,
|
The most common exception raised is :exc:`OSError`. This occurs, for example,
|
||||||
when trying to execute a non-existent file. Applications should prepare for
|
when trying to execute a non-existent file. Applications should prepare for
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ This module defines the following functions and objects:
|
||||||
variable allows one or more threads to wait until they are notified by another
|
variable allows one or more threads to wait until they are notified by another
|
||||||
thread.
|
thread.
|
||||||
|
|
||||||
|
See :ref:`condition-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: current_thread()
|
.. function:: current_thread()
|
||||||
|
|
||||||
|
|
@ -58,6 +60,8 @@ This module defines the following functions and objects:
|
||||||
with the :meth:`clear` method. The :meth:`wait` method blocks until the flag
|
with the :meth:`clear` method. The :meth:`wait` method blocks until the flag
|
||||||
is true.
|
is true.
|
||||||
|
|
||||||
|
See :ref:`event-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. class:: local
|
.. class:: local
|
||||||
|
|
||||||
|
|
@ -80,6 +84,8 @@ This module defines the following functions and objects:
|
||||||
acquired it, subsequent attempts to acquire it block, until it is released; any
|
acquired it, subsequent attempts to acquire it block, until it is released; any
|
||||||
thread may release it.
|
thread may release it.
|
||||||
|
|
||||||
|
See :ref:`lock-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: RLock()
|
.. function:: RLock()
|
||||||
|
|
||||||
|
|
@ -88,6 +94,8 @@ This module defines the following functions and objects:
|
||||||
reentrant lock, the same thread may acquire it again without blocking; the
|
reentrant lock, the same thread may acquire it again without blocking; the
|
||||||
thread must release it once for each time it has acquired it.
|
thread must release it once for each time it has acquired it.
|
||||||
|
|
||||||
|
See :ref:`rlock-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: Semaphore(value=1)
|
.. function:: Semaphore(value=1)
|
||||||
:noindex:
|
:noindex:
|
||||||
|
|
@ -98,6 +106,8 @@ This module defines the following functions and objects:
|
||||||
if necessary until it can return without making the counter negative. If not
|
if necessary until it can return without making the counter negative. If not
|
||||||
given, *value* defaults to 1.
|
given, *value* defaults to 1.
|
||||||
|
|
||||||
|
See :ref:`semaphore-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: BoundedSemaphore(value=1)
|
.. function:: BoundedSemaphore(value=1)
|
||||||
|
|
||||||
|
|
@ -109,15 +119,21 @@ This module defines the following functions and objects:
|
||||||
|
|
||||||
|
|
||||||
.. class:: Thread
|
.. class:: Thread
|
||||||
|
:noindex:
|
||||||
|
|
||||||
A class that represents a thread of control. This class can be safely
|
A class that represents a thread of control. This class can be safely
|
||||||
subclassed in a limited fashion.
|
subclassed in a limited fashion.
|
||||||
|
|
||||||
|
See :ref:`thread-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. class:: Timer
|
.. class:: Timer
|
||||||
|
:noindex:
|
||||||
|
|
||||||
A thread that executes a function after a specified interval has passed.
|
A thread that executes a function after a specified interval has passed.
|
||||||
|
|
||||||
|
See :ref:`timer-objects`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: settrace(func)
|
.. function:: settrace(func)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -350,7 +350,8 @@ usage patterns to be encapsulated for convenient reuse.
|
||||||
|
|
||||||
The execution of the :keyword:`with` statement with one "item" proceeds as follows:
|
The execution of the :keyword:`with` statement with one "item" proceeds as follows:
|
||||||
|
|
||||||
#. The context expression is evaluated to obtain a context manager.
|
#. The context expression (the expression given in the :token:`with_item`) is
|
||||||
|
evaluated to obtain a context manager.
|
||||||
|
|
||||||
#. The context manager's :meth:`__enter__` method is invoked.
|
#. The context manager's :meth:`__enter__` method is invoked.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1297,6 +1297,7 @@ groups from right to left).
|
||||||
| ``+``, ``-`` | Addition and subtraction |
|
| ``+``, ``-`` | Addition and subtraction |
|
||||||
+-----------------------------------------------+-------------------------------------+
|
+-----------------------------------------------+-------------------------------------+
|
||||||
| ``*``, ``/``, ``//``, ``%`` | Multiplication, division, remainder |
|
| ``*``, ``/``, ``//``, ``%`` | Multiplication, division, remainder |
|
||||||
|
| | [#]_ |
|
||||||
+-----------------------------------------------+-------------------------------------+
|
+-----------------------------------------------+-------------------------------------+
|
||||||
| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT |
|
| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT |
|
||||||
+-----------------------------------------------+-------------------------------------+
|
+-----------------------------------------------+-------------------------------------+
|
||||||
|
|
@ -1339,5 +1340,7 @@ groups from right to left).
|
||||||
the :keyword:`is` operator, like those involving comparisons between instance
|
the :keyword:`is` operator, like those involving comparisons between instance
|
||||||
methods, or constants. Check their documentation for more info.
|
methods, or constants. Check their documentation for more info.
|
||||||
|
|
||||||
|
.. [#] The ``%`` is also used for string formatting; the same precedence applies.
|
||||||
|
|
||||||
.. [#] The power operator ``**`` binds less tightly than an arithmetic or
|
.. [#] The power operator ``**`` binds less tightly than an arithmetic or
|
||||||
bitwise unary operator on its right, that is, ``2**-1`` is ``0.5``.
|
bitwise unary operator on its right, that is, ``2**-1`` is ``0.5``.
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<span class="linkdescr">keep this under your pillow</span></p>
|
<span class="linkdescr">keep this under your pillow</span></p>
|
||||||
<p class="biglink"><a class="biglink" href="{{ pathto("reference/index") }}">Language Reference</a><br/>
|
<p class="biglink"><a class="biglink" href="{{ pathto("reference/index") }}">Language Reference</a><br/>
|
||||||
<span class="linkdescr">describes syntax and language elements</span></p>
|
<span class="linkdescr">describes syntax and language elements</span></p>
|
||||||
<p class="biglink"><a class="biglink" href="{{ pathto("using/index") }}">Python Setup</a><br/>
|
<p class="biglink"><a class="biglink" href="{{ pathto("using/index") }}">Python Setup and Usage</a><br/>
|
||||||
<span class="linkdescr">how to use Python on different platforms</span></p>
|
<span class="linkdescr">how to use Python on different platforms</span></p>
|
||||||
<p class="biglink"><a class="biglink" href="{{ pathto("howto/index") }}">Python HOWTOs</a><br/>
|
<p class="biglink"><a class="biglink" href="{{ pathto("howto/index") }}">Python HOWTOs</a><br/>
|
||||||
<span class="linkdescr">in-depth documents on specific topics</span></p>
|
<span class="linkdescr">in-depth documents on specific topics</span></p>
|
||||||
|
|
|
||||||
|
|
@ -371,7 +371,7 @@ with no duplicate elements. Basic uses include membership testing and
|
||||||
eliminating duplicate entries. Set objects also support mathematical operations
|
eliminating duplicate entries. Set objects also support mathematical operations
|
||||||
like union, intersection, difference, and symmetric difference.
|
like union, intersection, difference, and symmetric difference.
|
||||||
|
|
||||||
Curly braces or the :func:`set` function can be use to create sets. Note: To
|
Curly braces or the :func:`set` function can be used to create sets. Note: To
|
||||||
create an empty set you have to use ``set()``, not ``{}``; the latter creates an
|
create an empty set you have to use ``set()``, not ``{}``; the latter creates an
|
||||||
empty dictionary, a data structure that we discuss in the next section.
|
empty dictionary, a data structure that we discuss in the next section.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
.. _using-index:
|
.. _using-index:
|
||||||
|
|
||||||
################
|
##########################
|
||||||
Python Setup
|
Python Setup and Usage
|
||||||
################
|
##########################
|
||||||
|
|
||||||
|
|
||||||
This part of the documentation is devoted to general information on the setup
|
This part of the documentation is devoted to general information on the setup
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,25 @@ for details. When the agreement is signed, please note it in this log.
|
||||||
Permissions History
|
Permissions History
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
- Lukasz Langa was given commit access on Sep 08 2010 by GFB,
|
||||||
|
at suggestion of Antoine Pitrou, for general bug fixing.
|
||||||
|
|
||||||
|
- Daniel Stutzbach was given commit access on Aug 22 2010 by MvL,
|
||||||
|
for general bug fixing.
|
||||||
|
|
||||||
|
- Ask Solem was given commit access on Aug 17 2010 by MvL,
|
||||||
|
on recommendation by Jesse Noller, for work on the multiprocessing
|
||||||
|
library.
|
||||||
|
|
||||||
|
- George Boutsioukis was given commit access on Aug 10 2010
|
||||||
|
by MvL, for work on 2to3.
|
||||||
|
|
||||||
|
- Éric Araujo was given commit access on Aug 10 2010 by BAC,
|
||||||
|
at suggestion of Tarek Ziadé.
|
||||||
|
|
||||||
|
- Terry Reedy was given commit access on Aug 04 2010 by MvL,
|
||||||
|
at suggestion of Nick Coghlan.
|
||||||
|
|
||||||
- Brian Quinlan was given commit access on Jul 26 2010 by GFB,
|
- Brian Quinlan was given commit access on Jul 26 2010 by GFB,
|
||||||
for work related to PEP 3148.
|
for work related to PEP 3148.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue