Source code for dh_virtualenv.cmdline

# -*- coding: utf-8 -*-
# Copyright (c) 2014 Spotify AB

# This file is part of dh-virtualenv.

# dh-virtualenv is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of the
# License, or (at your option) any later version.

# dh-virtualenv is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with dh-virtualenv. If not, see
# <http://www.gnu.org/licenses/>.

"""Helpers to handle debhelper command line options."""
from __future__ import absolute_import

import os
import warnings

from optparse import OptionParser, SUPPRESS_HELP, OptionValueError

from ._version import version


[docs]class DebhelperOptionParser(OptionParser): """Special OptionParser for handling Debhelper options. Basically this means converting -O--option to --option before parsing. """
[docs] def parse_args(self, args=None, values=None): args = [o[2:] if o.startswith('-O-') else o for o in self._get_args(args)] args.extend(os.environ.get('DH_OPTIONS', '').split()) # Unfortunately OptionParser is an old style class :( return OptionParser.parse_args(self, args, values)
def _check_for_deprecated_options( option, opt_str, value, parser, *args, **kwargs): # TODO: If more deprectaed options pop up, refactor this method to # handle them in more generic way (or actually remove the # deprecated options) if opt_str in ('--pypi-url', '--index-url'): if opt_str == '--pypi-url': # Work around 2.7 hiding the DeprecationWarning with warnings.catch_warnings(): warnings.simplefilter('default') warnings.warn('Use of --pypi-url is deprecated. Use ' '--index-url instead', DeprecationWarning) if parser.values.index_url: # We've already set the index_url, which means that we have both # --index-url and --pypi-url passed in. raise OptionValueError('Deprecated --pypi-url and the new ' '--index-url are mutually exclusive') parser.values.index_url = value elif opt_str in ('--no-test', '--setuptools-test'): if opt_str == '--no-test': with warnings.catch_warnings(): warnings.simplefilter('default') warnings.warn('Use of --no-test is deprecated and has no ' 'effect. Use --setuptools-test if you want to ' 'execute `setup.py test` during package build.', DeprecationWarning) if getattr(parser.values, '_test_flag_seen', None): raise OptionValueError('Deprecated --no-test and the new ' '--setuptools-test are mutually exclusive') parser.values.setuptools_test = opt_str != '--no-test' setattr(parser.values, '_test_flag_seen', True)
[docs]def get_default_parser(): usage = '%prog [options]' parser = DebhelperOptionParser(usage, version='%prog ' + version) parser.add_option('-p', '--package', action='append', metavar='PACKAGE', help='Act on the package(s) named PACKAGE') parser.add_option('-N', '--no-package', action='append', metavar='PACKAGE', help='Do not act on the specified package(s)') parser.add_option('-v', '--verbose', action='store_true', default=False, help='Turn on verbose mode') parser.add_option('-s', '--setuptools', action='store_true', default=False, help='Use Setuptools instead of Distribute') parser.add_option('--extra-index-url', action='append', metavar='URL', help='Extra index URL(s) to pass to pip.', default=[]) parser.add_option('--preinstall', action='append', metavar='PACKAGE', help=('Package(s) to install before processing ' 'requirements.txt.'), default=[]) parser.add_option('--extras', action='append', metavar='NAME', help=('Activate one or more extras of the main package.'), default=[]) parser.add_option('--pip-tool', default='pip', metavar='EXECUTABLE', help="Executable that will be used to install " "requirements after the preinstall stage. Usually " "you'll install this program by using the --preinstall " "argument. The replacement is expected to be found in " "the virtualenv's bin/ directory.") parser.add_option('--upgrade-pip', action='store_true', default=False, help='Upgrade pip to the latest available version') parser.add_option('--upgrade-pip-to', default='', metavar='VERSION', help='Upgrade pip to a specific version') parser.add_option('--extra-pip-arg', action='append', metavar='ARG', help='One or more extra args for the pip binary.' 'You can use this flag multiple times to pass in' ' parameters to pip.', default=[]) parser.add_option('--extra-virtualenv-arg', action='append', metavar='ARG', help='One or more extra args for the virtualenv binary.' 'You can use this flag multiple times to pass in' ' parameters to the virtualenv binary.', default=[]) parser.add_option('--index-url', metavar='URL', help='Base URL of the PyPI server', action='callback', type='string', dest='index_url', callback=_check_for_deprecated_options) parser.add_option('--python', metavar='EXECUTABLE', help='The Python command to use') parser.add_option('--builtin-venv', action='store_true', help='Use the built-in venv module. Only works on ' 'Python 3.4 and later.') parser.add_option('-D', '--sourcedirectory', dest='sourcedirectory', help='The source directory') parser.add_option('-n', '--noscripts', action='store_false', dest='autoscripts', help="Do not modify postinst and similar scripts.", default=True) parser.add_option('-S', '--use-system-packages', action='store_true', dest='use_system_packages', help="Set the --system-site-packages flag in virtualenv " "creation, allowing you to use system packages.", default=False) parser.add_option('--skip-install', action='store_true', default=False, dest='skip_install', help="Skip running pip install within the source directory.") parser.add_option('--install-suffix', metavar='DIRNAME', dest='install_suffix', help="Override installation path suffix") parser.add_option('--requirements', metavar='FILEPATH', dest='requirements_filename', help='Specify the filename for requirements.txt', default='requirements.txt') parser.add_option('--setuptools-test', dest='setuptools_test', default=False, action='callback', help='Run `setup.py test` when building the package', callback=_check_for_deprecated_options) # Ignore user-specified option bundles parser.add_option('-O', help=SUPPRESS_HELP) parser.add_option('-a', '--arch', dest="arch", help=("Act on architecture dependent packages that " "should be built for the build architecture. " "This option is ignored"), action="store", type="string") parser.add_option('-i', '--indep', dest="indep", help=("Act on all architecture independent packages. " "This option is ignored"), action="store_true") # Deprecated options parser.add_option('--pypi-url', metavar='URL', help=('!!DEPRECATED, use --index-url instead!! ' 'Base URL of the PyPI server'), action='callback', dest='index_url', type='string', callback=_check_for_deprecated_options) parser.add_option('--no-test', help="!!DEPRECATED, this command has no effect. " "See --setuptools-test!! " "Don't run tests for the package. Useful " "for example when you have packaged with distutils.", action='callback', callback=_check_for_deprecated_options) return parser