# Load various rules so that we can have bazel download # various rulesets and dependencies. # The `load` statement imports the symbol for the rule, in the defined # ruleset. When the symbol is loaded you can use the rule. load("@bazel_gazelle//:def.bzl", "gazelle") load("@pip//:requirements.bzl", "all_whl_requirements") load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test") load("@rules_python//python:pip.bzl", "compile_pip_requirements") load("@rules_python_gazelle_plugin//manifest:defs.bzl", "gazelle_python_manifest") load("@rules_python_gazelle_plugin//modules_mapping:def.bzl", "modules_mapping") compile_pip_requirements( name = "requirements", src = "requirements.in", requirements_txt = "requirements_lock.txt", requirements_windows = "requirements_windows.txt", ) # This repository rule fetches the metadata for python packages we # depend on. That data is required for the gazelle_python_manifest # rule to update our manifest file. # To see what this rule does, try `bazel run @modules_map//:print` modules_mapping( name = "modules_map", exclude_patterns = [ "^_|(\\._)+", # This is the default. "(\\.tests)+", # Add a custom one to get rid of the psutil tests. ], wheels = all_whl_requirements, ) # Gazelle python extension needs a manifest file mapping from # an import to the installed package that provides it. # This macro produces two targets: # - //:gazelle_python_manifest.update can be used with `bazel run` # to recalculate the manifest # - //:gazelle_python_manifest.test is a test target ensuring that # the manifest doesn't need to be updated gazelle_python_manifest( name = "gazelle_python_manifest", modules_mapping = ":modules_map", pip_repository_name = "pip", # 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", ) # Our gazelle target points to the python gazelle binary. # This is the simple case where we only need one language supported. # If you also had proto, go, or other gazelle-supported languages, # you would also need a gazelle_binary rule. # See https://github.com/bazelbuild/bazel-gazelle/blob/master/extend.rst#example gazelle( name = "gazelle", gazelle = "@rules_python_gazelle_plugin//python:gazelle_binary", ) # This rule is auto-generated and managed by Gazelle, # because it found the __init__.py file in this folder. # See: https://bazel.build/reference/be/python#py_library py_library( name = "build_file_generation", srcs = ["__init__.py"], visibility = ["//:__subpackages__"], deps = [ "//random_number_generator", "@pip//flask", "@pip//sphinx", ], ) # A py_binary is an executable Python program consisting of a collection of .py source files. # See: https://bazel.build/reference/be/python#py_binary # # This rule is auto-generated and managed by Gazelle, # because it found the __main__.py file in this folder. # This rule creates a target named //:build_file_generation_bin and you can use # bazel to run the target: # `bazel run //:build_file_generation_bin` py_binary( name = "build_file_generation_bin", srcs = ["__main__.py"], main = "__main__.py", visibility = ["//:__subpackages__"], deps = [":build_file_generation"], ) # A py_test is a Python unit test. # See: https://bazel.build/reference/be/python#py_test # # This rule is auto-generated and managed by Gazelle, # because it found the __test__.py file in this folder. # This rule creates a target named //:build_file_generation_test and you can use # bazel to run the target: # `bazel test //:build_file_generation_test` py_test( name = "build_file_generation_test", srcs = ["__test__.py"], main = "__test__.py", deps = [":build_file_generation"], )