chore(pip_parse, gazelle): generate/use hub repo aliases by default (#1525)
This makes `pip_parse.incompatible_generate_aliases = True` the default.
This only affects
workspace builds; it is already the default for bzlmod.
Summary:
- Enable the generation of aliases in `pip_repository`.
- Flip usage of aliases in `gazelle`.
- Remove usage of the old flags from the example code.
- Update the `gazelle` manifest generator to leave the
`gazelle_python.yaml` manifest unchanged for people who have
`use_pip_repository_aliases = True` in their `BUILD.bazel` files.
Once they remove the flag, the `gazelle_python.yaml` will be updated.
- Update `multi_pip_parse` to handle sub-hub repositories where
the `all_requirements` returns aliased targets.
Fixes #1498
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f593b0..02aca34 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,12 +25,24 @@
as all of the publicly available symbols (etc. `package_annotation`) are
re-exported via `//python:pip_bzl` `bzl_library`.
-* Gazelle Python extension no longer has runtime dependencies. Using
+* (gazelle) Gazelle Python extension no longer has runtime dependencies. Using
`GAZELLE_PYTHON_RUNTIME_DEPS` from `@rules_python_gazelle_plugin//:def.bzl` is
no longer necessary.
-* The installation of `pip_parse` repository rule toolchain dependencies is now
- done as part of `py_repositories` call.
+* (pip_parse) The installation of `pip_parse` repository rule toolchain
+ dependencies is now done as part of `py_repositories` call.
+
+* (pip_parse) The flag `incompatible_generate_aliases` has been flipped to
+ `True` by default on `non-bzlmod` setups allowing users to use the same label
+ strings during the transition period. For example, instead of
+ `@pypi_foo//:pkg`, you can now use `@pypi//foo` or `@pypi//foo:pkg`. Other
+ labels that are present in the `foo` package are `dist_info`, `whl` and
+ `data`. Note, that the `@pypi_foo//:pkg` labels are still present for
+ backwards compatibility.
+
+* (gazelle) The flag `use_pip_repository_aliases` is now set to `True` by
+ default, which will cause `gazelle` to change third-party dependency labels
+ from `@pip_foo//:pkg` to `@pip//foo` by default.
Breaking changes:
diff --git a/examples/build_file_generation/BUILD.bazel b/examples/build_file_generation/BUILD.bazel
index a03af54..5b01215 100644
--- a/examples/build_file_generation/BUILD.bazel
+++ b/examples/build_file_generation/BUILD.bazel
@@ -43,9 +43,6 @@
# NOTE: We can pass a list just like in `bzlmod_build_file_generation` example
# but we keep a single target here for regression testing.
requirements = "//:requirements_lock.txt",
- # NOTE: we can use this flag in order to make our setup compatible with
- # bzlmod.
- use_pip_repository_aliases = True,
)
# Our gazelle target points to the python gazelle binary.
diff --git a/examples/build_file_generation/WORKSPACE b/examples/build_file_generation/WORKSPACE
index a743644..c656d5b 100644
--- a/examples/build_file_generation/WORKSPACE
+++ b/examples/build_file_generation/WORKSPACE
@@ -94,8 +94,6 @@
# You can instead check this `requirements.bzl` file into your repo.
pip_parse(
name = "pip",
- # Generate user friendly alias labels for each dependency that we have.
- incompatible_generate_aliases = True,
# (Optional) You can provide a python_interpreter (path) or a python_interpreter_target (a Bazel target, that
# acts as an executable). The latter can be anything that could be used as Python interpreter. E.g.:
# 1. Python interpreter that you compile in the build file.
diff --git a/examples/build_file_generation/gazelle_python.yaml b/examples/build_file_generation/gazelle_python.yaml
index 1000757..b3757a3 100644
--- a/examples/build_file_generation/gazelle_python.yaml
+++ b/examples/build_file_generation/gazelle_python.yaml
@@ -114,5 +114,4 @@
zipp.py310compat: zipp
pip_repository:
name: pip
- use_pip_repository_aliases: true
-integrity: 030d6d99b56c32d6577e616b617260d0a93588af791269162e43391a5a4fa576
+integrity: a88d99bf5ea018bdb052ccda8ea5c98b6bae81312a338f909532285b76026fe1
diff --git a/examples/bzlmod/gazelle_python.yaml b/examples/bzlmod/gazelle_python.yaml
deleted file mode 100644
index 12096e5..0000000
--- a/examples/bzlmod/gazelle_python.yaml
+++ /dev/null
@@ -1,590 +0,0 @@
-# GENERATED FILE - DO NOT EDIT!
-#
-# To update this file, run:
-# bazel run //:gazelle_python_manifest.update
-
-manifest:
- modules_mapping:
- S3: s3cmd
- S3.ACL: s3cmd
- S3.AccessLog: s3cmd
- S3.BidirMap: s3cmd
- S3.CloudFront: s3cmd
- S3.Config: s3cmd
- S3.ConnMan: s3cmd
- S3.Crypto: s3cmd
- S3.Custom_httplib27: s3cmd
- S3.Custom_httplib3x: s3cmd
- S3.Exceptions: s3cmd
- S3.ExitCodes: s3cmd
- S3.FileDict: s3cmd
- S3.FileLists: s3cmd
- S3.HashCache: s3cmd
- S3.MultiPart: s3cmd
- S3.PkgInfo: s3cmd
- S3.Progress: s3cmd
- S3.S3: s3cmd
- S3.S3Uri: s3cmd
- S3.SortedDict: s3cmd
- S3.Utils: s3cmd
- astroid: astroid
- astroid.arguments: astroid
- astroid.astroid_manager: astroid
- astroid.bases: astroid
- astroid.brain: astroid
- astroid.brain.brain_argparse: astroid
- astroid.brain.brain_attrs: astroid
- astroid.brain.brain_boto3: astroid
- astroid.brain.brain_builtin_inference: astroid
- astroid.brain.brain_collections: astroid
- astroid.brain.brain_crypt: astroid
- astroid.brain.brain_ctypes: astroid
- astroid.brain.brain_curses: astroid
- astroid.brain.brain_dataclasses: astroid
- astroid.brain.brain_dateutil: astroid
- astroid.brain.brain_fstrings: astroid
- astroid.brain.brain_functools: astroid
- astroid.brain.brain_gi: astroid
- astroid.brain.brain_hashlib: astroid
- astroid.brain.brain_http: astroid
- astroid.brain.brain_hypothesis: astroid
- astroid.brain.brain_io: astroid
- astroid.brain.brain_mechanize: astroid
- astroid.brain.brain_multiprocessing: astroid
- astroid.brain.brain_namedtuple_enum: astroid
- astroid.brain.brain_nose: astroid
- astroid.brain.brain_numpy_core_einsumfunc: astroid
- astroid.brain.brain_numpy_core_fromnumeric: astroid
- astroid.brain.brain_numpy_core_function_base: astroid
- astroid.brain.brain_numpy_core_multiarray: astroid
- astroid.brain.brain_numpy_core_numeric: astroid
- astroid.brain.brain_numpy_core_numerictypes: astroid
- astroid.brain.brain_numpy_core_umath: astroid
- astroid.brain.brain_numpy_ma: astroid
- astroid.brain.brain_numpy_ndarray: astroid
- astroid.brain.brain_numpy_random_mtrand: astroid
- astroid.brain.brain_numpy_utils: astroid
- astroid.brain.brain_pathlib: astroid
- astroid.brain.brain_pkg_resources: astroid
- astroid.brain.brain_pytest: astroid
- astroid.brain.brain_qt: astroid
- astroid.brain.brain_random: astroid
- astroid.brain.brain_re: astroid
- astroid.brain.brain_responses: astroid
- astroid.brain.brain_scipy_signal: astroid
- astroid.brain.brain_signal: astroid
- astroid.brain.brain_six: astroid
- astroid.brain.brain_sqlalchemy: astroid
- astroid.brain.brain_ssl: astroid
- astroid.brain.brain_subprocess: astroid
- astroid.brain.brain_threading: astroid
- astroid.brain.brain_type: astroid
- astroid.brain.brain_typing: astroid
- astroid.brain.brain_unittest: astroid
- astroid.brain.brain_uuid: astroid
- astroid.brain.helpers: astroid
- astroid.builder: astroid
- astroid.const: astroid
- astroid.context: astroid
- astroid.decorators: astroid
- astroid.exceptions: astroid
- astroid.filter_statements: astroid
- astroid.helpers: astroid
- astroid.inference: astroid
- astroid.inference_tip: astroid
- astroid.interpreter: astroid
- astroid.interpreter.dunder_lookup: astroid
- astroid.interpreter.objectmodel: astroid
- astroid.manager: astroid
- astroid.mixins: astroid
- astroid.modutils: astroid
- astroid.node_classes: astroid
- astroid.nodes: astroid
- astroid.nodes.as_string: astroid
- astroid.nodes.const: astroid
- astroid.nodes.node_classes: astroid
- astroid.nodes.node_ng: astroid
- astroid.nodes.scoped_nodes: astroid
- astroid.nodes.scoped_nodes.mixin: astroid
- astroid.nodes.scoped_nodes.scoped_nodes: astroid
- astroid.nodes.scoped_nodes.utils: astroid
- astroid.nodes.utils: astroid
- astroid.objects: astroid
- astroid.protocols: astroid
- astroid.raw_building: astroid
- astroid.rebuilder: astroid
- astroid.scoped_nodes: astroid
- astroid.test_utils: astroid
- astroid.transforms: astroid
- astroid.typing: astroid
- astroid.util: astroid
- certifi: certifi
- certifi.core: certifi
- chardet: chardet
- chardet.big5freq: chardet
- chardet.big5prober: chardet
- chardet.chardistribution: chardet
- chardet.charsetgroupprober: chardet
- chardet.charsetprober: chardet
- chardet.cli: chardet
- chardet.cli.chardetect: chardet
- chardet.codingstatemachine: chardet
- chardet.compat: chardet
- chardet.cp949prober: chardet
- chardet.enums: chardet
- chardet.escprober: chardet
- chardet.escsm: chardet
- chardet.eucjpprober: chardet
- chardet.euckrfreq: chardet
- chardet.euckrprober: chardet
- chardet.euctwfreq: chardet
- chardet.euctwprober: chardet
- chardet.gb2312freq: chardet
- chardet.gb2312prober: chardet
- chardet.hebrewprober: chardet
- chardet.jisfreq: chardet
- chardet.jpcntx: chardet
- chardet.langbulgarianmodel: chardet
- chardet.langgreekmodel: chardet
- chardet.langhebrewmodel: chardet
- chardet.langhungarianmodel: chardet
- chardet.langrussianmodel: chardet
- chardet.langthaimodel: chardet
- chardet.langturkishmodel: chardet
- chardet.latin1prober: chardet
- chardet.mbcharsetprober: chardet
- chardet.mbcsgroupprober: chardet
- chardet.mbcssm: chardet
- chardet.metadata: chardet
- chardet.metadata.languages: chardet
- chardet.sbcharsetprober: chardet
- chardet.sbcsgroupprober: chardet
- chardet.sjisprober: chardet
- chardet.universaldetector: chardet
- chardet.utf8prober: chardet
- chardet.version: chardet
- dateutil: python_dateutil
- dateutil.easter: python_dateutil
- dateutil.parser: python_dateutil
- dateutil.parser.isoparser: python_dateutil
- dateutil.relativedelta: python_dateutil
- dateutil.rrule: python_dateutil
- dateutil.tz: python_dateutil
- dateutil.tz.tz: python_dateutil
- dateutil.tz.win: python_dateutil
- dateutil.tzwin: python_dateutil
- dateutil.utils: python_dateutil
- dateutil.zoneinfo: python_dateutil
- dateutil.zoneinfo.rebuild: python_dateutil
- dill: dill
- dill.detect: dill
- dill.logger: dill
- dill.objtypes: dill
- dill.pointers: dill
- dill.session: dill
- dill.settings: dill
- dill.source: dill
- dill.temp: dill
- idna: idna
- idna.codec: idna
- idna.compat: idna
- idna.core: idna
- idna.idnadata: idna
- idna.intranges: idna
- idna.package_data: idna
- idna.uts46data: idna
- isort: isort
- isort.api: isort
- isort.comments: isort
- isort.core: isort
- isort.deprecated: isort
- isort.deprecated.finders: isort
- isort.exceptions: isort
- isort.files: isort
- isort.format: isort
- isort.hooks: isort
- isort.identify: isort
- isort.io: isort
- isort.literal: isort
- isort.logo: isort
- isort.main: isort
- isort.output: isort
- isort.parse: isort
- isort.place: isort
- isort.profiles: isort
- isort.pylama_isort: isort
- isort.sections: isort
- isort.settings: isort
- isort.setuptools_commands: isort
- isort.sorting: isort
- isort.stdlibs: isort
- isort.stdlibs.all: isort
- isort.stdlibs.py2: isort
- isort.stdlibs.py27: isort
- isort.stdlibs.py3: isort
- isort.stdlibs.py310: isort
- isort.stdlibs.py311: isort
- isort.stdlibs.py36: isort
- isort.stdlibs.py37: isort
- isort.stdlibs.py38: isort
- isort.stdlibs.py39: isort
- isort.utils: isort
- isort.wrap: isort
- isort.wrap_modes: isort
- lazy_object_proxy: lazy_object_proxy
- lazy_object_proxy.compat: lazy_object_proxy
- lazy_object_proxy.simple: lazy_object_proxy
- lazy_object_proxy.slots: lazy_object_proxy
- lazy_object_proxy.utils: lazy_object_proxy
- magic: python_magic
- magic.compat: python_magic
- magic.loader: python_magic
- mccabe: mccabe
- pathspec: pathspec
- pathspec.gitignore: pathspec
- pathspec.pathspec: pathspec
- pathspec.pattern: pathspec
- pathspec.patterns: pathspec
- pathspec.patterns.gitwildmatch: pathspec
- pathspec.util: pathspec
- pkg_resources: setuptools
- pkg_resources.extern: setuptools
- platformdirs: platformdirs
- platformdirs.android: platformdirs
- platformdirs.api: platformdirs
- platformdirs.macos: platformdirs
- platformdirs.unix: platformdirs
- platformdirs.version: platformdirs
- platformdirs.windows: platformdirs
- pylint: pylint
- pylint.checkers: pylint
- pylint.checkers.async: pylint
- pylint.checkers.base: pylint
- pylint.checkers.base.basic_checker: pylint
- pylint.checkers.base.basic_error_checker: pylint
- pylint.checkers.base.comparison_checker: pylint
- pylint.checkers.base.docstring_checker: pylint
- pylint.checkers.base.name_checker: pylint
- pylint.checkers.base.name_checker.checker: pylint
- pylint.checkers.base.name_checker.naming_style: pylint
- pylint.checkers.base.pass_checker: pylint
- pylint.checkers.base_checker: pylint
- pylint.checkers.classes: pylint
- pylint.checkers.classes.class_checker: pylint
- pylint.checkers.classes.special_methods_checker: pylint
- pylint.checkers.deprecated: pylint
- pylint.checkers.design_analysis: pylint
- pylint.checkers.dunder_methods: pylint
- pylint.checkers.ellipsis_checker: pylint
- pylint.checkers.exceptions: pylint
- pylint.checkers.format: pylint
- pylint.checkers.imports: pylint
- pylint.checkers.lambda_expressions: pylint
- pylint.checkers.logging: pylint
- pylint.checkers.mapreduce_checker: pylint
- pylint.checkers.method_args: pylint
- pylint.checkers.misc: pylint
- pylint.checkers.modified_iterating_checker: pylint
- pylint.checkers.newstyle: pylint
- pylint.checkers.non_ascii_names: pylint
- pylint.checkers.raw_metrics: pylint
- pylint.checkers.refactoring: pylint
- pylint.checkers.refactoring.implicit_booleaness_checker: pylint
- pylint.checkers.refactoring.not_checker: pylint
- pylint.checkers.refactoring.recommendation_checker: pylint
- pylint.checkers.refactoring.refactoring_checker: pylint
- pylint.checkers.similar: pylint
- pylint.checkers.spelling: pylint
- pylint.checkers.stdlib: pylint
- pylint.checkers.strings: pylint
- pylint.checkers.threading_checker: pylint
- pylint.checkers.typecheck: pylint
- pylint.checkers.unicode: pylint
- pylint.checkers.unsupported_version: pylint
- pylint.checkers.utils: pylint
- pylint.checkers.variables: pylint
- pylint.config: pylint
- pylint.config.argument: pylint
- pylint.config.arguments_manager: pylint
- pylint.config.arguments_provider: pylint
- pylint.config.callback_actions: pylint
- pylint.config.config_file_parser: pylint
- pylint.config.config_initialization: pylint
- pylint.config.configuration_mixin: pylint
- pylint.config.deprecation_actions: pylint
- pylint.config.environment_variable: pylint
- pylint.config.exceptions: pylint
- pylint.config.find_default_config_files: pylint
- pylint.config.help_formatter: pylint
- pylint.config.option: pylint
- pylint.config.option_manager_mixin: pylint
- pylint.config.option_parser: pylint
- pylint.config.options_provider_mixin: pylint
- pylint.config.utils: pylint
- pylint.constants: pylint
- pylint.epylint: pylint
- pylint.exceptions: pylint
- pylint.extensions: pylint
- pylint.extensions.bad_builtin: pylint
- pylint.extensions.broad_try_clause: pylint
- pylint.extensions.check_elif: pylint
- pylint.extensions.code_style: pylint
- pylint.extensions.comparetozero: pylint
- pylint.extensions.comparison_placement: pylint
- pylint.extensions.confusing_elif: pylint
- pylint.extensions.consider_ternary_expression: pylint
- pylint.extensions.docparams: pylint
- pylint.extensions.docstyle: pylint
- pylint.extensions.empty_comment: pylint
- pylint.extensions.emptystring: pylint
- pylint.extensions.eq_without_hash: pylint
- pylint.extensions.for_any_all: pylint
- pylint.extensions.mccabe: pylint
- pylint.extensions.no_self_use: pylint
- pylint.extensions.overlapping_exceptions: pylint
- pylint.extensions.private_import: pylint
- pylint.extensions.redefined_loop_name: pylint
- pylint.extensions.redefined_variable_type: pylint
- pylint.extensions.set_membership: pylint
- pylint.extensions.typing: pylint
- pylint.extensions.while_used: pylint
- pylint.graph: pylint
- pylint.interfaces: pylint
- pylint.lint: pylint
- pylint.lint.base_options: pylint
- pylint.lint.caching: pylint
- pylint.lint.expand_modules: pylint
- pylint.lint.message_state_handler: pylint
- pylint.lint.parallel: pylint
- pylint.lint.pylinter: pylint
- pylint.lint.report_functions: pylint
- pylint.lint.run: pylint
- pylint.lint.utils: pylint
- pylint.message: pylint
- pylint.message.message: pylint
- pylint.message.message_definition: pylint
- pylint.message.message_definition_store: pylint
- pylint.message.message_id_store: pylint
- pylint.pyreverse: pylint
- pylint.pyreverse.diadefslib: pylint
- pylint.pyreverse.diagrams: pylint
- pylint.pyreverse.dot_printer: pylint
- pylint.pyreverse.inspector: pylint
- pylint.pyreverse.main: pylint
- pylint.pyreverse.mermaidjs_printer: pylint
- pylint.pyreverse.plantuml_printer: pylint
- pylint.pyreverse.printer: pylint
- pylint.pyreverse.printer_factory: pylint
- pylint.pyreverse.utils: pylint
- pylint.pyreverse.vcg_printer: pylint
- pylint.pyreverse.writer: pylint
- pylint.reporters: pylint
- pylint.reporters.base_reporter: pylint
- pylint.reporters.collecting_reporter: pylint
- pylint.reporters.json_reporter: pylint
- pylint.reporters.multi_reporter: pylint
- pylint.reporters.reports_handler_mix_in: pylint
- pylint.reporters.text: pylint
- pylint.reporters.ureports: pylint
- pylint.reporters.ureports.base_writer: pylint
- pylint.reporters.ureports.nodes: pylint
- pylint.reporters.ureports.text_writer: pylint
- pylint.testutils: pylint
- pylint.testutils.checker_test_case: pylint
- pylint.testutils.configuration_test: pylint
- pylint.testutils.constants: pylint
- pylint.testutils.decorator: pylint
- pylint.testutils.functional: pylint
- pylint.testutils.functional.find_functional_tests: pylint
- pylint.testutils.functional.lint_module_output_update: pylint
- pylint.testutils.functional.test_file: pylint
- pylint.testutils.functional_test_file: pylint
- pylint.testutils.get_test_info: pylint
- pylint.testutils.global_test_linter: pylint
- pylint.testutils.lint_module_test: pylint
- pylint.testutils.output_line: pylint
- pylint.testutils.pyreverse: pylint
- pylint.testutils.reporter_for_tests: pylint
- pylint.testutils.tokenize_str: pylint
- pylint.testutils.unittest_linter: pylint
- pylint.testutils.utils: pylint
- pylint.typing: pylint
- pylint.utils: pylint
- pylint.utils.ast_walker: pylint
- pylint.utils.docs: pylint
- pylint.utils.file_state: pylint
- pylint.utils.linterstats: pylint
- pylint.utils.pragma_parser: pylint
- pylint.utils.utils: pylint
- requests: requests
- requests.adapters: requests
- requests.api: requests
- requests.auth: requests
- requests.certs: requests
- requests.compat: requests
- requests.cookies: requests
- requests.exceptions: requests
- requests.help: requests
- requests.hooks: requests
- requests.models: requests
- requests.packages: requests
- requests.sessions: requests
- requests.status_codes: requests
- requests.structures: requests
- requests.utils: requests
- setuptools: setuptools
- setuptools.archive_util: setuptools
- setuptools.build_meta: setuptools
- setuptools.command: setuptools
- setuptools.command.alias: setuptools
- setuptools.command.bdist_egg: setuptools
- setuptools.command.bdist_rpm: setuptools
- setuptools.command.build: setuptools
- setuptools.command.build_clib: setuptools
- setuptools.command.build_ext: setuptools
- setuptools.command.build_py: setuptools
- setuptools.command.develop: setuptools
- setuptools.command.dist_info: setuptools
- setuptools.command.easy_install: setuptools
- setuptools.command.editable_wheel: setuptools
- setuptools.command.egg_info: setuptools
- setuptools.command.install: setuptools
- setuptools.command.install_egg_info: setuptools
- setuptools.command.install_lib: setuptools
- setuptools.command.install_scripts: setuptools
- setuptools.command.py36compat: setuptools
- setuptools.command.register: setuptools
- setuptools.command.rotate: setuptools
- setuptools.command.saveopts: setuptools
- setuptools.command.sdist: setuptools
- setuptools.command.setopt: setuptools
- setuptools.command.test: setuptools
- setuptools.command.upload: setuptools
- setuptools.command.upload_docs: setuptools
- setuptools.config: setuptools
- setuptools.config.expand: setuptools
- setuptools.config.pyprojecttoml: setuptools
- setuptools.config.setupcfg: setuptools
- setuptools.dep_util: setuptools
- setuptools.depends: setuptools
- setuptools.discovery: setuptools
- setuptools.dist: setuptools
- setuptools.errors: setuptools
- setuptools.extension: setuptools
- setuptools.extern: setuptools
- setuptools.glob: setuptools
- setuptools.installer: setuptools
- setuptools.launch: setuptools
- setuptools.logging: setuptools
- setuptools.monkey: setuptools
- setuptools.msvc: setuptools
- setuptools.namespaces: setuptools
- setuptools.package_index: setuptools
- setuptools.py34compat: setuptools
- setuptools.sandbox: setuptools
- setuptools.unicode_utils: setuptools
- setuptools.version: setuptools
- setuptools.wheel: setuptools
- setuptools.windows_support: setuptools
- six: six
- tabulate: tabulate
- tabulate.version: tabulate
- tomli: tomli
- tomlkit: tomlkit
- tomlkit.api: tomlkit
- tomlkit.container: tomlkit
- tomlkit.exceptions: tomlkit
- tomlkit.items: tomlkit
- tomlkit.parser: tomlkit
- tomlkit.source: tomlkit
- tomlkit.toml_char: tomlkit
- tomlkit.toml_document: tomlkit
- tomlkit.toml_file: tomlkit
- typing_extensions: typing_extensions
- urllib3: urllib3
- urllib3.connection: urllib3
- urllib3.connectionpool: urllib3
- urllib3.contrib: urllib3
- urllib3.contrib.appengine: urllib3
- urllib3.contrib.ntlmpool: urllib3
- urllib3.contrib.pyopenssl: urllib3
- urllib3.contrib.securetransport: urllib3
- urllib3.contrib.socks: urllib3
- urllib3.exceptions: urllib3
- urllib3.fields: urllib3
- urllib3.filepost: urllib3
- urllib3.packages: urllib3
- urllib3.packages.backports: urllib3
- urllib3.packages.backports.makefile: urllib3
- urllib3.packages.six: urllib3
- urllib3.poolmanager: urllib3
- urllib3.request: urllib3
- urllib3.response: urllib3
- urllib3.util: urllib3
- urllib3.util.connection: urllib3
- urllib3.util.proxy: urllib3
- urllib3.util.queue: urllib3
- urllib3.util.request: urllib3
- urllib3.util.response: urllib3
- urllib3.util.retry: urllib3
- urllib3.util.ssl_: urllib3
- urllib3.util.ssl_match_hostname: urllib3
- urllib3.util.ssltransport: urllib3
- urllib3.util.timeout: urllib3
- urllib3.util.url: urllib3
- urllib3.util.wait: urllib3
- wrapt: wrapt
- wrapt.arguments: wrapt
- wrapt.decorators: wrapt
- wrapt.importer: wrapt
- wrapt.wrappers: wrapt
- yaml: PyYAML
- yaml.composer: PyYAML
- yaml.constructor: PyYAML
- yaml.cyaml: PyYAML
- yaml.dumper: PyYAML
- yaml.emitter: PyYAML
- yaml.error: PyYAML
- yaml.events: PyYAML
- yaml.loader: PyYAML
- yaml.nodes: PyYAML
- yaml.parser: PyYAML
- yaml.reader: PyYAML
- yaml.representer: PyYAML
- yaml.resolver: PyYAML
- yaml.scanner: PyYAML
- yaml.serializer: PyYAML
- yaml.tokens: PyYAML
- yamllint: yamllint
- yamllint.cli: yamllint
- yamllint.config: yamllint
- yamllint.linter: yamllint
- yamllint.parser: yamllint
- yamllint.rules: yamllint
- yamllint.rules.braces: yamllint
- yamllint.rules.brackets: yamllint
- yamllint.rules.colons: yamllint
- yamllint.rules.commas: yamllint
- yamllint.rules.comments: yamllint
- yamllint.rules.comments_indentation: yamllint
- yamllint.rules.common: yamllint
- yamllint.rules.document_end: yamllint
- yamllint.rules.document_start: yamllint
- yamllint.rules.empty_lines: yamllint
- yamllint.rules.empty_values: yamllint
- yamllint.rules.float_values: yamllint
- yamllint.rules.hyphens: yamllint
- yamllint.rules.indentation: yamllint
- yamllint.rules.key_duplicates: yamllint
- yamllint.rules.key_ordering: yamllint
- yamllint.rules.line_length: yamllint
- yamllint.rules.new_line_at_end_of_file: yamllint
- yamllint.rules.new_lines: yamllint
- yamllint.rules.octal_values: yamllint
- yamllint.rules.quoted_strings: yamllint
- yamllint.rules.trailing_spaces: yamllint
- yamllint.rules.truthy: yamllint
- pip_repository:
- name: pip
- use_pip_repository_aliases: true
-integrity: d979738b10adbbaff0884837e4414688990491c6c40f6a25d58b9bb564411477
diff --git a/examples/bzlmod_build_file_generation/BUILD.bazel b/examples/bzlmod_build_file_generation/BUILD.bazel
index 67288d6..1205817 100644
--- a/examples/bzlmod_build_file_generation/BUILD.bazel
+++ b/examples/bzlmod_build_file_generation/BUILD.bazel
@@ -52,9 +52,6 @@
"//:requirements_windows.txt",
],
tags = ["exclusive"],
- # NOTE: we can use this flag in order to make our setup compatible with
- # bzlmod.
- use_pip_repository_aliases = True,
)
# Our gazelle target points to the python gazelle binary.
diff --git a/examples/bzlmod_build_file_generation/gazelle_python.yaml b/examples/bzlmod_build_file_generation/gazelle_python.yaml
index 0c7f148..46a1c8b 100644
--- a/examples/bzlmod_build_file_generation/gazelle_python.yaml
+++ b/examples/bzlmod_build_file_generation/gazelle_python.yaml
@@ -586,5 +586,4 @@
yamllint.rules.truthy: yamllint
pip_repository:
name: pip
- use_pip_repository_aliases: true
-integrity: 369584d55f2168d92c415f4c4ab4bc9d2d21a7fb0b0a6749437fcc771fd2f254
+integrity: cd25503dc6b3d9e1c5f46715ba2d0499ecc8b3d654ebcbf9f4e52f2074290e0a
diff --git a/examples/pip_parse_vendored/WORKSPACE b/examples/pip_parse_vendored/WORKSPACE
index e8cb065..157f70a 100644
--- a/examples/pip_parse_vendored/WORKSPACE
+++ b/examples/pip_parse_vendored/WORKSPACE
@@ -21,7 +21,6 @@
# It also wouldn't be needed by users of this ruleset.
pip_parse(
name = "pip",
- incompatible_generate_aliases = True,
python_interpreter_target = interpreter,
requirements_lock = "//:requirements.txt",
)
diff --git a/examples/pip_parse_vendored/requirements.bzl b/examples/pip_parse_vendored/requirements.bzl
index 4bcdde9..53208f5 100644
--- a/examples/pip_parse_vendored/requirements.bzl
+++ b/examples/pip_parse_vendored/requirements.bzl
@@ -7,7 +7,7 @@
load("@python39//:defs.bzl", "interpreter")
load("@rules_python//python/pip_install:pip_repository.bzl", "whl_library")
-all_requirements = ["@pip//certifi", "@pip//charset_normalizer", "@pip//idna", "@pip//requests", "@pip//urllib3"]
+all_requirements = ["@pip//certifi:pkg", "@pip//charset_normalizer:pkg", "@pip//idna:pkg", "@pip//requests:pkg", "@pip//urllib3:pkg"]
all_whl_requirements = ["@pip//certifi:whl", "@pip//charset_normalizer:whl", "@pip//idna:whl", "@pip//requests:whl", "@pip//urllib3:whl"]
@@ -21,16 +21,16 @@
return name.replace("-", "_").replace(".", "_").lower()
def requirement(name):
- return "@pip_" + _clean_name(name) + "//:pkg"
+ return "@pip//{}:{}".format(_clean_name(name), "pkg")
def whl_requirement(name):
- return "@pip_" + _clean_name(name) + "//:whl"
+ return "@pip//{}:{}".format(_clean_name(name), "whl")
def data_requirement(name):
- return "@pip_" + _clean_name(name) + "//:data"
+ return "@pip//{}:{}".format(_clean_name(name), "data")
def dist_info_requirement(name):
- return "@pip_" + _clean_name(name) + "//:dist_info"
+ return "@pip//{}:{}".format(_clean_name(name), "dist_info")
def entry_point(pkg, script = None):
if not script:
diff --git a/gazelle/README.md b/gazelle/README.md
index c32f0d8..208e841 100644
--- a/gazelle/README.md
+++ b/gazelle/README.md
@@ -115,9 +115,6 @@
# This should point to wherever we declare our python dependencies
# (the same as what we passed to the modules_mapping rule in WORKSPACE)
requirements = "//:requirements_lock.txt",
- # NOTE: we can use this flag in order to make our setup compatible with
- # bzlmod.
- use_pip_repository_aliases = True,
)
```
diff --git a/gazelle/manifest/defs.bzl b/gazelle/manifest/defs.bzl
index d5afe7c..f1a16c4 100644
--- a/gazelle/manifest/defs.bzl
+++ b/gazelle/manifest/defs.bzl
@@ -25,7 +25,7 @@
pip_repository_name = "",
pip_deps_repository_name = "",
manifest = ":gazelle_python.yaml",
- use_pip_repository_aliases = False,
+ use_pip_repository_aliases = None,
**kwargs):
"""A macro for defining the updating and testing targets for the Gazelle manifest file.
@@ -36,7 +36,7 @@
the manifest generator.
pip_repository_name: the name of the pip_install or pip_repository target.
use_pip_repository_aliases: boolean flag to enable using user-friendly
- python package aliases.
+ python package aliases. Defaults to True.
pip_deps_repository_name: deprecated - the old pip_install target name.
modules_mapping: the target for the generated modules_mapping.json file.
manifest: the target for the Gazelle manifest file.
@@ -85,11 +85,23 @@
update_target_label,
]
- if use_pip_repository_aliases:
+ # TODO @aignas 2023-10-31: When removing this code, cleanup the
+ # code in gazelle to only work with aliased targets.
+ if use_pip_repository_aliases == None:
+ update_args += [
+ "--omit-pip-repository-aliases-setting",
+ "true",
+ ]
+ elif use_pip_repository_aliases:
update_args += [
"--use-pip-repository-aliases",
"true",
]
+ else:
+ update_args += [
+ "--use-pip-repository-aliases",
+ "false",
+ ]
go_binary(
name = update_target,
diff --git a/gazelle/manifest/generate/generate.go b/gazelle/manifest/generate/generate.go
index 1f56e63..006b15e 100644
--- a/gazelle/manifest/generate/generate.go
+++ b/gazelle/manifest/generate/generate.go
@@ -43,6 +43,7 @@
requirementsPath string
pipRepositoryName string
usePipRepositoryAliases bool
+ omitUsePipRepositoryAliases bool
modulesMappingPath string
outputPath string
updateTarget string
@@ -66,8 +67,13 @@
flag.BoolVar(
&usePipRepositoryAliases,
"use-pip-repository-aliases",
- false,
+ true,
"Whether to use the pip-repository aliases, which are generated when passing 'incompatible_generate_aliases = True'.")
+ flag.BoolVar(
+ &omitUsePipRepositoryAliases,
+ "omit-pip-repository-aliases-setting",
+ false,
+ "Whether to omit use-pip-repository-aliases flag serialization into the manifest.")
flag.StringVar(
&modulesMappingPath,
"modules-mapping",
@@ -107,13 +113,19 @@
}
header := generateHeader(updateTarget)
+ repository := manifest.PipRepository{
+ Name: pipRepositoryName,
+ }
+
+ if omitUsePipRepositoryAliases {
+ repository.UsePipRepositoryAliases = nil
+ } else {
+ repository.UsePipRepositoryAliases = &usePipRepositoryAliases
+ }
manifestFile := manifest.NewFile(&manifest.Manifest{
ModulesMapping: modulesMapping,
- PipRepository: &manifest.PipRepository{
- Name: pipRepositoryName,
- UsePipRepositoryAliases: usePipRepositoryAliases,
- },
+ PipRepository: &repository,
})
if err := writeOutput(
outputPath,
diff --git a/gazelle/manifest/manifest.go b/gazelle/manifest/manifest.go
index c49951d..e95ef06 100644
--- a/gazelle/manifest/manifest.go
+++ b/gazelle/manifest/manifest.go
@@ -146,5 +146,5 @@
Name string
// UsePipRepositoryAliases allows to use aliases generated pip_repository
// when passing incompatible_generate_aliases = True.
- UsePipRepositoryAliases bool `yaml:"use_pip_repository_aliases,omitempty"`
+ UsePipRepositoryAliases *bool `yaml:"use_pip_repository_aliases,omitempty"`
}
diff --git a/gazelle/python/testdata/dependency_resolution_order/BUILD.out b/gazelle/python/testdata/dependency_resolution_order/BUILD.out
index 3ea83eb..eebe6c3 100644
--- a/gazelle/python/testdata/dependency_resolution_order/BUILD.out
+++ b/gazelle/python/testdata/dependency_resolution_order/BUILD.out
@@ -9,6 +9,6 @@
deps = [
"//baz",
"//somewhere/bar",
- "@gazelle_python_test_some_foo//:pkg",
+ "@gazelle_python_test//some_foo",
],
)
diff --git a/gazelle/python/testdata/file_name_matches_import_statement/BUILD.out b/gazelle/python/testdata/file_name_matches_import_statement/BUILD.out
index 0216e4b..ae1ba81 100644
--- a/gazelle/python/testdata/file_name_matches_import_statement/BUILD.out
+++ b/gazelle/python/testdata/file_name_matches_import_statement/BUILD.out
@@ -7,5 +7,5 @@
"rest_framework.py",
],
visibility = ["//:__subpackages__"],
- deps = ["@gazelle_python_test_djangorestframework//:pkg"],
+ deps = ["@gazelle_python_test//djangorestframework"],
)
diff --git a/gazelle/python/testdata/ignored_invalid_imported_module/BUILD.out b/gazelle/python/testdata/ignored_invalid_imported_module/BUILD.out
index b8c936a..4744166 100644
--- a/gazelle/python/testdata/ignored_invalid_imported_module/BUILD.out
+++ b/gazelle/python/testdata/ignored_invalid_imported_module/BUILD.out
@@ -4,5 +4,5 @@
name = "ignored_invalid_imported_module",
srcs = ["__init__.py"],
visibility = ["//:__subpackages__"],
- deps = ["@gazelle_python_test_foo//:pkg"],
+ deps = ["@gazelle_python_test//foo"],
)
diff --git a/gazelle/python/testdata/monorepo/coarse_grained/BUILD.out b/gazelle/python/testdata/monorepo/coarse_grained/BUILD.out
index b11cbbd..0357705 100644
--- a/gazelle/python/testdata/monorepo/coarse_grained/BUILD.out
+++ b/gazelle/python/testdata/monorepo/coarse_grained/BUILD.out
@@ -16,5 +16,5 @@
"foo/__init__.py",
],
visibility = ["//:__subpackages__"],
- deps = ["@root_pip_deps_rootboto3//:pkg"],
+ deps = ["@root_pip_deps//rootboto3"],
)
diff --git a/gazelle/python/testdata/monorepo/one/BUILD.out b/gazelle/python/testdata/monorepo/one/BUILD.out
index 5098cc9..af11746 100644
--- a/gazelle/python/testdata/monorepo/one/BUILD.out
+++ b/gazelle/python/testdata/monorepo/one/BUILD.out
@@ -12,6 +12,6 @@
"//one/bar",
"//one/bar/baz:modified_name_baz",
"//one/foo",
- "@one_pip_deps_oneboto3//:pkg",
+ "@one_pip_deps//oneboto3",
],
)
diff --git a/gazelle/python/testdata/monorepo/one/bar/BUILD.out b/gazelle/python/testdata/monorepo/one/bar/BUILD.out
index 6ee6515..7a4a1d6 100644
--- a/gazelle/python/testdata/monorepo/one/bar/BUILD.out
+++ b/gazelle/python/testdata/monorepo/one/bar/BUILD.out
@@ -8,5 +8,5 @@
"//one:__subpackages__",
"//three:__subpackages__",
],
- deps = ["@one_pip_deps_oneboto3//:pkg"],
+ deps = ["@one_pip_deps//oneboto3"],
)
diff --git a/gazelle/python/testdata/monorepo/three/BUILD.out b/gazelle/python/testdata/monorepo/three/BUILD.out
index 78a3927..2620d70 100644
--- a/gazelle/python/testdata/monorepo/three/BUILD.out
+++ b/gazelle/python/testdata/monorepo/three/BUILD.out
@@ -15,7 +15,7 @@
"//one/bar",
"//one/bar/baz:modified_name_baz",
"//one/foo",
- "@root_pip_deps_rootboto4//:pkg",
- "@three_pip_deps_threeboto3//:pkg",
+ "@root_pip_deps//rootboto4",
+ "@three_pip_deps//threeboto3",
],
)
diff --git a/gazelle/python/testdata/monorepo/two/BUILD.out b/gazelle/python/testdata/monorepo/two/BUILD.out
index 9cda007..cf22945 100644
--- a/gazelle/python/testdata/monorepo/two/BUILD.out
+++ b/gazelle/python/testdata/monorepo/two/BUILD.out
@@ -10,6 +10,6 @@
visibility = ["//two:__subpackages__"],
deps = [
"//one/foo",
- "@two_pip_deps_twoboto3//:pkg",
+ "@two_pip_deps//twoboto3",
],
)
diff --git a/gazelle/python/testdata/python_ignore_dependencies_directive/BUILD.out b/gazelle/python/testdata/python_ignore_dependencies_directive/BUILD.out
index 3fb91f5..7afe61b 100644
--- a/gazelle/python/testdata/python_ignore_dependencies_directive/BUILD.out
+++ b/gazelle/python/testdata/python_ignore_dependencies_directive/BUILD.out
@@ -7,5 +7,5 @@
name = "python_ignore_dependencies_directive",
srcs = ["__init__.py"],
visibility = ["//:__subpackages__"],
- deps = ["@gazelle_python_test_boto3//:pkg"],
+ deps = ["@gazelle_python_test//boto3"],
)
diff --git a/gazelle/python/testdata/python_target_with_test_in_name/BUILD.out b/gazelle/python/testdata/python_target_with_test_in_name/BUILD.out
index a46f5c4..32e899b 100644
--- a/gazelle/python/testdata/python_target_with_test_in_name/BUILD.out
+++ b/gazelle/python/testdata/python_target_with_test_in_name/BUILD.out
@@ -11,7 +11,7 @@
srcs = ["real_test.py"],
deps = [
":python_target_with_test_in_name",
- "@gazelle_python_test_boto3//:pkg",
+ "@gazelle_python_test//boto3",
],
)
diff --git a/gazelle/python/testdata/with_nested_import_statements/BUILD.out b/gazelle/python/testdata/with_nested_import_statements/BUILD.out
index 45bf265..c54bea7 100644
--- a/gazelle/python/testdata/with_nested_import_statements/BUILD.out
+++ b/gazelle/python/testdata/with_nested_import_statements/BUILD.out
@@ -4,5 +4,5 @@
name = "with_nested_import_statements",
srcs = ["__init__.py"],
visibility = ["//:__subpackages__"],
- deps = ["@gazelle_python_test_boto3//:pkg"],
+ deps = ["@gazelle_python_test//boto3"],
)
diff --git a/gazelle/python/testdata/with_third_party_requirements/BUILD.out b/gazelle/python/testdata/with_third_party_requirements/BUILD.out
index 2a97d8b..c9330d9 100644
--- a/gazelle/python/testdata/with_third_party_requirements/BUILD.out
+++ b/gazelle/python/testdata/with_third_party_requirements/BUILD.out
@@ -9,9 +9,9 @@
],
visibility = ["//:__subpackages__"],
deps = [
- "@gazelle_python_test_baz//:pkg",
- "@gazelle_python_test_boto3//:pkg",
- "@gazelle_python_test_djangorestframework//:pkg",
+ "@gazelle_python_test//baz",
+ "@gazelle_python_test//boto3",
+ "@gazelle_python_test//djangorestframework",
],
)
@@ -20,5 +20,5 @@
srcs = ["__main__.py"],
main = "__main__.py",
visibility = ["//:__subpackages__"],
- deps = ["@gazelle_python_test_baz//:pkg"],
+ deps = ["@gazelle_python_test//baz"],
)
diff --git a/gazelle/python/testdata/with_third_party_requirements_from_imports/BUILD.out b/gazelle/python/testdata/with_third_party_requirements_from_imports/BUILD.out
index 577f167..9d6904f 100644
--- a/gazelle/python/testdata/with_third_party_requirements_from_imports/BUILD.out
+++ b/gazelle/python/testdata/with_third_party_requirements_from_imports/BUILD.out
@@ -8,8 +8,8 @@
],
visibility = ["//:__subpackages__"],
deps = [
- "@gazelle_python_test_google_cloud_aiplatform//:pkg",
- "@gazelle_python_test_google_cloud_storage//:pkg",
+ "@gazelle_python_test//google_cloud_aiplatform",
+ "@gazelle_python_test//google_cloud_storage",
],
)
@@ -20,6 +20,6 @@
visibility = ["//:__subpackages__"],
deps = [
":with_third_party_requirements_from_imports",
- "@gazelle_python_test_google_cloud_aiplatform//:pkg",
+ "@gazelle_python_test//google_cloud_aiplatform",
],
)
diff --git a/gazelle/pythonconfig/pythonconfig.go b/gazelle/pythonconfig/pythonconfig.go
index a266804..636d6a4 100644
--- a/gazelle/pythonconfig/pythonconfig.go
+++ b/gazelle/pythonconfig/pythonconfig.go
@@ -232,15 +232,16 @@
}
sanitizedDistribution := SanitizeDistribution(distributionName)
- if gazelleManifest.PipRepository != nil && gazelleManifest.PipRepository.UsePipRepositoryAliases {
- // @<repository_name>//<distribution_name>
- lbl := label.New(distributionRepositoryName, sanitizedDistribution, sanitizedDistribution)
+ if repo := gazelleManifest.PipRepository; repo != nil && (repo.UsePipRepositoryAliases != nil && *repo.UsePipRepositoryAliases == false) {
+ // TODO @aignas 2023-10-31: to be removed later.
+ // @<repository_name>_<distribution_name>//:pkg
+ distributionRepositoryName = distributionRepositoryName + "_" + sanitizedDistribution
+ lbl := label.New(distributionRepositoryName, "", "pkg")
return lbl.String(), true
}
- // @<repository_name>_<distribution_name>//:pkg
- distributionRepositoryName = distributionRepositoryName + "_" + sanitizedDistribution
- lbl := label.New(distributionRepositoryName, "", "pkg")
+ // @<repository_name>//<distribution_name>
+ lbl := label.New(distributionRepositoryName, sanitizedDistribution, sanitizedDistribution)
return lbl.String(), true
}
}
diff --git a/python/pip.bzl b/python/pip.bzl
index b779f83..fd02a56 100644
--- a/python/pip.bzl
+++ b/python/pip.bzl
@@ -77,6 +77,12 @@
)
install_deps_calls.append(install_deps_call)
+ # NOTE @aignas 2023-10-31: I am not sure it is possible to render aliases
+ # for all of the packages using the `render_pkg_aliases` function because
+ # we need to know what the list of packages for each version is and then
+ # we would be creating directories for each.
+ macro_tmpl = "@%s_{}//:{}" % rctx.attr.name
+
requirements_bzl = """\
# Generated by python/pip.bzl
@@ -87,8 +93,12 @@
_version_map = dict()
def _process_requirements(pkg_labels, python_version, repo_prefix):
for pkg_label in pkg_labels:
- workspace_name = Label(pkg_label).workspace_name
- wheel_name = workspace_name[len(repo_prefix):]
+ wheel_name = Label(pkg_label).package
+ if not wheel_name:
+ # We are dealing with the cases where we don't have aliases.
+ workspace_name = Label(pkg_label).workspace_name
+ wheel_name = workspace_name[len(repo_prefix):]
+
_wheel_names.append(wheel_name)
if not wheel_name in _version_map:
_version_map[wheel_name] = dict()
@@ -100,16 +110,16 @@
return name.replace("-", "_").replace(".", "_").lower()
def requirement(name):
- return "@{name}_" + _clean_name(name) + "//:pkg"
+ return "{macro_tmpl}".format(_clean_name(name), "pkg")
def whl_requirement(name):
- return "@{name}_" + _clean_name(name) + "//:whl"
+ return "{macro_tmpl}".format(_clean_name(name), "whl")
def data_requirement(name):
- return "@{name}_" + _clean_name(name) + "//:data"
+ return "{macro_tmpl}".format(_clean_name(name), "data")
def dist_info_requirement(name):
- return "@{name}_" + _clean_name(name) + "//:dist_info"
+ return "{macro_tmpl}".format(_clean_name(name), "dist_info")
def entry_point(pkg, script = None):
fail("Not implemented yet")
@@ -127,6 +137,7 @@
name = rctx.attr.name,
install_deps_calls = "\n".join(install_deps_calls),
load_statements = "\n".join(load_statements),
+ macro_tmpl = macro_tmpl,
process_requirements_calls = "\n".join(process_requirements_calls),
rules_python = rules_python,
default_version = rctx.attr.default_version,
diff --git a/python/pip_install/pip_repository.bzl b/python/pip_install/pip_repository.bzl
index 36a777b..b9b9a07 100644
--- a/python/pip_install/pip_repository.bzl
+++ b/python/pip_install/pip_repository.bzl
@@ -317,28 +317,32 @@
config["python_interpreter_target"] = str(rctx.attr.python_interpreter_target)
if rctx.attr.incompatible_generate_aliases:
+ macro_tmpl = "@%s//{}:{}" % rctx.attr.name
aliases = render_pkg_aliases(repo_name = rctx.attr.name, bzl_packages = bzl_packages)
for path, contents in aliases.items():
rctx.file(path, contents)
+ else:
+ macro_tmpl = "@%s_{}//:{}" % rctx.attr.name
rctx.file("BUILD.bazel", _BUILD_FILE_CONTENTS)
rctx.template("requirements.bzl", rctx.attr._template, substitutions = {
"%%ALL_DATA_REQUIREMENTS%%": _format_repr_list([
- "@{}//{}:data".format(rctx.attr.name, p) if rctx.attr.incompatible_generate_aliases else "@{}_{}//:data".format(rctx.attr.name, p)
+ macro_tmpl.format(p, "data")
for p in bzl_packages
]),
"%%ALL_REQUIREMENTS%%": _format_repr_list([
- "@{}//{}".format(rctx.attr.name, p) if rctx.attr.incompatible_generate_aliases else "@{}_{}//:pkg".format(rctx.attr.name, p)
+ macro_tmpl.format(p, "pkg")
for p in bzl_packages
]),
"%%ALL_WHL_REQUIREMENTS%%": _format_repr_list([
- "@{}//{}:whl".format(rctx.attr.name, p) if rctx.attr.incompatible_generate_aliases else "@{}_{}//:whl".format(rctx.attr.name, p)
+ macro_tmpl.format(p, "whl")
for p in bzl_packages
]),
"%%ANNOTATIONS%%": _format_dict(_repr_dict(annotations)),
"%%CONFIG%%": _format_dict(_repr_dict(config)),
"%%EXTRA_PIP_ARGS%%": json.encode(options),
"%%IMPORTS%%": "\n".join(sorted(imports)),
+ "%%MACRO_TMPL%%": macro_tmpl,
"%%NAME%%": rctx.attr.name,
"%%PACKAGES%%": _format_repr_list(
[
@@ -441,8 +445,21 @@
doc = "Optional annotations to apply to packages",
),
"incompatible_generate_aliases": attr.bool(
- default = False,
- doc = "Allow generating aliases '@pip//<pkg>' -> '@pip_<pkg>//:pkg'.",
+ default = True,
+ doc = """\
+If true, extra aliases will be created in the main `hub` repo - i.e. the repo
+where the `requirements.bzl` is located. This means that for a Python package
+`PyYAML` initialized within a `pip` `hub_repo` there will be the following
+aliases generated:
+- `@pip//pyyaml` will point to `@pip_pyyaml//:pkg`
+- `@pip//pyyaml:data` will point to `@pip_pyyaml//:data`
+- `@pip//pyyaml:dist_info` will point to `@pip_pyyaml//:dist_info`
+- `@pip//pyyaml:pkg` will point to `@pip_pyyaml//:pkg`
+- `@pip//pyyaml:whl` will point to `@pip_pyyaml//:whl`
+
+This is to keep the dependencies coming from PyPI to have more ergonomic label
+names and support smooth transition to `bzlmod`.
+""",
),
"requirements_darwin": attr.label(
allow_single_file = True,
diff --git a/python/pip_install/pip_repository_requirements.bzl.tmpl b/python/pip_install/pip_repository_requirements.bzl.tmpl
index 411f334..92ea5be 100644
--- a/python/pip_install/pip_repository_requirements.bzl.tmpl
+++ b/python/pip_install/pip_repository_requirements.bzl.tmpl
@@ -20,16 +20,16 @@
return name.replace("-", "_").replace(".", "_").lower()
def requirement(name):
- return "@%%NAME%%_" + _clean_name(name) + "//:pkg"
+ return "%%MACRO_TMPL%%".format(_clean_name(name), "pkg")
def whl_requirement(name):
- return "@%%NAME%%_" + _clean_name(name) + "//:whl"
+ return "%%MACRO_TMPL%%".format(_clean_name(name), "whl")
def data_requirement(name):
- return "@%%NAME%%_" + _clean_name(name) + "//:data"
+ return "%%MACRO_TMPL%%".format(_clean_name(name), "data")
def dist_info_requirement(name):
- return "@%%NAME%%_" + _clean_name(name) + "//:dist_info"
+ return "%%MACRO_TMPL%%".format(_clean_name(name), "dist_info")
def entry_point(pkg, script = None):
if not script: