Knock together a handy py_project macro

This commit is contained in:
Reid 'arrdem' McKenzie 2021-08-03 19:27:57 -06:00
parent 6c6b0a060f
commit 4d8cd34cbc
2 changed files with 101 additions and 66 deletions

View file

@ -6,6 +6,7 @@ load("//tools/python:defs.bzl",
"py_unittest",
"py_pytest",
"py_resources",
"py_project",
)
load("@arrdem_source_pypi//:requirements.bzl",

View file

@ -144,3 +144,37 @@ py_resources = rule(
),
},
)
def py_project(name=None,
lib_srcs=None,
lib_deps=None,
test_srcs=None,
test_deps=None):
"""
A helper for defining conventionally-formatted python project.
Assumes that there's a src/python tree, and a src/test tree.
Each test_*.py source generates its own implicit test target. This allows
for automatic test parallelism.
"""
lib_srcs = lib_srcs or native.glob(["src/python/**/*.py"])
test_srcs = test_srcs or native.glob(["test/python/**/*.py"])
py_library(
name=name,
srcs=lib_srcs,
deps=lib_deps,
imports=["src/python"],
)
for src in test_srcs:
if "test_" in src:
py_pytest(
name=name + ".test." + str(hash(src)).replace("-", "") + "." + src.split("/")[-1],
srcs=test_srcs,
deps=[name] + test_deps,
imports=["test/python"],
)