Release Notes

2.4.1

21 May 2021

2.4.0

20 May 2021

2.3.0

30 March 2021
  • changed

    Updated qip.package.extract_identifier() to compute unique identifier which includes extra keywords provided in the request. This ensures that packages installed with optional dependencies do not overwrite existing packages installed without optional dependencies or with different optional dependencies.

  • changed

    Added qip.package.extract_key() to compute unique package key which includes extra keywords provided in the request. As package key is used to compute identifier of the corresponding Wiz definition, it ensures that definitions installed with optional dependencies do not overwrite existing definitions installed without optional dependencies or with different optional dependencies.

  • changed

    Updated qip.package.extract_command_mapping() to extract commands from functions defined as console_scripts based on provided extra requirement keywords

  • changed

    Updated qip.package.install() to properly convert private Git URLs from git@host:group/project.git to git+ssh://host/group/git+ssh://.

2.2.0

4 November 2020
  • changed

    Updated repository to use built-in logging module instead of sawmill as there are no clear advantages in using a non-standard framework to handle logging.

2.1.1

28 September 2020
  • fixed

    Updated qip.install() to prevent skipping installation when editable mode is used, even if a package version is found in Wiz registries.

    See also

    Editable mode

2.1.0

26 September 2020
  • changed

    command-lineUpdated installation process to automatically include default Wiz registries to determine whether the installation of a Python package should be skipped or if its definition should be updated.

    Added -I/--ignore-registries to ignore default Wiz registries.

  • changed

    APIUpdated qip.install() to handle the process of fetching a definition mapping from registry paths. It spares the user from having to fetch definition mapping and makes the usage simpler.

  • changed

    APIUpdated qip.install() to skip installation when a package version is found in Wiz registries.

  • new

    command-lineAdded qip install -R/--continue-on-error to resume the installation process when a package fails to install. By default, an error is raised.

  • changed

    APIUpdated qip.install() with continue_on_error option to indicate whether installation process should resume when a package fails to install. Default is False.

  • new

    APIAdded qip.definition.fetch_existing() to fetch a Python package in a definition mapping.

  • changed

    APIRenamed qip.definition.retrieve() to qip.definition.fetch_custom() for consistency with qip.definition.fetch_existing().

  • fixed

    APIFixed qip.install() to apply editable_mode for all incoming requests. Previously, it would only apply to the first request.

2.0.2

15 September 2020
  • fixed

    Updated qip.definition.export() to target specific package version when retrieving additional variants which will be included in the definition to export.

2.0.1

14 September 2020
  • new

    Added configuration to run unit tests on Travis

  • new

    Added configuration to build documentation on ReadTheDocs

2.0.0

14 September 2020

1.8.1

1 April 2020

1.8.0

4 April 2019
  • changed

    Updated qip.install() to continue installing required packages even if the parent package is skipped during the copy process.

  • fixed

    Updated qip.install() to always clear the content of the temporary installation directory before installing a package. Previously, the temporary installation directory would be cleared after the installation, but this step would be skipped is the package installation was discarded.

  • fixed

    Updated qip.package.install() to use quotes when creating the Pip subprocess command with the request. Previously it would fail to process a request with spaces (e.g. ‘foo >= 1, < 2’).

  • fixed

    Updated logging to avoid prints about a package being installed when it is actually being discarded.

1.7.0

3 April 2019
  • changed

    definitionUpdated qip.definition.retrieve() to fetch custom Wiz definition from the package installation location:

    <location>/foo/package_data/wiz.json
    

    Previously, it was assumed that the wiz.json file would be located outside of the source (in share/wiz/wiz.json), but it was impossible to distribute within a wheel distribution.

  • changed

    APIbackwards-incompatibleUpdated qip.definition.export() to remove the now redundant “package_path” option.

  • changed

    APIbackwards-incompatibleUpdated qip.definition.retrieve() to remove the now redundant “path” option.

1.6.0

1 April 2019

1.5.0

1 April 2019

1.4.0

