8000 wheel: support for 'plugin' type entry_points · sfraint/rules_python@6f1df75 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6f1df75

Browse files
committed
1 parent 748aa53 commit 6f1df75

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

experimental/python/wheel.bzl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ def _py_wheel_impl(ctx):
135135
for name, ref in ctx.attr.console_scripts.items():
136136
args.add("--console_script", name + " = " + ref)
137137

138+
for name, ref in ctx.attr.plugins.items():
139+
args.add("--plugin", name + " : " + ref)
140+
138141
if ctx.attr.description_file:
139142
description_file = ctx.file.description_file
140143
args.add("--description_file", description_file)
@@ -201,6 +204,11 @@ _entrypoint_attrs = {
201204
"console_scripts": attr.string_dict(
202205
doc = """\
203206
console_script entry points, e.g. 'experimental.examples.wheel.main:main'.
207+
""",
208+
),
209+
"plugins": attr.string_dict(
210+
doc = """\
211+
plugin entry points, e.g. {'batfish_session': 'bfe = experimental.examples.wheel.main:main'}.
204212
""",
205213
),
206214
}

experimental/rules_python/wheelmaker.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def add_string(self, filename, contents):
9292

9393
def add_file(self, package_filename, real_filename):
9494
"""Add given file to the distribution."""
95+
9596
def arcname_from(name):
9697
# Always use unix path separators.
9798
normalized_arcname = name.replace(os.path.sep, '/')
@@ -157,12 +158,26 @@ def add_metadata(self, extra_headers, description, classifiers, requires,
157158
metadata += "\n"
158159
self.add_string(self.distinfo_path('METADATA'), metadata)
159160

160-
def add_entry_points(self, console_scripts):
161+
def add_entry_points(self, console_scripts, plugins):
161162
"""Write entry_points.txt file to the distribution."""
162163
# https://packaging.python.org/specifications/entry-points/
163-
if not console_scripts:
164+
import re
165+
pattern = re.compile(r'([^=:]+):([^:=]+)=([^=]+)')
166+
lines = []
167+
if console_scripts:
168+
lines += ["[console_scripts]"] + console_scripts
169+
if plugins:
170+
for line in plugins:
171+
match = pattern.fullmatch(line)
172+
if not match:
173+
raise ValueError('{line} is not a valid entry point'.format(line=line))
174+
plugin_type = match.group(1).strip()
175+
plugin_name = match.group(2).strip()
176+
plugin_value = match.group(3).strip()
177+
lines += ['[{plugin_type}]'.format(plugin_type=plugin_type),
178+
'{plugin_name} = {plugin_value}'.format(plugin_name=plugin_name, plugin_value=plugin_value)]
179+
if not lines:
164180
return
165-
lines = ["[console_scripts]"] + console_scripts
166181
contents = '\n'.join(lines)
167182
self.add_string(self.distinfo_path('entry_points.txt'), contents)
168183

@@ -246,6 +261,10 @@ def main():
246261
'--console_script', action='append',
247262
help="Defines a 'console_script' entry point. "
248263
"Can be supplied multiple times.")
264+
contents_group.add_argument(
265+
'--plugin', action='append',
266+
help="Defines a 'plugin' entry_point in the format 'a:b=c'. "
267+
"Can be supplied multiple times.")
249268

250269
requirements_group = parser.add_argument_group("Package requirements")
251270
requirements_group.add_argument(
@@ -303,13 +322,14 @@ def main():
303322
requires = arguments.requires or []
304323
extra_headers = arguments.header or []
305324
console_scripts = arguments.console_script or []
325+
plugins = arguments.plugin or []
306326

307327
maker.add_metadata(extra_headers=extra_headers,
308328
description=description,
309329
classifiers=classifiers,
310330
requires=requires,
311331
extra_requires=extra_requires)
312-
maker.add_entry_points(console_scripts=console_scripts)
332+
maker.add_entry_points(console_scripts=console_scripts, plugins=plugins)
313333
maker.add_recordfile()
314334

315335

0 commit comments

Comments
 (0)
0