forgegraph 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- forgegraph-0.0.1/.github/workflows/ci.yml +63 -0
- forgegraph-0.0.1/.github/workflows/publish.yml +17 -0
- forgegraph-0.0.1/.gitignore +20 -0
- forgegraph-0.0.1/.pre-commit-config.yaml +29 -0
- forgegraph-0.0.1/CONTRIBUTING.md +15 -0
- forgegraph-0.0.1/LICENSE +21 -0
- forgegraph-0.0.1/PKG-INFO +42 -0
- forgegraph-0.0.1/README.md +13 -0
- forgegraph-0.0.1/TRADEMARKS.md +12 -0
- forgegraph-0.0.1/docs/architecture.md +640 -0
- forgegraph-0.0.1/docs/build-plan.md +406 -0
- forgegraph-0.0.1/docs/decisions.md +7 -0
- forgegraph-0.0.1/docs/initial specification.md +119 -0
- forgegraph-0.0.1/pyproject.toml +72 -0
- forgegraph-0.0.1/scripts/check_denylist.py +77 -0
- forgegraph-0.0.1/src/forgegraph/__init__.py +10 -0
- forgegraph-0.0.1/src/forgegraph/catalog/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/charts/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/cli/__init__.py +22 -0
- forgegraph-0.0.1/src/forgegraph/data/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/formats/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/jobs/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/layers/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/layout/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/packs/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/render/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/skill/__init__.py +1 -0
- forgegraph-0.0.1/src/forgegraph/spec/__init__.py +3 -0
- forgegraph-0.0.1/src/forgegraph/themes/__init__.py +21 -0
- forgegraph-0.0.1/src/forgegraph/themes/fonts/OFL-SourceSans3.md +93 -0
- forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Bold.ttf +0 -0
- forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-It.ttf +0 -0
- forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Regular.ttf +0 -0
- forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Semibold.ttf +0 -0
- forgegraph-0.0.1/tests/test_denylist.py +48 -0
- forgegraph-0.0.1/tests/test_smoke.py +51 -0
- forgegraph-0.0.1/uv.lock +1384 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
checks:
|
|
11
|
+
name: Lint, types, secrets, deny-list
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v7
|
|
15
|
+
with:
|
|
16
|
+
fetch-depth: 0
|
|
17
|
+
- uses: astral-sh/setup-uv@v10.3.0
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
- run: uv sync --locked
|
|
21
|
+
- run: uv run ruff check
|
|
22
|
+
- run: uv run ruff format --check
|
|
23
|
+
- run: uv run pyright
|
|
24
|
+
- name: Deny-listed terms
|
|
25
|
+
run: uv run python scripts/check_denylist.py
|
|
26
|
+
env:
|
|
27
|
+
FORGEGRAPH_DENYLIST: ${{ secrets.DENYLIST }}
|
|
28
|
+
FORGEGRAPH_DENYLIST_REQUIRED: "1"
|
|
29
|
+
- name: Secrets (full history)
|
|
30
|
+
run: docker run --rm -v "$PWD:/repo" ghcr.io/gitleaks/gitleaks:v8.30.1 git /repo --redact --verbose
|
|
31
|
+
|
|
32
|
+
tests-linux:
|
|
33
|
+
name: Tests (Linux, Python ${{ matrix.python }})
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
strategy:
|
|
36
|
+
fail-fast: false
|
|
37
|
+
matrix:
|
|
38
|
+
python: ["3.12", "3.13", "3.14"]
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v7
|
|
41
|
+
- uses: astral-sh/setup-uv@v10.3.0
|
|
42
|
+
with:
|
|
43
|
+
python-version: ${{ matrix.python }}
|
|
44
|
+
- run: uv sync --locked
|
|
45
|
+
- run: uv run pytest --cov --cov-report=term-missing
|
|
46
|
+
|
|
47
|
+
tests-other-os:
|
|
48
|
+
# macOS and Windows minutes count heavily against a private repo's quota,
|
|
49
|
+
# so these run only on main and on demand.
|
|
50
|
+
if: github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch'
|
|
51
|
+
name: Tests (${{ matrix.os }}, Python 3.12)
|
|
52
|
+
runs-on: ${{ matrix.os }}
|
|
53
|
+
strategy:
|
|
54
|
+
fail-fast: false
|
|
55
|
+
matrix:
|
|
56
|
+
os: [macos-latest, windows-latest]
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/checkout@v7
|
|
59
|
+
- uses: astral-sh/setup-uv@v10.3.0
|
|
60
|
+
with:
|
|
61
|
+
python-version: "3.12"
|
|
62
|
+
- run: uv sync --locked
|
|
63
|
+
- run: uv run pytest
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
publish:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
environment: pypi
|
|
10
|
+
permissions:
|
|
11
|
+
id-token: write # trusted publishing: no password or token stored anywhere
|
|
12
|
+
contents: read
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v7
|
|
15
|
+
- uses: astral-sh/setup-uv@v10.3.0
|
|
16
|
+
- run: uv build
|
|
17
|
+
- uses: pypa/gh-action-pypi-publish@v1.14.2
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# macOS
|
|
2
|
+
.DS_Store
|
|
3
|
+
|
|
4
|
+
# Confidential example graphs: kept locally only, never committed
|
|
5
|
+
docs/examples/*.pdf
|
|
6
|
+
|
|
7
|
+
# Python
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.py[cod]
|
|
10
|
+
*.egg-info/
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
build/
|
|
14
|
+
dist/
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.mypy_cache/
|
|
17
|
+
.ruff_cache/
|
|
18
|
+
.coverage
|
|
19
|
+
htmlcov/
|
|
20
|
+
.ipynb_checkpoints/
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: v6.0.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-yaml
|
|
6
|
+
- id: check-toml
|
|
7
|
+
- id: end-of-file-fixer
|
|
8
|
+
exclude: \.md$
|
|
9
|
+
- id: trailing-whitespace
|
|
10
|
+
exclude: \.md$
|
|
11
|
+
- id: check-added-large-files
|
|
12
|
+
args: [--maxkb=600]
|
|
13
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
14
|
+
rev: v0.17.1
|
|
15
|
+
hooks:
|
|
16
|
+
- id: ruff-check
|
|
17
|
+
args: [--fix]
|
|
18
|
+
- id: ruff-format
|
|
19
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
20
|
+
rev: v8.30.1
|
|
21
|
+
hooks:
|
|
22
|
+
- id: gitleaks
|
|
23
|
+
- repo: local
|
|
24
|
+
hooks:
|
|
25
|
+
- id: denylist
|
|
26
|
+
name: deny-listed terms
|
|
27
|
+
entry: python scripts/check_denylist.py
|
|
28
|
+
language: python
|
|
29
|
+
types: [text]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
ForgeGraph is in early development and isn't accepting outside contributions yet. This page will grow before the first public release.
|
|
4
|
+
|
|
5
|
+
## Development setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv sync
|
|
9
|
+
uv run pre-commit install
|
|
10
|
+
uv run pytest
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Requesting a chart type
|
|
14
|
+
|
|
15
|
+
Open a GitHub issue describing the graph you need, ideally with an example image or sketch and a little sample data. No code is needed.
|
forgegraph-0.0.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Steven Kaye
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: forgegraph
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Low-labor, consistent, high-quality graphs from many data sources, for people and AI agents. Early development.
|
|
5
|
+
Project-URL: Repository, https://github.com/sskaye/forgegraph
|
|
6
|
+
Author: Steven Kaye
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: src/forgegraph/themes/fonts/OFL-SourceSans3.md
|
|
10
|
+
Classifier: Development Status :: 1 - Planning
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
17
|
+
Requires-Python: >=3.12
|
|
18
|
+
Requires-Dist: matplotlib>=3.9
|
|
19
|
+
Requires-Dist: openpyxl>=3.1
|
|
20
|
+
Requires-Dist: pandas>=2.2
|
|
21
|
+
Requires-Dist: pydantic>=2.7
|
|
22
|
+
Requires-Dist: ruamel-yaml>=0.18
|
|
23
|
+
Requires-Dist: typer>=0.12
|
|
24
|
+
Requires-Dist: xlrd>=2.0
|
|
25
|
+
Provides-Extra: sql
|
|
26
|
+
Requires-Dist: psycopg[binary]>=3.1; extra == 'sql'
|
|
27
|
+
Requires-Dist: sqlalchemy>=2.0; extra == 'sql'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# ForgeGraph
|
|
31
|
+
|
|
32
|
+
Low-labor, fast and consistent construction of high-quality graphs from a variety of data sources, for people and AI agents alike.
|
|
33
|
+
|
|
34
|
+
ForgeGraph is a Python library, CLI and agent skill that turns a short declarative **GraphSpec** into a graph styled to a house standard, set once by a theme and a format.
|
|
35
|
+
|
|
36
|
+
**Status:** early development. Nothing usable yet.
|
|
37
|
+
|
|
38
|
+
- [Initial specification](docs/initial%20specification.md)
|
|
39
|
+
- [Architecture](docs/architecture.md)
|
|
40
|
+
- [Build plan](docs/build-plan.md)
|
|
41
|
+
|
|
42
|
+
Licence: [MIT](LICENSE). Graphs and other output you make with ForgeGraph are yours; no attribution or licence terms apply to them. See [TRADEMARKS.md](TRADEMARKS.md) for use of the name.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# ForgeGraph
|
|
2
|
+
|
|
3
|
+
Low-labor, fast and consistent construction of high-quality graphs from a variety of data sources, for people and AI agents alike.
|
|
4
|
+
|
|
5
|
+
ForgeGraph is a Python library, CLI and agent skill that turns a short declarative **GraphSpec** into a graph styled to a house standard, set once by a theme and a format.
|
|
6
|
+
|
|
7
|
+
**Status:** early development. Nothing usable yet.
|
|
8
|
+
|
|
9
|
+
- [Initial specification](docs/initial%20specification.md)
|
|
10
|
+
- [Architecture](docs/architecture.md)
|
|
11
|
+
- [Build plan](docs/build-plan.md)
|
|
12
|
+
|
|
13
|
+
Licence: [MIT](LICENSE). Graphs and other output you make with ForgeGraph are yours; no attribution or licence terms apply to them. See [TRADEMARKS.md](TRADEMARKS.md) for use of the name.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Trademarks
|
|
2
|
+
|
|
3
|
+
"ForgeGraph" is a trademark of Steven Kaye.
|
|
4
|
+
|
|
5
|
+
The code is MIT-licensed, but the licence covers the code, not the name. You are welcome to:
|
|
6
|
+
|
|
7
|
+
- say that your product or fork is "based on ForgeGraph" or "uses ForgeGraph";
|
|
8
|
+
- refer to ForgeGraph by name when describing compatibility or discussing it.
|
|
9
|
+
|
|
10
|
+
Please don't use "ForgeGraph", or a confusingly similar name, as the name of a fork, product, package or service. Give your project its own name.
|
|
11
|
+
|
|
12
|
+
Bundled fonts carry their own licences and trademarks: "Source" is a trademark of Adobe (see `src/forgegraph/themes/fonts/OFL-SourceSans3.md`).
|