28 March 2019
  • changed

    APIUpdated qip.definition.create() and qip.definition.update() to add dependent Python packages as requirements which target the same Python version variant (e.g. “foo[2.7]”). Previously, calling a package installed for several Python versions from Wiz could take a long time as all variants would be tested in the resolution graph.

1.3.0

26 March 2019
  • new

    command-lineAdded qip install --python to target a specific Python version via a Wiz request or a path to a Python executable.

  • new

    command-lineAdded qip install --update to update Wiz definition(s) that already exist in the Wiz definitions output path with additional Python variants

  • new

    APIAdded qip.environ.fetch_python_mapping() to fetch information related to the Python version used within the environment fetched.

    A qip.package_data.python_info script is run within a subprocess to ensure that the Python version used by Qip could be different than the one used for the installation.

  • new

    APIAdded qip.fetch_context_mapping() to regroup all environment variables fetched and a mapping containing information about the Python version within a context mapping that can used during the installation process.

    The PYTHONPATH environment variable is set to target the site-packages directory within the package installation path.

  • new

    APIAdded qip.definition.export() to create and export a Wiz definition for a specific Python package installed.

  • new

    APIAdded qip.package.is_system_required() to indicate whether a Python package is platform-specific. The logic was previously included in qip.package.extract_metadata_mapping() which has now been removed.

  • new

    APIAdded qip.package.extract_command_mapping() to retrieve all commands from a Python package. The logic was previously included in qip.package.extract_metadata_mapping() which has now been removed.

  • new

    APIAdded qip.package.extract_target_path() to always build the package folder destination with Python major and minor version in order to prevent names clashes. The logic was previously included in qip.package.fetch_mapping_from_environ().

  • changed

    APIbackwards-incompatibleUpdated qip.definition to embed environment and requirements keywords within a variant which is targeting the Python minor version that was used for the package installation.

    When a package is installed for another Python version, a new variant will be added if required. When a Definition instance has several variants, it will be sorted to have the highest Python version first, provided that the Python version is being used as a variant identifier.

  • changed

    APIbackwards-incompatibleMove qip.fetch_environ() to qip.environ.fetch() and add a “python_target” argument in order to target a specific Python version via a Wiz request or a path to a Python executable.

  • changed

    APIbackwards-incompatibleUpdated qip.definition.retrieve() to return a Definition instance from a wiz.json found in the Python package installation path without updating it as it was previously the case.

    The definition update is now handled by qip.definition.update().

  • changed

    APIbackwards-incompatibleRemoved qip.package.extract_metadata_mapping() and moved logic within qip.package.fetch_mapping_from_environ() instead for clarity.

  • changed

    APIbackwards-incompatibleRename qip.package_data.pip_query to qip.package_data.package_info for consistency.

  • changed

    command-lineExplicitly set the name of the program to “qip” instead of relying on sys.argv in order to prevent “__main__.py” to be displayed when the command is being run as follows:

    python -m qip --help
    

1.2.1

4 February 2019

1.2.0

