Kaydet (Commit) b4ef8f29 authored tarafından Éric Araujo's avatar Éric Araujo

Branch merge

...@@ -20,7 +20,7 @@ regarding a type hierarchy for numbers based on ABCs.) ...@@ -20,7 +20,7 @@ regarding a type hierarchy for numbers based on ABCs.)
The :mod:`collections` module has some concrete classes that derive from The :mod:`collections` module has some concrete classes that derive from
ABCs; these can, of course, be further derived. In addition the ABCs; these can, of course, be further derived. In addition the
:mod:`collections` module has some ABCs that can be used to test whether :mod:`collections.abc` submodule has some ABCs that can be used to test whether
a class or instance provides a particular interface, for example, is it a class or instance provides a particular interface, for example, is it
hashable or a mapping. hashable or a mapping.
......
.. TODO integrate this in commandref and configfile
============= =============
Command hooks Command hooks
============= =============
...@@ -9,6 +11,9 @@ The pre-hooks are run after the command is finalized (its options are ...@@ -9,6 +11,9 @@ The pre-hooks are run after the command is finalized (its options are
processed), but before it is run. The post-hooks are run after the command processed), but before it is run. The post-hooks are run after the command
itself. Both types of hooks receive an instance of the command object. itself. Both types of hooks receive an instance of the command object.
See also global setup hooks in :ref:`packaging-setupcfg`.
Sample usage of hooks Sample usage of hooks
===================== =====================
......
.. highlightlang:: cfg .. highlightlang:: cfg
.. _packaging-setupcfg:
******************************************* *******************************************
Specification of the :file:`setup.cfg` file Specification of the :file:`setup.cfg` file
******************************************* *******************************************
.. :version: 1.0 :version: 0.9
This document describes the :file:`setup.cfg`, an ini-style configuration file This document describes the :file:`setup.cfg`, an ini-style configuration file
(compatible with :class:`configparser.RawConfigParser`) configuration file used (compatible with :class:`configparser.RawConfigParser`) used by Packaging to
by Packaging to replace the :file:`setup.py` file. replace the :file:`setup.py` file.
Syntax
======
The configuration file is an ini-based file. Variables name can be
assigned values, and grouped into sections. A line that starts with "#" is
commented out. Empty lines are also removed.
Example::
[section1]
# comment
name = value
name2 = "other value"
[section2]
foo = bar
Values conversion
-----------------
Here are a set of rules for converting values:
- If value is quoted with " chars, it's a string. This notation is useful to
include "=" characters in the value. In case the value contains a "
character, it must be escaped with a "\" character.
- If the value is "true" or "false" --no matter what the case is--, it's
converted to a boolean, or 0 and 1 when the language does not have a
boolean type.
- A value can contains multiple lines. When read, lines are converted into a
sequence of values. Each new line for a multiple lines value must start with
a least one space or tab character. These indentation characters will be
stripped.
- all other values are considered as strings
Examples::
[section]
foo = one
two
three
bar = false
baz = 1.3
boo = "ok"
beee = "wqdqw pojpj w\"ddq"
Extending files
---------------
An INI file can extend another file. For this, a "DEFAULT" section must contain
an "extends" variable that can point to one or several INI files which will be
merged to the current file by adding new sections and values.
If the file pointed in "extends" contains section/variable names that already
exist in the original file, they will not override existing ones.
file_one.ini::
[section1]
name2 = "other value"
[section2]
foo = baz
bas = bar
file_two.ini::
[DEFAULT]
extends = file_one.ini
[section2]
foo = bar
Result::
[section1]
name2 = "other value"
[section2]
foo = bar
bas = bar
To point several files, the multi-line notation can be used::
[DEFAULT]
extends = file_one.ini
file_two.ini
When several files are provided, they are processed sequentially. So if the
first one has a value that is also present in the second, the second one will
be ignored. This means that the configuration goes from the most specialized to
the most common.
**Tools will need to provide a way to produce a canonical version of the
file**. This will be useful to publish a single file.
Description of sections and fields
==================================
Each section contains a description of its options. Each section contains a description of its options.
...@@ -646,3 +751,57 @@ section named after the command. Example:: ...@@ -646,3 +751,57 @@ section named after the command. Example::
Option values given in the configuration file can be overriden on the command Option values given in the configuration file can be overriden on the command
line. See :ref:`packaging-setup-config` for more information. line. See :ref:`packaging-setup-config` for more information.
Extensibility
=============
Every section can define new variables that are not part of the specification.
They are called **extensions**.
An extension field starts with *X-*.
Example::
[metadata]
...
X-Debian-Name = python-distribute
Changes in the specification
============================
The version scheme for this specification is **MAJOR.MINOR**.
Changes in the specification will increment the version.
- minor version changes (1.x): backwards compatible
- new fields and sections (both optional and mandatory) can be added
- optional fields can be removed
- major channges (2.X): backwards-incompatible
- mandatory fields/sections are removed
- fields change their meaning
As a consequence, a tool written to consume 1.X (say, X=5) has these
properties:
- reading 1.Y, Y<X (e.g. 1.1) is possible, since the tool knows what
optional fields weren't there
- reading 1.Y, Y>X is also possible. The tool will just ignore the new
fields (even if they are mandatory in that version)
If optional fields were removed, the tool will just consider them absent.
- reading 2.X is not possible; the tool should refuse to interpret
the file.
A tool written to produce 1.X should have these properties:
- it will write all mandatory fields
- it may write optional fields
Acks
====
XXX
...@@ -48,7 +48,6 @@ of GCC (same as cygwin in no-cygwin mode). ...@@ -48,7 +48,6 @@ of GCC (same as cygwin in no-cygwin mode).
import os import os
import sys import sys
import copy
from packaging import logger from packaging import logger
from packaging.compiler.unixccompiler import UnixCCompiler from packaging.compiler.unixccompiler import UnixCCompiler
...@@ -172,9 +171,9 @@ class CygwinCCompiler(UnixCCompiler): ...@@ -172,9 +171,9 @@ class CygwinCCompiler(UnixCCompiler):
extra_postargs=None, build_temp=None, target_lang=None): extra_postargs=None, build_temp=None, target_lang=None):
"""Link the objects.""" """Link the objects."""
# use separate copies, so we can modify the lists # use separate copies, so we can modify the lists
extra_preargs = copy.copy(extra_preargs or []) extra_preargs = list(extra_preargs or [])
libraries = copy.copy(libraries or []) libraries = list(libraries or [])
objects = copy.copy(objects or []) objects = list(objects or [])
# Additional libraries # Additional libraries
libraries.extend(self.dll_libraries) libraries.extend(self.dll_libraries)
......
...@@ -5,7 +5,6 @@ import re ...@@ -5,7 +5,6 @@ import re
import sys import sys
import getopt import getopt
import logging import logging
from copy import copy
from packaging import logger from packaging import logger
from packaging.dist import Distribution from packaging.dist import Distribution
...@@ -673,7 +672,7 @@ class Dispatcher: ...@@ -673,7 +672,7 @@ class Dispatcher:
def main(args=None): def main(args=None):
old_level = logger.level old_level = logger.level
old_handlers = copy(logger.handlers) old_handlers = list(logger.handlers)
try: try:
dispatcher = Dispatcher(args) dispatcher = Dispatcher(args)
if dispatcher.action is None: if dispatcher.action is None:
......
...@@ -14,7 +14,6 @@ import zipfile ...@@ -14,7 +14,6 @@ import zipfile
import posixpath import posixpath
import sysconfig import sysconfig
import subprocess import subprocess
from copy import copy
from glob import iglob as std_iglob from glob import iglob as std_iglob
from fnmatch import fnmatchcase from fnmatch import fnmatchcase
from inspect import getsource from inspect import getsource
...@@ -384,7 +383,7 @@ byte_compile(files, optimize=%r, force=%r, ...@@ -384,7 +383,7 @@ byte_compile(files, optimize=%r, force=%r,
elif optimize == 2: elif optimize == 2:
cmd.insert(1, "-OO") cmd.insert(1, "-OO")
env = copy(os.environ) env = os.environ.copy()
env['PYTHONPATH'] = os.path.pathsep.join(sys.path) env['PYTHONPATH'] = os.path.pathsep.join(sys.path)
try: try:
spawn(cmd, env=env) spawn(cmd, env=env)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment