diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst index 17a56dd4c71..11f87fc7d8a 100644 --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -2,7 +2,7 @@ =============================================================================== .. module:: argparse - :synopsis: Command-line option and argument-parsing library. + :synopsis: Command-line option and argument parsing library. .. moduleauthor:: Steven Bethard .. sectionauthor:: Steven Bethard @@ -107,7 +107,7 @@ or the :func:`max` function if it was not. Parsing arguments ^^^^^^^^^^^^^^^^^ -:class:`ArgumentParser` parses args through the +:class:`ArgumentParser` parses arguments through the :meth:`~ArgumentParser.parse_args` method. This will inspect the command line, convert each arg to the appropriate type and then invoke the appropriate action. In most cases, this means a simple :class:`Namespace` object will be built up from @@ -118,7 +118,7 @@ attributes parsed out of the command line:: In a script, :meth:`~ArgumentParser.parse_args` will typically be called with no arguments, and the :class:`ArgumentParser` will automatically determine the -command-line args from :data:`sys.argv`. +command-line arguments from :data:`sys.argv`. ArgumentParser objects @@ -669,11 +669,11 @@ be positional:: action ^^^^^^ -:class:`ArgumentParser` objects associate command-line args with actions. These -actions can do just about anything with the command-line args associated with +:class:`ArgumentParser` objects associate command-line arguments with actions. These +actions can do just about anything with the command-line arguments associated with them, though most actions simply add an attribute to the object returned by :meth:`~ArgumentParser.parse_args`. The ``action`` keyword argument specifies -how the command-line args should be handled. The supported actions are: +how the command-line arguments should be handled. The supported actions are: * ``'store'`` - This just stores the argument's value. This is the default action. For example:: @@ -745,8 +745,8 @@ the Action API. The easiest way to do this is to extend :meth:`~ArgumentParser.parse_args`. Most actions add an attribute to this object. -* ``values`` - The associated command-line args, with any type-conversions - applied. (Type-conversions are specified with the type_ keyword argument to +* ``values`` - The associated command-line arguments, with any type conversions + applied. (Type conversions are specified with the type_ keyword argument to :meth:`~ArgumentParser.add_argument`. * ``option_string`` - The option string that was used to invoke this action. @@ -778,7 +778,7 @@ single action to be taken. The ``nargs`` keyword argument associates a different number of command-line arguments with a single action. The supported values are: -* N (an integer). N args from the command line will be gathered together into a +* N (an integer). N arguments from the command line will be gathered together into a list. For example:: >>> parser = argparse.ArgumentParser() @@ -822,7 +822,7 @@ values are: Namespace(infile=<_io.TextIOWrapper name='' encoding='UTF-8'>, outfile=<_io.TextIOWrapper name='' encoding='UTF-8'>) -* ``'*'``. All command-line args present are gathered into a list. Note that +* ``'*'``. All command-line arguments present are gathered into a list. Note that it generally doesn't make much sense to have more than one positional argument with ``nargs='*'``, but multiple optional arguments with ``nargs='*'`` is possible. For example:: @@ -846,7 +846,7 @@ values are: usage: PROG [-h] foo [foo ...] PROG: error: too few arguments -If the ``nargs`` keyword argument is not provided, the number of args consumed +If the ``nargs`` keyword argument is not provided, the number of arguments consumed is determined by the action_. Generally this means a single command-line arg will be consumed and a single item (not a list) will be produced. @@ -864,7 +864,7 @@ the various :class:`ArgumentParser` actions. The two most common uses of it are * When :meth:`~ArgumentParser.add_argument` is called with option strings (like ``-f`` or ``--foo``) and ``nargs='?'``. This creates an optional - argument that can be followed by zero or one command-line args. + argument that can be followed by zero or one command-line arguments. When parsing the command line, if the option string is encountered with no command-line arg following it, the value of ``const`` will be assumed instead. See the nargs_ description for examples. @@ -914,11 +914,11 @@ command-line argument was not present.:: type ^^^^ -By default, :class:`ArgumentParser` objects read command-line args in as simple +By default, :class:`ArgumentParser` objects read command-line arguments in as simple strings. However, quite often the command-line string should instead be interpreted as another type, like a :class:`float` or :class:`int`. The ``type`` keyword argument of :meth:`~ArgumentParser.add_argument` allows any -necessary type-checking and type-conversions to be performed. Common built-in +necessary type-checking and type conversions to be performed. Common built-in types and functions can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() @@ -938,7 +938,7 @@ writable file:: Namespace(bar=<_io.TextIOWrapper name='out.txt' encoding='UTF-8'>) ``type=`` can take any callable that takes a single string argument and returns -the type-converted value:: +the converted value:: >>> def perfect_square(string): ... value = int(string) @@ -973,7 +973,7 @@ See the choices_ section for more details. choices ^^^^^^^ -Some command-line args should be selected from a restricted set of values. +Some command-line arguments should be selected from a restricted set of values. These can be handled by passing a container object as the ``choices`` keyword argument to :meth:`~ArgumentParser.add_argument`. When the command line is parsed, arg values will be checked, and an error message will be displayed if @@ -1331,7 +1331,7 @@ An error is produced for arguments that could produce more than one options. Beyond ``sys.argv`` ^^^^^^^^^^^^^^^^^^^ -Sometimes it may be useful to have an ArgumentParser parse args other than those +Sometimes it may be useful to have an ArgumentParser parse arguments other than those of :data:`sys.argv`. This can be accomplished by passing a list of strings to :meth:`~ArgumentParser.parse_args`. This is useful for testing at the interactive prompt:: @@ -1559,7 +1559,7 @@ FileType objects The :class:`FileType` factory creates objects that can be passed to the type argument of :meth:`ArgumentParser.add_argument`. Arguments that have - :class:`FileType` objects as their type will open command-line args as files + :class:`FileType` objects as their type will open command-line arguments as files with the requested modes and buffer sizes: >>> parser = argparse.ArgumentParser() @@ -1673,7 +1673,7 @@ Parser defaults .. method:: ArgumentParser.set_defaults(**kwargs) Most of the time, the attributes of the object returned by :meth:`parse_args` - will be fully determined by inspecting the command-line args and the argument + will be fully determined by inspecting the command-line arguments and the argument actions. :meth:`set_defaults` allows some additional attributes that are determined without any inspection of the command line to be added:: diff --git a/Doc/library/email.policy.rst b/Doc/library/email.policy.rst index 157f6922679..a77e51059e8 100644 --- a/Doc/library/email.policy.rst +++ b/Doc/library/email.policy.rst @@ -4,7 +4,7 @@ .. module:: email.policy :synopsis: Controlling the parsing and generating of messages -.. versionadded: 3.3 +.. versionadded:: 3.3 The :mod:`email` package's prime focus is the handling of email messages as diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index c7c36f3cc78..4e46339b43c 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -10,7 +10,7 @@ from distutils.errors import DistutilsFileError from distutils.tests import support -from test.support import run_unittest, create_empty_file +from test.support import run_unittest class BuildPyTestCase(support.TempdirManager, @@ -71,11 +71,11 @@ def test_empty_package_dir(self): # create the distribution files. sources = self.mkdtemp() - create_empty_file(os.path.join(sources, "__init__.py")) + open(os.path.join(sources, "__init__.py"), "w").close() testdir = os.path.join(sources, "doc") os.mkdir(testdir) - create_empty_file(os.path.join(testdir, "testfile")) + open(os.path.join(testdir, "testfile"), "w").close() os.chdir(sources) old_stdout = sys.stdout diff --git a/Lib/packaging/tests/test_pypi_xmlrpc.py b/Lib/packaging/tests/test_pypi_xmlrpc.py index 682bd7bc7c3..b7b382dba26 100644 --- a/Lib/packaging/tests/test_pypi_xmlrpc.py +++ b/Lib/packaging/tests/test_pypi_xmlrpc.py @@ -3,18 +3,14 @@ from packaging.pypi.xmlrpc import Client, InvalidSearchField, ProjectNotFound from packaging.tests import unittest +from packaging.tests.support import fake_dec try: import threading from packaging.tests.pypi_server import use_xmlrpc_server except ImportError: threading = None - def use_xmlrpc_server(): - def _use(func): - def __use(*args, **kw): - return func(*args, **kw) - return __use - return _use + use_xmlrpc_server = fake_dec @unittest.skipIf(threading is None, "Needs threading") diff --git a/Lib/shlex.py b/Lib/shlex.py index 279ab484059..92c49c36084 100644 --- a/Lib/shlex.py +++ b/Lib/shlex.py @@ -276,7 +276,7 @@ def split(s, comments=False, posix=True): return list(lex) -_find_unsafe = re.compile(r'[^\w\d@%_\-\+=:,\./]').search +_find_unsafe = re.compile(r'[^\w@%\-\+=:,\./]', re.ASCII).search def quote(s): """Return a shell-escaped version of the string *s*.""" diff --git a/Lib/shutil.py b/Lib/shutil.py index 329add0456a..87188845302 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -267,7 +267,7 @@ def onerror(*args): names = [] try: names = os.listdir(path) - except os.error as err: + except os.error: onerror(os.listdir, path, sys.exc_info()) for name in names: fullname = os.path.join(path, name) @@ -280,7 +280,7 @@ def onerror(*args): else: try: os.remove(fullname) - except os.error as err: + except os.error: onerror(os.remove, fullname, sys.exc_info()) try: os.rmdir(path) @@ -323,7 +323,7 @@ def move(src, dst): raise Error("Destination path '%s' already exists" % real_dst) try: os.rename(src, real_dst) - except OSError as exc: + except OSError: if os.path.isdir(src): if _destinsrc(src, dst): raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) diff --git a/Lib/test/test_shlex.py b/Lib/test/test_shlex.py index ea3d777ceba..d4463f30048 100644 --- a/Lib/test/test_shlex.py +++ b/Lib/test/test_shlex.py @@ -176,7 +176,8 @@ def testCompat(self): def testQuote(self): safeunquoted = string.ascii_letters + string.digits + '@%_-+=:,./' - unsafe = '"`$\\!' + unicode_sample = '\xe9\xe0\xdf' # e + acute accent, a + grave, sharp s + unsafe = '"`$\\!' + unicode_sample self.assertEqual(shlex.quote(''), "''") self.assertEqual(shlex.quote(safeunquoted), safeunquoted) diff --git a/Makefile.pre.in b/Makefile.pre.in index e1afc97bf7d..cc7c389e639 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1330,8 +1330,8 @@ smelly: all # Find files with funny names funny: - find $(DISTDIRS) \ - -o -type d \ + find $(SUBDIRS) $(SUBDIRSTOO) \ + -type d \ -o -name '*.[chs]' \ -o -name '*.py' \ -o -name '*.pyw' \ @@ -1359,7 +1359,7 @@ funny: -o -name .hgignore \ -o -name .bzrignore \ -o -name MANIFEST \ - -o -print + -print # Perform some verification checks on any modified files. patchcheck: