Postpone python.metadata_hooks for the time being

This commit is contained in:
Nick Coghlan 2014-03-02 16:08:45 +10:00
parent 5acaa11e8a
commit d54150569b
1 changed files with 0 additions and 176 deletions

View File

@ -47,7 +47,6 @@ The currently defined standard extensions are:
* ``python.integrator``
* ``python.commands``
* ``python.exports``
* ``python.metadata_hooks``
All standard extensions are currently at version ``1.0``, and thus the
``extension_metadata`` field may be omitted without losing access to any
@ -512,181 +511,6 @@ Example::
}
The ``metadata_hooks`` extension
================================
The ``metadata_hooks`` extension is used to define operations to be
invoked on the distribution in the following situations:
* a relevant distribution has been installed or changed on the system
* a relevant distribution has been completely uninstalled from the system
The following subfields determine when hooks are triggered:
* ``export_groups``: trigger based on named export groups
* ``extensions``: trigger based on named extensions
Note that distributions *do* trigger their own install hooks, but do
*not* trigger their own uninstall hooks.
Hook signatures
---------------
The currently defined metadata hooks are:
* ``postinstall``: run after a relevant distribution has been installed,
upgraded or downgraded on the current system. May also be run as part
of a system state resync operation. If the hook is not defined, it
indicates no distribution specific actions are needed following
installation.
* ``postuninstall``: run after a relevant distribution has been completely
removed from the current system. If the hook is not defined, it indicates
no distribution specific actions are needed following uninstallation.
The required signatures of these hooks are as follows::
def postinstall(current_meta, previous_meta=None):
"""Run following installation or upgrade of a relevant distribution
*current_meta* is the distribution metadata for the version now
installed on the current system
*previous_meta* is either omitted or ``None`` (indicating a fresh
install) or else the distribution metadata for the version that
was previously installed (indicating an upgrade, downgrade or
resynchronisation of the system state).
"""
def postuninstall(previous_meta):
"""Run after complete uninstallation of a relevant distribution
*previous_meta* is the distribution metadata for the version that
was previously installed on the current system
"""
Export group hooks
------------------
Export group hooks are named after the export group of interest::
"export_groups": {
"ComfyChair.plugins": {
"postinstall": "ComfyChair.plugins:install_hook",
"postuininstall": "ComfyChair.plugins:uninstall_hook"
}
}
The nominated hooks will then be invoked appropriately for any distribution
that publishes that export group as part of their ``python.exports``
extension metadata.
A trailing ".*" may be used to request prefix matching rather than
requiring an exact match on the export group name.
Extension hooks
---------------
Extension hooks are named after the metadata extension of interest::
"extensions": {
"python.exports": {
"postinstall": "pip.export_group_hooks:run_install_hooks",
"postuininstall": "pip.export_group_hooks:run_uninstall_hooks"
}
"python.commands": {
"postinstall": "pip.command_hook:install_wrapper_scripts",
}
}
(Note: this is just an example, but the intent is that pip *could* implement
that functionality that way if it wanted to).
A trailing ".*" may be used to request prefix matching rather than
requiring an exact match on the extension name.
Guidelines for metadata hook invocation
---------------------------------------
.. note::
Metadata hooks are likely to run with elevated privileges, this needs
to be considered carefully (e.g. by *requiring* that metadata hook
installation be opt in when using the standard tools and running with
elevated privileges).
The given parameter names are considered part of the hook signature.
Installation tools MUST call metadata hooks solely with keyword arguments.
When metadata hooks are defined, it is assumed that they MUST be executed
to obtain a properly working installation of the distribution, and to
properly remove the distribution from a system.
Installation tools MUST ensure the new or updated distribution is fully
installed, and available through the import system and installation database
when invoking install hooks.
Installation tools MUST ensure the removed distribution is fully uninstalled,
and no longer available through the import system and installation database
when invoking uninstall hooks.
Installation tools MUST call metadata hooks with full metadata (including
all extensions), rather than only the core metadata.
Installation tools SHOULD invoke metadata hooks automatically after
installing a distribution from a binary archive.
When installing from an sdist, source archive or VCS checkout, installation
tools SHOULD create a binary archive using ``setup.py bdist_wheel`` and
then install the binary archive normally (including invocation of any
metadata hooks). Installation tools SHOULD NOT invoke ``setup.py install``
directly.
Installation tools SHOULD treat an exception thrown by a metadata install
hook as a failure of the installation and revert any other changes made
to the system. The installed distribution responsible for the hook that
failed should be clearly indicated to the user.
Installation tools SHOULD provide a warning to the user for any exception
thrown by a metadata uninstall hook, again clearly indicating to the user
the installed distribution that triggered the warning.
Installation tools MUST NOT silently ignore metadata hooks, as failing
to call these hooks may result in a misconfigured installation that fails
unexpectedly at runtime. Installation tools MAY refuse to install
distributions that define metadata hooks, or require that users
explicitly opt in to permitting the installation of packages that
define such hooks.
Guidelines for metadata hook implementations
--------------------------------------------
The given parameter names are considered part of the hook signature.
Metadata hook implementations MUST use the given parameter names.
Metadata hooks SHOULD NOT be used to provide functionality that is
expected to be provided by installation tools (such as rewriting of
shebang lines and generation of executable wrappers for Windows).
Metadata hook implementations MUST NOT make any assumptions regarding the
current working directory when they are invoked, and MUST NOT make
persistent alterations to the working directory or any other process global
state (other than potentially importing additional modules, or other
expected side effects of running the distribution).
Metadata install hooks have access to the full metadata for the release being
installed, that of the previous/next release (as appropriate), as well as
to all the normal runtime information (such as available imports). Hook
implementations can use this information to perform additional platform
specific installation steps. To check for the presence or absence of
"extras", hook implementations should use the same runtime checks that
would be used during normal operation (such as checking for the availability
of the relevant dependencies).
Copyright
=========