gamesheet-sdk-py 0.0.1a1__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 (29) hide show
  1. gamesheet_sdk_py-0.0.1a1/.gitignore +104 -0
  2. gamesheet_sdk_py-0.0.1a1/LICENSE +21 -0
  3. gamesheet_sdk_py-0.0.1a1/PKG-INFO +184 -0
  4. gamesheet_sdk_py-0.0.1a1/README.md +101 -0
  5. gamesheet_sdk_py-0.0.1a1/docs/_static/.gitkeep +0 -0
  6. gamesheet_sdk_py-0.0.1a1/docs/_templates/.gitkeep +0 -0
  7. gamesheet_sdk_py-0.0.1a1/docs/conf.py +143 -0
  8. gamesheet_sdk_py-0.0.1a1/docs/explanation/diataxis.md +48 -0
  9. gamesheet_sdk_py-0.0.1a1/docs/explanation/index.md +30 -0
  10. gamesheet_sdk_py-0.0.1a1/docs/explanation/why-webui-automation.md +110 -0
  11. gamesheet_sdk_py-0.0.1a1/docs/how-to/cut-a-release.md +79 -0
  12. gamesheet_sdk_py-0.0.1a1/docs/how-to/index.md +30 -0
  13. gamesheet_sdk_py-0.0.1a1/docs/how-to/install-in-github-actions.md +82 -0
  14. gamesheet_sdk_py-0.0.1a1/docs/index.md +72 -0
  15. gamesheet_sdk_py-0.0.1a1/docs/reference/api.md +34 -0
  16. gamesheet_sdk_py-0.0.1a1/docs/reference/cli.md +18 -0
  17. gamesheet_sdk_py-0.0.1a1/docs/reference/index.md +36 -0
  18. gamesheet_sdk_py-0.0.1a1/docs/reference/supported-configurations.md +112 -0
  19. gamesheet_sdk_py-0.0.1a1/docs/tutorials/getting-started.md +128 -0
  20. gamesheet_sdk_py-0.0.1a1/docs/tutorials/index.md +31 -0
  21. gamesheet_sdk_py-0.0.1a1/pyproject.toml +305 -0
  22. gamesheet_sdk_py-0.0.1a1/src/gamesheet_sdk/__init__.py +18 -0
  23. gamesheet_sdk_py-0.0.1a1/src/gamesheet_sdk/_version.py +24 -0
  24. gamesheet_sdk_py-0.0.1a1/src/gamesheet_sdk/cli.py +31 -0
  25. gamesheet_sdk_py-0.0.1a1/src/gamesheet_sdk/py.typed +0 -0
  26. gamesheet_sdk_py-0.0.1a1/tests/__init__.py +0 -0
  27. gamesheet_sdk_py-0.0.1a1/tests/cassettes/.gitkeep +0 -0
  28. gamesheet_sdk_py-0.0.1a1/tests/conftest.py +45 -0
  29. gamesheet_sdk_py-0.0.1a1/tests/test_smoke.py +13 -0
@@ -0,0 +1,104 @@
1
+ # ---- Byte-compiled / cached ----
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+
7
+ # ---- Distribution / packaging ----
8
+ .Python
9
+ build/
10
+ develop-eggs/
11
+ dist/
12
+ downloads/
13
+ eggs/
14
+ .eggs/
15
+ lib/
16
+ lib64/
17
+ parts/
18
+ sdist/
19
+ var/
20
+ wheels/
21
+ share/python-wheels/
22
+ *.egg-info/
23
+ .installed.cfg
24
+ *.egg
25
+ MANIFEST
26
+
27
+ # ---- PyInstaller ----
28
+ *.manifest
29
+ *.spec
30
+
31
+ # ---- Installer logs ----
32
+ pip-log.txt
33
+ pip-delete-this-directory.txt
34
+
35
+ # ---- Unit test / coverage ----
36
+ htmlcov/
37
+ .tox/
38
+ .nox/
39
+ .coverage
40
+ .coverage.*
41
+ .cache
42
+ nosetests.xml
43
+ coverage.xml
44
+ *.cover
45
+ *.py,cover
46
+ .hypothesis/
47
+ .pytest_cache/
48
+ cover/
49
+
50
+ # ---- Type checkers / linters ----
51
+ .mypy_cache/
52
+ .dmypy.json
53
+ dmypy.json
54
+ .pyre/
55
+ .pytype/
56
+ .ruff_cache/
57
+
58
+ # ---- Virtual environments ----
59
+ .env
60
+ .envrc
61
+ .venv
62
+ env/
63
+ venv/
64
+ ENV/
65
+ env.bak/
66
+ venv.bak/
67
+
68
+ # ---- Tooling: Poetry / Pipenv / pdm / Hatch ----
69
+ poetry.lock
70
+ Pipfile.lock
71
+ .pdm.toml
72
+ .pdm-python
73
+ .pdm-build/
74
+ .hatch/
75
+
76
+ # ---- Jupyter ----
77
+ .ipynb_checkpoints
78
+ profile_default/
79
+ ipython_config.py
80
+
81
+ # ---- Playwright (browser binaries handled separately) ----
82
+ .playwright/
83
+ playwright-report/
84
+ test-results/
85
+
86
+ # ---- IDE / editor ----
87
+ .idea/
88
+ .vscode/
89
+ *.swp
90
+ *.swo
91
+ *~
92
+ .DS_Store
93
+
94
+ # ---- Sphinx documentation ----
95
+ docs/_build/
96
+ _autosummary/
97
+
98
+ # ---- hatch-vcs generated version file ----
99
+ src/gamesheet_sdk/_version.py
100
+
101
+ # ---- Local scratch ----
102
+ *.log
103
+ .local/
104
+ secrets.toml
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 bdperkin
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,184 @@
1
+ Metadata-Version: 2.4
2
+ Name: gamesheet-sdk-py
3
+ Version: 0.0.1a1
4
+ Summary: Unofficial Python SDK and CLI for the GameSheet Inc. platform — automates WebUI procedures where a native API is absent.
5
+ Project-URL: Homepage, https://github.com/bdperkin/gamesheet-sdk-py
6
+ Project-URL: Repository, https://github.com/bdperkin/gamesheet-sdk-py
7
+ Project-URL: Issues, https://github.com/bdperkin/gamesheet-sdk-py/issues
8
+ Project-URL: Documentation, https://github.com/bdperkin/gamesheet-sdk-py#readme
9
+ Author: bdperkin
10
+ License: MIT License
11
+
12
+ Copyright (c) 2026 bdperkin
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+ License-File: LICENSE
32
+ Keywords: automation,cli,gamesheet,hockey,scraper,sdk,sports
33
+ Classifier: Development Status :: 3 - Alpha
34
+ Classifier: Intended Audience :: Developers
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Operating System :: OS Independent
37
+ Classifier: Programming Language :: Python :: 3
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Programming Language :: Python :: 3.14
42
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
+ Classifier: Typing :: Typed
44
+ Requires-Python: <3.15,>=3.11
45
+ Requires-Dist: beautifulsoup4>=4.12
46
+ Requires-Dist: click>=8.1
47
+ Requires-Dist: lxml>=5.2
48
+ Requires-Dist: playwright>=1.45
49
+ Requires-Dist: pydantic>=2.7
50
+ Requires-Dist: requests>=2.32
51
+ Provides-Extra: dev
52
+ Requires-Dist: bandit[toml]>=1.7; extra == 'dev'
53
+ Requires-Dist: black>=26.3; extra == 'dev'
54
+ Requires-Dist: build>=1.2; extra == 'dev'
55
+ Requires-Dist: codespell>=2.4; extra == 'dev'
56
+ Requires-Dist: editorconfig-checker>=3.6; extra == 'dev'
57
+ Requires-Dist: flake8-pyproject>=1.2; extra == 'dev'
58
+ Requires-Dist: flake8>=7.1; extra == 'dev'
59
+ Requires-Dist: isort>=5.13; extra == 'dev'
60
+ Requires-Dist: mdformat-gfm>=0.4; extra == 'dev'
61
+ Requires-Dist: mdformat>=0.7; extra == 'dev'
62
+ Requires-Dist: mypy>=1.10; extra == 'dev'
63
+ Requires-Dist: pre-commit>=3.7; extra == 'dev'
64
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
65
+ Requires-Dist: pytest-playwright>=0.5; extra == 'dev'
66
+ Requires-Dist: pytest-recording>=0.13; extra == 'dev'
67
+ Requires-Dist: pytest>=8.2; extra == 'dev'
68
+ Requires-Dist: pyupgrade>=3.19; extra == 'dev'
69
+ Requires-Dist: tox>=4.21; extra == 'dev'
70
+ Requires-Dist: types-requests>=2.32; extra == 'dev'
71
+ Requires-Dist: validate-pyproject>=0.25; extra == 'dev'
72
+ Requires-Dist: yamllint>=1.38; extra == 'dev'
73
+ Provides-Extra: docs
74
+ Requires-Dist: furo>=2024.5; extra == 'docs'
75
+ Requires-Dist: myst-parser[linkify]>=3.0; extra == 'docs'
76
+ Requires-Dist: sphinx-argparse>=0.4; extra == 'docs'
77
+ Requires-Dist: sphinx-autobuild>=2024.4; extra == 'docs'
78
+ Requires-Dist: sphinx-copybutton>=0.5; extra == 'docs'
79
+ Requires-Dist: sphinx-design>=0.5; extra == 'docs'
80
+ Requires-Dist: sphinx-lint>=0.9; extra == 'docs'
81
+ Requires-Dist: sphinx>=7.3; extra == 'docs'
82
+ Description-Content-Type: text/markdown
83
+
84
+ # gamesheet-sdk-py
85
+
86
+ > **Unofficial** Python SDK and command-line interface for the
87
+ > [GameSheet Inc.](https://gamesheet.com) platform.
88
+
89
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
90
+ [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
91
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/bdperkin/gamesheet-sdk-py/main.svg)](https://results.pre-commit.ci/latest/github/bdperkin/gamesheet-sdk-py/main)
92
+
93
+ ## ⚠️ Disclaimer
94
+
95
+ This project is **not affiliated with, endorsed by, or sponsored by GameSheet Inc.**
96
+ GameSheet Inc. does not publish a public REST/GraphQL API for the operations this
97
+ SDK covers. Where a native API is absent, this library **automates the GameSheet
98
+ WebUI** (using a combination of HTTP requests, HTML parsing, and headless-browser
99
+ automation) in order to perform routine tasks programmatically.
100
+
101
+ Because this approach depends on the structure of a third-party web interface,
102
+ **it may break without warning** whenever GameSheet ships UI changes. Always
103
+ review the project's CHANGELOG before upgrading in production.
104
+
105
+ Use of this software must comply with the GameSheet Inc. Terms of Service. You
106
+ are responsible for any automation you perform against accounts you control.
107
+
108
+ ## Features
109
+
110
+ - Pythonic wrappers over common GameSheet WebUI workflows
111
+ - A `gamesheet-sdk-py` command-line interface for one-off scripting and shell pipelines
112
+ - Typed (PEP 561) — ships a `py.typed` marker for static analysis
113
+ - First-class support for headless automation via [Playwright](https://playwright.dev/python/)
114
+
115
+ ## Installation
116
+
117
+ ```bash
118
+ pip install gamesheet-sdk-py
119
+
120
+ # Playwright browser binaries are required for headless WebUI flows:
121
+ python -m playwright install chromium
122
+ ```
123
+
124
+ ### From source
125
+
126
+ ```bash
127
+ git clone https://github.com/bdperkin/gamesheet-sdk-py.git
128
+ cd gamesheet-sdk-py
129
+ pip install -e ".[dev]"
130
+ python -m playwright install chromium
131
+ ```
132
+
133
+ ## Quick start
134
+
135
+ ```python
136
+ from gamesheet_sdk import __version__
137
+
138
+ print(__version__)
139
+ ```
140
+
141
+ ```bash
142
+ gamesheet-sdk-py --help
143
+ ```
144
+
145
+ ## Project layout
146
+
147
+ ```
148
+ gamesheet-sdk-py/
149
+ ├── src/gamesheet_sdk/ # library source
150
+ ├── tests/ # pytest suite
151
+ ├── docs/ # additional documentation
152
+ ├── pyproject.toml # PEP 621 metadata + Hatch build
153
+ ├── .pre-commit-config.yaml # hooks run locally and on pre-commit.ci
154
+ └── LICENSE # MIT
155
+ ```
156
+
157
+ ## Development
158
+
159
+ ```bash
160
+ # 1. Create an isolated environment
161
+ python -m venv .venv && source .venv/bin/activate
162
+
163
+ # 2. Install with dev extras
164
+ pip install -e ".[dev]"
165
+
166
+ # 3. Install hook scripts
167
+ pre-commit install
168
+
169
+ # 4. Run the test suite
170
+ pytest
171
+
172
+ # 5. Run all hooks against the repo
173
+ pre-commit run --all-files
174
+ ```
175
+
176
+ ## Contributing
177
+
178
+ Issues and pull requests are welcome. Please run `pre-commit run --all-files`
179
+ and `pytest` before opening a PR.
180
+
181
+ ## License
182
+
183
+ Distributed under the terms of the [MIT License](LICENSE).
184
+ © 2026 bdperkin.
@@ -0,0 +1,101 @@
1
+ # gamesheet-sdk-py
2
+
3
+ > **Unofficial** Python SDK and command-line interface for the
4
+ > [GameSheet Inc.](https://gamesheet.com) platform.
5
+
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+ [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
8
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/bdperkin/gamesheet-sdk-py/main.svg)](https://results.pre-commit.ci/latest/github/bdperkin/gamesheet-sdk-py/main)
9
+
10
+ ## ⚠️ Disclaimer
11
+
12
+ This project is **not affiliated with, endorsed by, or sponsored by GameSheet Inc.**
13
+ GameSheet Inc. does not publish a public REST/GraphQL API for the operations this
14
+ SDK covers. Where a native API is absent, this library **automates the GameSheet
15
+ WebUI** (using a combination of HTTP requests, HTML parsing, and headless-browser
16
+ automation) in order to perform routine tasks programmatically.
17
+
18
+ Because this approach depends on the structure of a third-party web interface,
19
+ **it may break without warning** whenever GameSheet ships UI changes. Always
20
+ review the project's CHANGELOG before upgrading in production.
21
+
22
+ Use of this software must comply with the GameSheet Inc. Terms of Service. You
23
+ are responsible for any automation you perform against accounts you control.
24
+
25
+ ## Features
26
+
27
+ - Pythonic wrappers over common GameSheet WebUI workflows
28
+ - A `gamesheet-sdk-py` command-line interface for one-off scripting and shell pipelines
29
+ - Typed (PEP 561) — ships a `py.typed` marker for static analysis
30
+ - First-class support for headless automation via [Playwright](https://playwright.dev/python/)
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ pip install gamesheet-sdk-py
36
+
37
+ # Playwright browser binaries are required for headless WebUI flows:
38
+ python -m playwright install chromium
39
+ ```
40
+
41
+ ### From source
42
+
43
+ ```bash
44
+ git clone https://github.com/bdperkin/gamesheet-sdk-py.git
45
+ cd gamesheet-sdk-py
46
+ pip install -e ".[dev]"
47
+ python -m playwright install chromium
48
+ ```
49
+
50
+ ## Quick start
51
+
52
+ ```python
53
+ from gamesheet_sdk import __version__
54
+
55
+ print(__version__)
56
+ ```
57
+
58
+ ```bash
59
+ gamesheet-sdk-py --help
60
+ ```
61
+
62
+ ## Project layout
63
+
64
+ ```
65
+ gamesheet-sdk-py/
66
+ ├── src/gamesheet_sdk/ # library source
67
+ ├── tests/ # pytest suite
68
+ ├── docs/ # additional documentation
69
+ ├── pyproject.toml # PEP 621 metadata + Hatch build
70
+ ├── .pre-commit-config.yaml # hooks run locally and on pre-commit.ci
71
+ └── LICENSE # MIT
72
+ ```
73
+
74
+ ## Development
75
+
76
+ ```bash
77
+ # 1. Create an isolated environment
78
+ python -m venv .venv && source .venv/bin/activate
79
+
80
+ # 2. Install with dev extras
81
+ pip install -e ".[dev]"
82
+
83
+ # 3. Install hook scripts
84
+ pre-commit install
85
+
86
+ # 4. Run the test suite
87
+ pytest
88
+
89
+ # 5. Run all hooks against the repo
90
+ pre-commit run --all-files
91
+ ```
92
+
93
+ ## Contributing
94
+
95
+ Issues and pull requests are welcome. Please run `pre-commit run --all-files`
96
+ and `pytest` before opening a PR.
97
+
98
+ ## License
99
+
100
+ Distributed under the terms of the [MIT License](LICENSE).
101
+ © 2026 bdperkin.
File without changes
File without changes
@@ -0,0 +1,143 @@
1
+ """Sphinx configuration for the gamesheet-sdk-py documentation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from importlib import metadata
6
+
7
+ # -- Project information -----------------------------------------------------
8
+ project = "gamesheet-sdk-py"
9
+ author = "bdperkin"
10
+ copyright = f"2026, {author}"
11
+ release = metadata.version("gamesheet-sdk-py")
12
+ version = ".".join(release.split(".")[:2])
13
+
14
+ # -- General configuration ---------------------------------------------------
15
+ extensions = [
16
+ # API documentation
17
+ "sphinx.ext.autodoc",
18
+ "sphinx.ext.autosummary",
19
+ "sphinx.ext.napoleon",
20
+ "sphinx.ext.viewcode",
21
+ # Cross-referencing
22
+ "sphinx.ext.intersphinx",
23
+ "sphinx.ext.autosectionlabel",
24
+ # Quality
25
+ "sphinx.ext.doctest",
26
+ "sphinx.ext.coverage",
27
+ "sphinx.ext.todo",
28
+ "sphinx.ext.duration",
29
+ # Markdown + UI
30
+ "myst_parser",
31
+ "sphinx_copybutton",
32
+ "sphinx_design",
33
+ # CLI documentation
34
+ "sphinxarg.ext",
35
+ ]
36
+
37
+ source_suffix = {
38
+ ".md": "markdown",
39
+ ".rst": "restructuredtext",
40
+ }
41
+ master_doc = "index"
42
+ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "_autosummary"]
43
+ templates_path = ["_templates"]
44
+
45
+ # -- Automatic API documentation --------------------------------------------
46
+ autosummary_generate = True
47
+ autodoc_default_options = {
48
+ "members": True,
49
+ "undoc-members": True,
50
+ "show-inheritance": True,
51
+ "member-order": "bysource",
52
+ }
53
+ autodoc_typehints = "description"
54
+ autodoc_typehints_description_target = "documented_params"
55
+ autoclass_content = "both"
56
+
57
+ # -- Napoleon (Google / NumPy docstrings) -----------------------------------
58
+ napoleon_google_docstring = True
59
+ napoleon_numpy_docstring = True
60
+ napoleon_include_init_with_doc = False
61
+ napoleon_use_admonition_for_examples = True
62
+ napoleon_use_admonition_for_notes = True
63
+ napoleon_use_rtype = False
64
+
65
+ # -- Cross-referencing ------------------------------------------------------
66
+ intersphinx_mapping = {
67
+ "python": ("https://docs.python.org/3", None),
68
+ "requests": ("https://requests.readthedocs.io/en/latest/", None),
69
+ "bs4": ("https://www.crummy.com/software/BeautifulSoup/bs4/doc/", None),
70
+ "pydantic": ("https://docs.pydantic.dev/latest/", None),
71
+ "click": ("https://click.palletsprojects.com/en/stable/", None),
72
+ }
73
+ autosectionlabel_prefix_document = True
74
+ autosectionlabel_maxdepth = 3
75
+
76
+ # -- MyST (Markdown) --------------------------------------------------------
77
+ myst_enable_extensions = [
78
+ "colon_fence",
79
+ "deflist",
80
+ "fieldlist",
81
+ "tasklist",
82
+ "linkify",
83
+ "substitution",
84
+ "attrs_inline",
85
+ "attrs_block",
86
+ ]
87
+ myst_heading_anchors = 3
88
+
89
+ # -- TODOs ------------------------------------------------------------------
90
+ todo_include_todos = True
91
+
92
+ # -- HTML output (Furo theme) -----------------------------------------------
93
+ html_theme = "furo"
94
+ html_title = f"{project} {release}"
95
+ html_static_path = ["_static"]
96
+ html_theme_options = {
97
+ "source_repository": "https://github.com/bdperkin/gamesheet-sdk-py/",
98
+ "source_branch": "main",
99
+ "source_directory": "docs/",
100
+ "navigation_with_keys": True,
101
+ "top_of_page_buttons": ["view", "edit"],
102
+ }
103
+ html_show_sourcelink = True
104
+ html_copy_source = True
105
+
106
+ # -- EPUB output ------------------------------------------------------------
107
+ epub_show_urls = "footnote"
108
+ epub_basename = project
109
+
110
+ # -- Man-page output --------------------------------------------------------
111
+ man_pages = [
112
+ (
113
+ "cli",
114
+ "gamesheet-sdk-py",
115
+ "Unofficial CLI for the GameSheet Inc. platform",
116
+ [author],
117
+ 1,
118
+ ),
119
+ ]
120
+
121
+ # -- LaTeX / PDF output -----------------------------------------------------
122
+ latex_engine = "pdflatex"
123
+ latex_documents = [
124
+ (
125
+ master_doc,
126
+ f"{project}.tex",
127
+ f"{project} Documentation",
128
+ author,
129
+ "manual",
130
+ ),
131
+ ]
132
+ latex_elements = {
133
+ "papersize": "letterpaper",
134
+ "pointsize": "11pt",
135
+ }
136
+
137
+ # -- Link-check options -----------------------------------------------------
138
+ linkcheck_retries = 2
139
+ linkcheck_timeout = 15
140
+ linkcheck_ignore = [
141
+ # Anchors on third-party sites we don't control:
142
+ r"^https?://github\.com/.*#",
143
+ ]
@@ -0,0 +1,48 @@
1
+ # Why these docs are organized into four quadrants
2
+
3
+ This project's documentation is structured following the
4
+ [Diátaxis framework](https://diataxis.fr/), authored by Daniele Procida.
5
+
6
+ Diátaxis observes that effective technical documentation serves four
7
+ *distinct* user needs that cannot be merged without harm:
8
+
9
+ | | **Practical steps** | **Theoretical knowledge** |
10
+ | -------------------- | ------------------- | ------------------------- |
11
+ | **Study (learning)** | Tutorials | Explanation |
12
+ | **Work (doing)** | How-to guides | Reference |
13
+
14
+ When you sit down to write something for these docs, the first question is
15
+ *which of the four quadrants does it belong in?* — and if the answer is
16
+ "more than one," that's usually a signal that the content needs to be split.
17
+
18
+ ## Why this matters
19
+
20
+ When a single page tries to teach, demonstrate, document, and explain all at
21
+ once, it does each of those jobs badly. A user who came for a quick lookup
22
+ has to wade through pedagogy; a learner gets dropped into reference material
23
+ before they have context.
24
+
25
+ Splitting by *user need* keeps each page focused. The cross-references
26
+ between quadrants then carry the cognitive load instead of the prose.
27
+
28
+ ## How to choose a quadrant
29
+
30
+ Ask yourself, *about the reader who will land on this page:*
31
+
32
+ - Are they **trying to learn the SDK** by following along? →
33
+ {doc}`../tutorials/index`
34
+ - Do they have **a specific task in mind** and need a recipe? →
35
+ {doc}`../how-to/index`
36
+ - Do they need to **look something up** while doing their work? →
37
+ {doc}`../reference/index`
38
+ - Do they want **deeper understanding** of why something is the way it is?
39
+ → this section ({doc}`index`)
40
+
41
+ If two of those are tied, the content probably needs to be two pages, one
42
+ in each quadrant, cross-linking to the other.
43
+
44
+ ## Further reading
45
+
46
+ - [diataxis.fr](https://diataxis.fr/) — the canonical introduction
47
+ - [The four kinds of documentation, and why](https://documentation.divio.com/)
48
+ — an earlier write-up by the same author
@@ -0,0 +1,30 @@
1
+ # Explanation
2
+
3
+ > Explanation, or discussion, **clarifies and illuminates a particular topic**.
4
+ > It broadens the documentation's coverage of a topic.
5
+ >
6
+ > — [diataxis.fr/explanation](https://diataxis.fr/explanation/)
7
+
8
+ Explanation is **understanding-oriented**. It exists to broaden context — why
9
+ choices were made, how the system behaves under the hood, what assumptions
10
+ constrain the design. It does not give step-by-step instructions and it does
11
+ not list APIs.
12
+
13
+ ## Authoring guidance
14
+
15
+ When adding an explanation to this section:
16
+
17
+ - **Free yourself from a concrete task.** Discuss the topic in its own right.
18
+ - **Connect ideas.** Cross-reference {doc}`../reference/index` for *what*
19
+ and {doc}`../how-to/index` for *how*.
20
+ - **Acknowledge trade-offs.** Explanation is the place to say "we don't do
21
+ X because Y."
22
+ - **Welcome multiple perspectives.** Unlike reference, explanation can hold
23
+ competing views and let the reader weigh them.
24
+
25
+ ```{toctree}
26
+ :maxdepth: 1
27
+
28
+ why-webui-automation
29
+ diataxis
30
+ ```