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.
Files changed (37) hide show
  1. forgegraph-0.0.1/.github/workflows/ci.yml +63 -0
  2. forgegraph-0.0.1/.github/workflows/publish.yml +17 -0
  3. forgegraph-0.0.1/.gitignore +20 -0
  4. forgegraph-0.0.1/.pre-commit-config.yaml +29 -0
  5. forgegraph-0.0.1/CONTRIBUTING.md +15 -0
  6. forgegraph-0.0.1/LICENSE +21 -0
  7. forgegraph-0.0.1/PKG-INFO +42 -0
  8. forgegraph-0.0.1/README.md +13 -0
  9. forgegraph-0.0.1/TRADEMARKS.md +12 -0
  10. forgegraph-0.0.1/docs/architecture.md +640 -0
  11. forgegraph-0.0.1/docs/build-plan.md +406 -0
  12. forgegraph-0.0.1/docs/decisions.md +7 -0
  13. forgegraph-0.0.1/docs/initial specification.md +119 -0
  14. forgegraph-0.0.1/pyproject.toml +72 -0
  15. forgegraph-0.0.1/scripts/check_denylist.py +77 -0
  16. forgegraph-0.0.1/src/forgegraph/__init__.py +10 -0
  17. forgegraph-0.0.1/src/forgegraph/catalog/__init__.py +1 -0
  18. forgegraph-0.0.1/src/forgegraph/charts/__init__.py +1 -0
  19. forgegraph-0.0.1/src/forgegraph/cli/__init__.py +22 -0
  20. forgegraph-0.0.1/src/forgegraph/data/__init__.py +1 -0
  21. forgegraph-0.0.1/src/forgegraph/formats/__init__.py +1 -0
  22. forgegraph-0.0.1/src/forgegraph/jobs/__init__.py +1 -0
  23. forgegraph-0.0.1/src/forgegraph/layers/__init__.py +1 -0
  24. forgegraph-0.0.1/src/forgegraph/layout/__init__.py +1 -0
  25. forgegraph-0.0.1/src/forgegraph/packs/__init__.py +1 -0
  26. forgegraph-0.0.1/src/forgegraph/render/__init__.py +1 -0
  27. forgegraph-0.0.1/src/forgegraph/skill/__init__.py +1 -0
  28. forgegraph-0.0.1/src/forgegraph/spec/__init__.py +3 -0
  29. forgegraph-0.0.1/src/forgegraph/themes/__init__.py +21 -0
  30. forgegraph-0.0.1/src/forgegraph/themes/fonts/OFL-SourceSans3.md +93 -0
  31. forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Bold.ttf +0 -0
  32. forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-It.ttf +0 -0
  33. forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Regular.ttf +0 -0
  34. forgegraph-0.0.1/src/forgegraph/themes/fonts/SourceSans3-Semibold.ttf +0 -0
  35. forgegraph-0.0.1/tests/test_denylist.py +48 -0
  36. forgegraph-0.0.1/tests/test_smoke.py +51 -0
  37. 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.
@@ -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`).