Dependency Injection
arc supports a simple dependency injection system for commands.
examples/dependency.py
import arc
def dep(ctx: arc.Context) -> int:
    return 2
@arc.command()
def command(value: int = arc.Depends(dep)):
    arc.print(value)
command()
Note that arguments whose values are discovered
via dependency injection do not have associated command line
parameters. You can see this by inspecting the --help for the command.
$ python dependency.py --help
USAGE
    dependency.py [-h]
OPTIONS
    --help (-h)  Displays this help message
value argument!
Type dependencies¶
A type can be denoted to be a dependency by implementing the __depends__() class method.
examples/type_dependency.py
import arc
class Dependency:
    def __init__(self, value: int) -> None:
        self.value = value
    @classmethod
    def __depends__(cls, ctx: arc.Context):
        return Dependency(2)
@arc.command()
def command(dep: Dependency):
    arc.print(dep)
    arc.print(dep.value)
command()
Warning
If you implement this method, then this type cannot be used as the type of any other kind of parameter.
arc uses this feature to make various components available to your commands: