@@ -65,7 +65,7 @@ def _repr_actual(aliases):
6565 else :
6666 return render .dict (aliases , key_repr = _repr_config_setting )
6767
68- def _render_common_aliases (* , name , aliases , ** kwargs ):
68+ def _render_common_aliases (* , name , aliases , visibility , ** kwargs ):
6969 pkg_aliases = render .call (
7070 "pkg_aliases" ,
7171 name = repr (name ),
@@ -80,14 +80,21 @@ def _render_common_aliases(*, name, aliases, **kwargs):
8080 return """\
8181 load("@rules_python//python/private/pypi:pkg_aliases.bzl", "pkg_aliases")
8282{extra_loads}
83- package(default_visibility = ["// visibility:public"] )
83+ package(default_visibility = { visibility} )
8484
8585{aliases}""" .format (
8686 aliases = pkg_aliases ,
8787 extra_loads = extra_loads ,
88+ visibility = render .list (visibility ),
8889 )
8990
90- def render_pkg_aliases (* , aliases , requirement_cycles = None , extra_hub_aliases = {}, ** kwargs ):
91+ def render_pkg_aliases (
92+ * ,
93+ aliases ,
94+ requirement_cycles = None ,
95+ extra_hub_aliases = {},
96+ exposed_packages = None ,
97+ ** kwargs ):
9198 """Create alias declarations for each PyPI package.
9299
93100 The aliases should be appended to the pip_repository BUILD.bazel file. These aliases
@@ -100,6 +107,8 @@ def render_pkg_aliases(*, aliases, requirement_cycles = None, extra_hub_aliases
100107 requirement_cycles: any package groups to also add.
101108 extra_hub_aliases: The list of extra aliases for each whl to be added
102109 in addition to the default ones.
110+ exposed_packages: The public hub packages. When present, other packages
111+ are only visible to generated wheel repositories.
103112 **kwargs: Extra kwargs to pass to the rules.
104113
105114 Returns:
@@ -124,12 +133,20 @@ def render_pkg_aliases(*, aliases, requirement_cycles = None, extra_hub_aliases
124133 for whl_name in group_whls
125134 }
126135
136+ exposed_packages = _normalize_package_names (exposed_packages )
137+ internal_visibility = _internal_visibility (aliases )
138+
127139 files = {
128140 "{}/BUILD.bazel" .format (normalize_name (name )): _render_common_aliases (
129141 name = normalize_name (name ),
130142 aliases = pkg_aliases ,
131143 extra_aliases = extra_hub_aliases .get (normalize_name (name ), []),
132144 group_name = whl_group_mapping .get (normalize_name (name )),
145+ visibility = _package_visibility (
146+ name = normalize_name (name ),
147+ exposed_packages = exposed_packages ,
148+ internal_visibility = internal_visibility ,
149+ ),
133150 ** kwargs
134151 ).strip ()
135152 for name , pkg_aliases in aliases .items ()
@@ -139,6 +156,36 @@ def render_pkg_aliases(*, aliases, requirement_cycles = None, extra_hub_aliases
139156 files ["_groups/BUILD.bazel" ] = generate_group_library_build_bazel ("" , requirement_cycles )
140157 return files
141158
159+ def _normalize_package_names (packages ):
160+ if packages == None :
161+ return None
162+
163+ return {
164+ normalize_name (package ): None
165+ for package in packages
166+ }
167+
168+ def _internal_visibility (aliases ):
169+ repo_names = {}
170+ for pkg_aliases in aliases .values ():
171+ if type (pkg_aliases ) == type ("" ):
172+ repo_names [pkg_aliases ] = None
173+ continue
174+
175+ for repo_name in pkg_aliases .values ():
176+ repo_names [repo_name ] = None
177+
178+ return [
179+ "@{}//:__pkg__" .format (repo_name )
180+ for repo_name in sorted (repo_names )
181+ ]
182+
183+ def _package_visibility (* , name , exposed_packages , internal_visibility ):
184+ if exposed_packages == None or name in exposed_packages :
185+ return ["//visibility:public" ]
186+
187+ return internal_visibility
188+
142189def _major_minor (python_version ):
143190 major , _ , tail = python_version .partition ("." )
144191 minor , _ , _ = tail .partition ("." )
0 commit comments