docs: think more about design

This commit is contained in:
Daylin Morgan 2024-10-25 14:27:00 -05:00
parent 1b28e6c93d
commit 4ca3cabc53
Signed by: daylin
GPG key ID: 950D13E9719334AD

View file

@ -12,11 +12,13 @@ basic design:
```python ```python
from swydd import taks, option, cli from swydd import taks, option, cli
@task @task
@option("program","name of program to compile") @option("program", "name of program to compile")
def build(program: str = "hello"): def build(program: str = "hello"):
"""build a program""" """build a program"""
sub < f"gcc -o {program} {program}.c" sub < f"gcc -o {program} {program}.c"
cli() cli()
``` ```
@ -32,11 +34,10 @@ cli()
```python ```python
@task @task
def pipe_commands() def pipe_commands():
"""run pre-commit (and mypy)""" """run pre-commit (and mypy)"""
p = Pipe(Exec("find . -name file"), Exec("grep 'pattern'")).get() p = Pipe(Exec("find . -name file"), Exec("grep 'pattern'")).get()
print(p.stdout) print(p.stdout)
``` ```
Made even simpler with operator overloading: Made even simpler with operator overloading:
@ -45,8 +46,8 @@ Made even simpler with operator overloading:
```python ```python
@task @task
def run_commands(): def run_commands():
stdout = get < (pipe | "find . -name file" | "grep 'pattern'") stdout = get < (pipe | "find . -name file" | "grep 'pattern'")
print(stdout) print(stdout)
``` ```
Upon reflection I think the operator overloading is wildly confusing. Upon reflection I think the operator overloading is wildly confusing.
@ -57,16 +58,27 @@ Make `sub(cmd, **kwargs)` and alias for `proc(cmd).run(**kwargs)`
```python ```python
@task @task
def run_commands(): def run_commands():
stdout = proc("find . -name file").pipe("grep 'pattern'").get() stdout = proc("find . -name file").pipe("grep 'pattern'").get()
print(stdout) print(stdout)
``` ```
## Handling a DAG
```python
@task
@needs("src/a-file.txt")
@targets("build/output.txt")
def build():
"""build step with a dependency"""
lines = asset("src/a-filter.txt").read().splitlines()
# or lines = ctx.needs[0].read().splitlines()
ctx.targets.output.write("\n".join([f"{i}: {line}" for i, line in enumerate(lines)]))
```
## Internal CLI ## Internal CLI
```sh ```sh
./tasks.py _ swydd-subcmd ./tasks.py +swydd --version # <- current favorite (use a none valid function name to possibly prevent overlap)
# vs
./tasks.py _swydd-subcmd
# or
./tasks.py +swydd subcmd # <- current favorite (use a none valid function name to possibly prevent overlap)
``` ```