4 February 2019
  • new

    documentationAdded Python Development section.

  • changed

    definitionUpdated qip.definition to add install-root and install-location values when creating or retrieving a definition.

    When installing a package via the command line, the install-root value is being set by the qip install --output-path command. In editable mode, no install-root value is added.

    The install-location value is being set to the actual python package location and is relative to the install-root value. In editable mode, that path is pointing at the source to ease development without having to reinstall the package.

    When retrieving a definition, it is being assumed that the developer has set a PYTHONPATH environment variable referencing INSTALL_LOCATION in either environ or in a variant of the definition. It is NOT being added automatically, to ensure that the developer remains full control over the path order.

    Example:

    {
        "environ": {
            "PYTHONPATH": "${INSTALL_LOCATION}:${PYTHONPATH}"
        }
    }
    
  • changed

    packageUpdated qip.package.extract_dependency_mapping() to use qip.package_data.pip_query to extract package dependency instead of pipdeptree so that extra requirements are taken into account (e.g. ‘foo[dev]’).

  • changed

    packageUpdated qip.package.extract_metadata_mapping() to retrieve entry points from package to use as command aliases in the exported definitions (e.g. “python -m foo”).

  • changed

    definitionUpdated qip.definition to use entry point python calls instead of executables to update command value. When retrieving a definition, the command aliases defined by the developer are preserved, but missing entry points are being added, if available.

  • changed

    definitionUpdated qip.definition to update requirements when retrieving a definition. Any requirements in the retrieved definitions are extended to ensure that the developer can add requirements that are not in the setup.py configuration file (e.g. “maya”, “nuke”, etc)

  • changed

    command-lineChanged qip install --output-path and qip install --definition-path to default to temporary directories when no input has been specified.

  • changed

    Updated qip.install() and qip.copy_to_destination() to add a ‘Yes to all’ and ‘No to all’ options to the package confirmation prompt. The user can now decide to be asked for confirmation once for the overwriting process and apply the given value to all future packages.

  • changed

    definitionChanged ‘group’ keyword to ‘namespace’ when creating new definitions for packages from PyPi and set its value to ‘library’. The ‘group’ keyword has been replaced in Wiz 1.3.0.

  • changed

    Enforced the request name in lower case, to make sure any packages with upper or camel case are taken into account, similar to pip.

1.1.1

25 October 2018
  • fixed

    Fixed qip.install() to always overwrite the Wiz package definition when the package is being overwritten for consistency.

1.1.0

24 October 2018
  • new

    command-lineAdded qip install --editable to install local projects or VCS projects in editable mode.

  • new

    command-lineAdded qip install --definition-path to define a destination path for the Wiz definitions created. No definitions are extracted if this option is missing.

  • new

    definitionAdded ‘install-location’ keyword when retrieving a definition from a package, if INSTALL_LOCATION is used in any occurrence of environ.

  • new

    definitionAdded ‘group’ keyword set to “python” when creating new definitions for packages from PyPi.

  • new

    definitionAdded qip.definition._update_install_location() to ensure that when retrieving a definition from a package, any occurrence of INSTALL_LOCATION in a definition is being replaced with the accurate relative target path (including the identifier, version and potential system information). Without this adjustment, any path in INSTALL_LOCATION retrieved from Devpi would include non existent paths and the link to the data would be lost.

  • new

    APIAdded qip.symbol to group common symbols.

  • changed

    command-lineRenamed qip install --output to qip install --output-path for consistency.

  • changed

    APIUpdated qip.install() to add a ‘editable_mode’ argument which installs the first package in editable mode.

  • changed

    APIUpdated qip.install() to add a ‘definition_path’ argument which defines a destination for Wiz definition extracted. No definitions are extracted if this argument is missing.

  • changed

    APIUpdated qip.package.install() to add a ‘editable_mode’ argument which installs the package in editable mode.

  • changed

    APIChanged qip.definition.create() to modify the installation prefix from ${INSTALL_LOCATION} to ${INSTALL_LOCATION}/<package_name>/<package_identifier>

  • fixed

    APIFixed qip.install() to record package identifiers and requests before processing it. It ensures that no package is processed more than once even if the installation process is skipped.

1.0.0

16 October 2018
  • new

    Retrieve a Wiz definition from an installed package, if there was one bundled with it.

    Any python package exporting a wiz.json to a shared location /share/package-name/ on install, will cause Qip to _not_ create a new Wiz definition from scratch. Instead the bundled definition will be renamed (ie. foo-0.1.0.json) and copied to the install location.

    There are no changes made to a retrieved Wiz definition. Any dependencies or system information will have to be correct when the package gets bundled and uploaded to Devpi.

  • new

    Write out a Wiz definition into package directories, describing the system requirements, name, description, version and possible requirements that package has. The file will be in the same directory as the install and be called after the package, ie. foo-0.1.0.json

    See also

    The format is a normal Wiz Package Definition.

  • new

    Rewrite of qip functionality. Only installs packages locally.

0.1.0

21 May 2021
  • new

    Initial release.