mirror of
https://github.com/python/cpython.git
synced 2025-08-19 16:20:59 +00:00
Merged revisions 79822,79828,79862,80067,80069,80080-80081,80084,80432-80433 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r79822 | georg.brandl | 2010-04-06 08:18:15 +0000 (Di, 06 Apr 2010) | 1 line #8320: document return value of recv_into(). ........ r79828 | georg.brandl | 2010-04-06 14:33:44 +0000 (Di, 06 Apr 2010) | 1 line Add JP. ........ r79862 | georg.brandl | 2010-04-06 20:27:59 +0000 (Di, 06 Apr 2010) | 1 line Fix syntax. ........ r80067 | georg.brandl | 2010-04-14 08:53:38 +0000 (Mi, 14 Apr 2010) | 1 line #5341: typo. ........ r80069 | georg.brandl | 2010-04-14 13:50:31 +0000 (Mi, 14 Apr 2010) | 1 line Add an x-ref to where the O_ constants are documented and move the SEEK_ constants after lseek(). ........ r80080 | georg.brandl | 2010-04-14 19:16:38 +0000 (Mi, 14 Apr 2010) | 1 line #8399: add note about Windows and O_BINARY. ........ r80081 | georg.brandl | 2010-04-14 21:34:44 +0000 (Mi, 14 Apr 2010) | 1 line #5250: document __instancecheck__ and __subclasscheck__. I hope the part about the class/metaclass distinction is understandable. ........ r80084 | georg.brandl | 2010-04-14 21:46:45 +0000 (Mi, 14 Apr 2010) | 1 line Fix missing. ........ r80432 | georg.brandl | 2010-04-24 08:56:58 +0000 (Sa, 24 Apr 2010) | 1 line Markup fixes. ........ r80433 | georg.brandl | 2010-04-24 09:08:10 +0000 (Sa, 24 Apr 2010) | 1 line #7507: quote "!" in pipes.quote(); it is a special character for some shells. ........
This commit is contained in:
parent
324086f1c1
commit
eb41214dbc
7 changed files with 82 additions and 32 deletions
|
@ -677,6 +677,16 @@ as internal buffering of data.
|
||||||
Availability: Unix, Windows.
|
Availability: Unix, Windows.
|
||||||
|
|
||||||
|
|
||||||
|
.. data:: SEEK_SET
|
||||||
|
SEEK_CUR
|
||||||
|
SEEK_END
|
||||||
|
|
||||||
|
Parameters to the :func:`lseek` function. Their values are 0, 1, and 2,
|
||||||
|
respectively. Availability: Windows, Unix.
|
||||||
|
|
||||||
|
.. versionadded:: 2.5
|
||||||
|
|
||||||
|
|
||||||
.. function:: open(file, flags[, mode])
|
.. function:: open(file, flags[, mode])
|
||||||
|
|
||||||
Open the file *file* and set various flags according to *flags* and possibly its
|
Open the file *file* and set various flags according to *flags* and possibly its
|
||||||
|
@ -686,7 +696,8 @@ as internal buffering of data.
|
||||||
|
|
||||||
For a description of the flag and mode values, see the C run-time documentation;
|
For a description of the flag and mode values, see the C run-time documentation;
|
||||||
flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`) are defined in
|
flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`) are defined in
|
||||||
this module too (see below).
|
this module too (see :ref:`open-constants`). In particular, on Windows adding
|
||||||
|
:const:`O_BINARY` is needed to open files in binary mode.
|
||||||
|
|
||||||
Availability: Unix, Windows.
|
Availability: Unix, Windows.
|
||||||
|
|
||||||
|
@ -774,6 +785,12 @@ as internal buffering of data.
|
||||||
:func:`fdopen`, or :data:`sys.stdout` or :data:`sys.stderr`, use its
|
:func:`fdopen`, or :data:`sys.stdout` or :data:`sys.stderr`, use its
|
||||||
:meth:`~file.write` method.
|
:meth:`~file.write` method.
|
||||||
|
|
||||||
|
|
||||||
|
.. _open-constants:
|
||||||
|
|
||||||
|
``open()`` flag constants
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The following constants are options for the *flags* parameter to the
|
The following constants are options for the *flags* parameter to the
|
||||||
:func:`~os.open` function. They can be combined using the bitwise OR operator
|
:func:`~os.open` function. They can be combined using the bitwise OR operator
|
||||||
``|``. Some of them are not available on all platforms. For descriptions of
|
``|``. Some of them are not available on all platforms. For descriptions of
|
||||||
|
@ -825,16 +842,6 @@ or `the MSDN <http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx>`_ on Window
|
||||||
the C library.
|
the C library.
|
||||||
|
|
||||||
|
|
||||||
.. data:: SEEK_SET
|
|
||||||
SEEK_CUR
|
|
||||||
SEEK_END
|
|
||||||
|
|
||||||
Parameters to the :func:`lseek` function. Their values are 0, 1, and 2,
|
|
||||||
respectively. Availability: Windows, Unix.
|
|
||||||
|
|
||||||
.. versionadded:: 2.5
|
|
||||||
|
|
||||||
|
|
||||||
.. _os-file-dir:
|
.. _os-file-dir:
|
||||||
|
|
||||||
Files and Directories
|
Files and Directories
|
||||||
|
|
|
@ -664,10 +664,10 @@ correspond to Unix system calls applicable to sockets.
|
||||||
.. method:: socket.recv_into(buffer[, nbytes[, flags]])
|
.. method:: socket.recv_into(buffer[, nbytes[, flags]])
|
||||||
|
|
||||||
Receive up to *nbytes* bytes from the socket, storing the data into a buffer
|
Receive up to *nbytes* bytes from the socket, storing the data into a buffer
|
||||||
rather than creating a new string. If *nbytes* is not specified (or 0),
|
rather than creating a new string. If *nbytes* is not specified (or 0),
|
||||||
receive up to the size available in the given buffer. See the Unix manual page
|
receive up to the size available in the given buffer. Returns the number of
|
||||||
:manpage:`recv(2)` for the meaning of the optional argument *flags*; it defaults
|
bytes received. See the Unix manual page :manpage:`recv(2)` for the meaning
|
||||||
to zero.
|
of the optional argument *flags*; it defaults to zero.
|
||||||
|
|
||||||
.. versionadded:: 2.5
|
.. versionadded:: 2.5
|
||||||
|
|
||||||
|
|
|
@ -1757,6 +1757,48 @@ property creation, proxies, frameworks, and automatic resource
|
||||||
locking/synchronization.
|
locking/synchronization.
|
||||||
|
|
||||||
|
|
||||||
|
Customizing instance and subclass checks
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
.. versionadded:: 2.6
|
||||||
|
|
||||||
|
The following methods are used to override the default behavior of the
|
||||||
|
:func:`isinstance` and :func:`issubclass` built-in functions.
|
||||||
|
|
||||||
|
In particular, the metaclass :class:`abc.ABCMeta` implements these methods in
|
||||||
|
order to allow the addition of Abstract Base Classes (ABCs) as "virtual base
|
||||||
|
classes" to any class or type (including built-in types), and including to other
|
||||||
|
ABCs.
|
||||||
|
|
||||||
|
.. method:: class.__instancecheck__(self, instance)
|
||||||
|
|
||||||
|
Return true if *instance* should be considered a (direct or indirect)
|
||||||
|
instance of *class*. If defined, called to implement ``isinstance(instance,
|
||||||
|
class)``.
|
||||||
|
|
||||||
|
|
||||||
|
.. method:: class.__subclasscheck__(self, subclass)
|
||||||
|
|
||||||
|
Return true if *subclass* should be considered a (direct or indirect)
|
||||||
|
subclass of *class*. If defined, called to implement ``issubclass(subclass,
|
||||||
|
class)``.
|
||||||
|
|
||||||
|
|
||||||
|
Note that these methods are looked up on the type (metaclass) of a class. They
|
||||||
|
cannot be defined as class methods in the actual class. This is consistent with
|
||||||
|
the lookup of special methods that are called on instances, only that in this
|
||||||
|
case the instance is itself a class.
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
:pep:`3119` - Introducing Abstract Base Classes
|
||||||
|
Includes the specification for customizing :func:`isinstance` and
|
||||||
|
:func:`issubclass` behavior through :meth:`__instancecheck__` and
|
||||||
|
:meth:`__subclasscheck__`, with motivation for this functionality in the
|
||||||
|
context of adding Abstract Base Classes (see the :mod:`abc` module) to the
|
||||||
|
language.
|
||||||
|
|
||||||
|
|
||||||
.. _callable-types:
|
.. _callable-types:
|
||||||
|
|
||||||
Emulating callable objects
|
Emulating callable objects
|
||||||
|
|
17
Lib/pipes.py
17
Lib/pipes.py
|
@ -263,11 +263,11 @@ def makepipeline(infile, steps, outfile):
|
||||||
|
|
||||||
# Reliably quote a string as a single argument for /bin/sh
|
# Reliably quote a string as a single argument for /bin/sh
|
||||||
|
|
||||||
_safechars = string.ascii_letters + string.digits + '!@%_-+=:,./' # Safe unquoted
|
# Safe unquoted
|
||||||
_funnychars = '"`$\\' # Unsafe inside "double quotes"
|
_safechars = frozenset(string.ascii_letters + string.digits + '@%_-+=:,./')
|
||||||
|
|
||||||
def quote(file):
|
def quote(file):
|
||||||
''' return a shell-escaped version of the file string '''
|
"""Return a shell-escaped version of the file string."""
|
||||||
for c in file:
|
for c in file:
|
||||||
if c not in _safechars:
|
if c not in _safechars:
|
||||||
break
|
break
|
||||||
|
@ -275,11 +275,6 @@ def quote(file):
|
||||||
if not file:
|
if not file:
|
||||||
return "''"
|
return "''"
|
||||||
return file
|
return file
|
||||||
if '\'' not in file:
|
# use single quotes, and put single quotes into double quotes
|
||||||
return '\'' + file + '\''
|
# the string $'b is then quoted as '$'"'"'b'
|
||||||
res = ''
|
return "'" + file.replace("'", "'\"'\"'") + "'"
|
||||||
for c in file:
|
|
||||||
if c in _funnychars:
|
|
||||||
c = '\\' + c
|
|
||||||
res = res + c
|
|
||||||
return '"' + res + '"'
|
|
||||||
|
|
|
@ -62,9 +62,10 @@ class SimplePipeTests(unittest.TestCase):
|
||||||
self.assertEqual(open(TESTFN).read(), d)
|
self.assertEqual(open(TESTFN).read(), d)
|
||||||
|
|
||||||
def testQuoting(self):
|
def testQuoting(self):
|
||||||
safeunquoted = string.ascii_letters + string.digits + '!@%_-+=:,./'
|
safeunquoted = string.ascii_letters + string.digits + '@%_-+=:,./'
|
||||||
unsafe = '"`$\\'
|
unsafe = '"`$\\!'
|
||||||
|
|
||||||
|
self.assertEqual(pipes.quote(''), "''")
|
||||||
self.assertEqual(pipes.quote(safeunquoted), safeunquoted)
|
self.assertEqual(pipes.quote(safeunquoted), safeunquoted)
|
||||||
self.assertEqual(pipes.quote('test file name'), "'test file name'")
|
self.assertEqual(pipes.quote('test file name'), "'test file name'")
|
||||||
for u in unsafe:
|
for u in unsafe:
|
||||||
|
@ -72,9 +73,7 @@ class SimplePipeTests(unittest.TestCase):
|
||||||
"'test%sname'" % u)
|
"'test%sname'" % u)
|
||||||
for u in unsafe:
|
for u in unsafe:
|
||||||
self.assertEqual(pipes.quote("test%s'name'" % u),
|
self.assertEqual(pipes.quote("test%s'name'" % u),
|
||||||
'"test\\%s\'name\'"' % u)
|
"'test%s'\"'\"'name'\"'\"''" % u)
|
||||||
|
|
||||||
self.assertEqual(pipes.quote(''), "''")
|
|
||||||
|
|
||||||
def testRepr(self):
|
def testRepr(self):
|
||||||
t = pipes.Template()
|
t = pipes.Template()
|
||||||
|
|
|
@ -29,7 +29,9 @@ Core and Builtins
|
||||||
|
|
||||||
- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.
|
- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.
|
||||||
|
|
||||||
- Issue #1583863: An unicode subclass can now override the __unicode__ method
|
- Issue #1583863: An unicode subclass can now override the __unicode__ method.
|
||||||
|
|
||||||
|
- Issue #7507: Quote "!" in pipes.quote(); it is special to some shells.
|
||||||
|
|
||||||
- Issue #7544: Preallocate thread memory before creating the thread to avoid
|
- Issue #7544: Preallocate thread memory before creating the thread to avoid
|
||||||
a fatal error in low memory condition.
|
a fatal error in low memory condition.
|
||||||
|
|
|
@ -17,6 +17,11 @@ the format to accommodate documentation needs as they arise.
|
||||||
Permissions History
|
Permissions History
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
- Jean-Paul Calderone was given commit access on April 6 2010 by
|
||||||
|
GFB, at suggestion of Michael Foord and others.
|
||||||
|
|
||||||
|
- Brian Curtin was given commit access on March 24 2010 by MvL.
|
||||||
|
|
||||||
- Florent Xicluna was given commit access on February 25 2010 by
|
- Florent Xicluna was given commit access on February 25 2010 by
|
||||||
MvL, based on Antoine Pitrou's recommendation.
|
MvL, based on Antoine Pitrou's recommendation.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue