You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Originally disabled to land the initial config without manual cleanup, but
the violations are all fixable and the rules catch real Markdown smell.
- MD040 (require code fence language): 0 violations after auto-fix
- MD031 (blanks around fences) / MD032 (blanks around lists): fixed by
--fix in docs/introduction.md, docs/sqlalchemy.md, CLAUDE.md
- MD034 (no bare URLs): wrapped 4 footer URLs in README.md with <...>
Remaining intentionally-disabled rules:
- MD013 (line length): docs have long URLs and code lines
- MD014 ($ command without output): convention in docs/testing.md, README
- MD024 siblings_only: cursor docs reuse subsection names per cursor
- MD041 (first line H1): MyST `(label)=` ref targets precede the first heading
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-**Standalone functions** for unit tests of pure logic (converters, parsers, utils): `def test_to_struct_json_formats(input_value, expected):`
54
56
- Test file naming mirrors source: `pyathena/parser.py` → `tests/pyathena/test_parser.py`
55
57
-**Fixtures**: Cursor/engine fixtures are defined in `conftest.py` and injected by name (e.g., `cursor`, `engine`, `async_cursor`). Use `indirect=True` parametrization to pass connection options:
-**Parametrize** with `@pytest.mark.parametrize(("input", "expected"), [...])` for data-driven tests
62
66
-**Integration tests** (need AWS) use cursor/engine fixtures with real Athena queries; **unit tests** (no AWS) call functions directly with test data
63
67
64
68
### Markdown Lint
65
69
66
70
`docs/**/*.md` and project-root `*.md` files are linted with [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2). The config lives at `.markdownlint-cli2.jsonc`. CI runs lint + Sphinx build on PRs that touch docs (`.github/workflows/docs-lint.yaml`).
67
71
68
-
`markdownlint-cli2` is pinned in `.mise.toml` (along with `node`), so [`mise`](https://mise.jdx.dev/) installs the exact version used in CI. Run locally:
72
+
`markdownlint-cli2` is pinned in `.mise.toml`, so [`mise`](https://mise.jdx.dev/) installs the exact version used in CI. Run locally:
69
73
70
74
```bash
71
-
mise install # one-time: installs node + markdownlint-cli2
75
+
mise install # one-time: installs markdownlint-cli2
72
76
make docs-lint # check
73
77
make docs-lint-fix # auto-fix what's possible
74
78
```
@@ -88,6 +92,7 @@ Each cursor type lives in its own subpackage (`pandas/`, `arrow/`, `polars/`, `s
88
92
### Filesystem (fsspec) Compatibility
89
93
90
94
`pyathena/filesystem/s3.py` implements fsspec's `AbstractFileSystem`. When modifying:
95
+
91
96
- Match `s3fs` library behavior where possible (users migrate from it)
92
97
- Use `delimiter="/"` in S3 API calls to minimize requests
0 commit comments