chore: add LICENSE file and format README.md
- add MIT LICENSE file for the project - reformat README.md code block indentation for better readability
This commit is contained in:
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 endo Team
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
[](https://github.com/gookeryoung/pyflowx/actions/workflows/ci.yml)
|
[](https://github.com/gookeryoung/pyflowx/actions/workflows/ci.yml)
|
||||||
[](https://pypi.org/project/pyflowx/)
|
[](https://pypi.org/project/pyflowx/)
|
||||||
[](https://pypi.org/project/pyflowx/)
|
[](https://pypi.org/project/pyflowx/)
|
||||||
[](https://github.com/pyflowx/pyflowx)
|
[](https://github.com/gookeryoung/pyflowx)
|
||||||
[](https://github.com/pyflowx/pyflowx/blob/main/LICENSE)
|
[](https://github.com/gookeryoung/pyflowx/blob/main/LICENSE)
|
||||||
|
|
||||||
PyFlowX 把"任务依赖"这件事做到极致简单:**参数名就是依赖声明**。无需装饰器、
|
PyFlowX 把"任务依赖"这件事做到极致简单:**参数名就是依赖声明**。无需装饰器、
|
||||||
无需样板包装器,写一个普通函数,框架按参数名自动注入上游结果。
|
无需样板包装器,写一个普通函数,框架按参数名自动注入上游结果。
|
||||||
@@ -44,13 +44,16 @@ uv add pyflowx
|
|||||||
```python
|
```python
|
||||||
import pyflowx as px
|
import pyflowx as px
|
||||||
|
|
||||||
|
|
||||||
def extract() -> list[int]:
|
def extract() -> list[int]:
|
||||||
return [1, 2, 3]
|
return [1, 2, 3]
|
||||||
|
|
||||||
|
|
||||||
# 参数名 extract 自动匹配上游任务名 → 自动注入
|
# 参数名 extract 自动匹配上游任务名 → 自动注入
|
||||||
def double(extract: list[int]) -> list[int]:
|
def double(extract: list[int]) -> list[int]:
|
||||||
return [x * 2 for x in extract]
|
return [x * 2 for x in extract]
|
||||||
|
|
||||||
|
|
||||||
graph = px.Graph.from_specs([
|
graph = px.Graph.from_specs([
|
||||||
px.TaskSpec("extract", extract),
|
px.TaskSpec("extract", extract),
|
||||||
px.TaskSpec("double", double, ("extract",)),
|
px.TaskSpec("double", double, ("extract",)),
|
||||||
@@ -145,14 +148,17 @@ report.describe() # 人类可读报告
|
|||||||
```python
|
```python
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
|
|
||||||
|
|
||||||
def aggregate(ctx: px.Context) -> Dict[str, Any]:
|
def aggregate(ctx: px.Context) -> Dict[str, Any]:
|
||||||
"""ctx 包含所有 depends_on 任务的返回值。"""
|
"""ctx 包含所有 depends_on 任务的返回值。"""
|
||||||
return dict(ctx)
|
return dict(ctx)
|
||||||
|
|
||||||
|
|
||||||
def merge(fetch_a: str, fetch_b: str) -> str:
|
def merge(fetch_a: str, fetch_b: str) -> str:
|
||||||
"""fetch_a / fetch_b 自动注入。"""
|
"""fetch_a / fetch_b 自动注入。"""
|
||||||
return fetch_a + fetch_b
|
return fetch_a + fetch_b
|
||||||
|
|
||||||
|
|
||||||
def fetch_user(uid: int) -> dict: # uid 来自 TaskSpec.args
|
def fetch_user(uid: int) -> dict: # uid 来自 TaskSpec.args
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user