meltano-state-backend-snowflake 0.1.0__tar.gz → 0.2.0__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 (20) hide show
  1. meltano_state_backend_snowflake-0.2.0/.github/dependabot.yml +25 -0
  2. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.github/workflows/release.yaml +4 -4
  3. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.github/workflows/test.yaml +15 -17
  4. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.pre-commit-config.yaml +16 -9
  5. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/PKG-INFO +24 -13
  6. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/README.md +17 -9
  7. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/pyproject.toml +58 -15
  8. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/src/meltano_state_backend_snowflake/backend.py +25 -48
  9. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/tests/test_backend.py +19 -43
  10. meltano_state_backend_snowflake-0.2.0/uv.lock +1953 -0
  11. meltano_state_backend_snowflake-0.1.0/uv.lock +0 -2581
  12. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.github/CODEOWNERS +0 -0
  13. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.github/semantic.yml +0 -0
  14. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.gitignore +0 -0
  15. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/.python-version +0 -0
  16. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/LICENSE +0 -0
  17. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/fixtures/project/.gitignore +0 -0
  18. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/fixtures/project/meltano.yml +0 -0
  19. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/src/meltano_state_backend_snowflake/__init__.py +0 -0
  20. {meltano_state_backend_snowflake-0.1.0 → meltano_state_backend_snowflake-0.2.0}/src/meltano_state_backend_snowflake/py.typed +0 -0
@@ -0,0 +1,25 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: "/"
5
+ schedule:
6
+ interval: quarterly
7
+ groups:
8
+ actions:
9
+ patterns:
10
+ - "*"
11
+ - package-ecosystem: uv
12
+ directory: "/"
13
+ schedule:
14
+ interval: monthly
15
+ allow:
16
+ - dependency-type: all
17
+ versioning-strategy: lockfile-only
18
+ commit-message:
19
+ prefix: "fix: "
20
+ prefix-development: "chore: "
21
+ groups:
22
+ lockfile-dev:
23
+ dependency-type: "development"
24
+ lockfile-runtime:
25
+ dependency-type: "production"
@@ -15,8 +15,8 @@ jobs:
15
15
  package_name: ${{ steps.baipp.outputs.package_name }}
16
16
  package_version: ${{ steps.baipp.outputs.package_version }}
17
17
  steps:
18
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
19
- - uses: hynek/build-and-inspect-python-package@c52c3a4710070b50470d903818a7b25115dcd076 # v2.13.0
18
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
19
+ - uses: hynek/build-and-inspect-python-package@efb823f52190ad02594531168b7a2d5790e66516 # v2.14.0
20
20
  id: baipp
21
21
 
22
22
  publish:
@@ -29,8 +29,8 @@ jobs:
29
29
  url: https://pypi.org/project/${{ needs.build.outputs.package_name }}/${{ needs.build.outputs.package_version }}
30
30
 
31
31
  steps:
32
- - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
32
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
33
33
  with:
34
34
  name: Packages
35
35
  path: dist
36
- - uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
36
+ - uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
@@ -10,7 +10,6 @@ on:
10
10
  - uv.lock
11
11
  - .github/workflows/test.yaml
12
12
  pull_request:
13
- branches: [main]
14
13
  paths:
15
14
  - src/**
16
15
  - tests/**
@@ -34,10 +33,10 @@ jobs:
34
33
  name: Typing
35
34
  runs-on: ubuntu-latest
36
35
  steps:
37
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
38
- - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
36
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
37
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
39
38
  id: setup-python
40
- - uses: astral-sh/setup-uv@bd01e18f51369d5a26f1651c3cb451d3417e3bba # v6.3.1
39
+ - uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
41
40
  - env:
42
41
  UV_PYTHON: ${{ steps.setup-python.outputs.python-version }}
43
42
  run: >
@@ -47,40 +46,39 @@ jobs:
47
46
  tox -e types
48
47
 
49
48
  test:
50
- name: Pytest (Python ${{ matrix.python-version }}, ${{ matrix.os }})
49
+ name: Test
51
50
  runs-on: ${{ matrix.os }}
52
- continue-on-error: ${{ matrix.python-version == '3.13' }}
53
51
  strategy:
54
52
  fail-fast: false
55
53
  matrix:
56
54
  os: ["ubuntu-latest"]
57
55
  python-version:
58
- - "3.9"
59
56
  - "3.10"
60
57
  - "3.11"
61
58
  - "3.12"
62
59
  - "3.13"
60
+ - "3.14"
63
61
  include:
64
- - python-version: "3.13"
62
+ - python-version: "3.14"
65
63
  os: "windows-latest"
66
64
 
67
- - python-version: "3.13"
65
+ - python-version: "3.14"
68
66
  os: "macos-latest"
69
67
 
70
68
  steps:
71
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
72
- - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
69
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
70
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
73
71
  id: setup-python
74
72
  with:
75
73
  python-version: ${{ matrix.python-version }}
76
74
  allow-prereleases: true
77
- - uses: astral-sh/setup-uv@bd01e18f51369d5a26f1651c3cb451d3417e3bba # v6.3.1
75
+ - uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
78
76
  - run: >
79
77
  uvx
80
78
  --with tox-uv
81
79
  --with tox
82
80
  tox -e ${{ matrix.python-version }}
83
- - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
81
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
84
82
  with:
85
83
  include-hidden-files: true
86
84
  name: coverage-data-${{ matrix.os }}-py${{ matrix.python-version }}
@@ -91,13 +89,13 @@ jobs:
91
89
  runs-on: ubuntu-latest
92
90
  needs: test
93
91
  steps:
94
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
95
- - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
96
- - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
92
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
93
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
94
+ - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
97
95
  with:
98
96
  pattern: coverage-data-*
99
97
  merge-multiple: true
100
- - uses: astral-sh/setup-uv@bd01e18f51369d5a26f1651c3cb451d3417e3bba # v6.3.1
98
+ - uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
101
99
  - name: Combine coverage data and generate report
102
100
  run: >
103
101
  uvx
@@ -3,14 +3,14 @@ ci:
3
3
  autofix_prs: true
4
4
  autoupdate_branch: main
5
5
  autoupdate_commit_msg: "chore: Update pre-commit hooks"
6
- autoupdate_schedule: monthly
6
+ autoupdate_schedule: quarterly
7
7
  submodules: false
8
8
  skip:
9
9
  - uv-lock
10
10
 
11
11
  repos:
12
12
  - repo: https://github.com/pre-commit/pre-commit-hooks
13
- rev: v5.0.0
13
+ rev: v6.0.0
14
14
  hooks:
15
15
  - id: check-merge-conflict
16
16
  - id: check-toml
@@ -20,24 +20,31 @@ repos:
20
20
  - id: trailing-whitespace
21
21
 
22
22
  - repo: https://github.com/astral-sh/ruff-pre-commit
23
- rev: v0.12.3
23
+ rev: v0.15.0
24
24
  hooks:
25
25
  - id: ruff-check
26
26
  args: [--fix, --exit-non-zero-on-fix, --show-fixes]
27
27
  - id: ruff-format
28
28
 
29
29
  - repo: https://github.com/python-jsonschema/check-jsonschema
30
- rev: 0.33.2
30
+ rev: 0.36.1
31
31
  hooks:
32
+ - id: check-dependabot
32
33
  - id: check-github-workflows
33
34
  - id: check-meltano
34
- - id: check-renovate
35
- language: python
36
- additional_dependencies:
37
- - pyjson5==1.6.8
38
35
 
39
36
  - repo: https://github.com/astral-sh/uv-pre-commit
40
- rev: "0.7.21"
37
+ rev: "0.9.30"
41
38
  hooks:
42
39
  - id: uv-lock
43
40
  - id: uv-sync
41
+
42
+ - repo: https://github.com/crate-ci/typos
43
+ rev: v1.43.1
44
+ hooks:
45
+ - id: typos
46
+
47
+ - repo: https://github.com/hukkin/mdformat
48
+ rev: 1.0.0 # Use the ref you want to point at
49
+ hooks:
50
+ - id: mdformat
@@ -1,27 +1,33 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meltano-state-backend-snowflake
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Meltano State Backend for Snowflake
5
+ Project-URL: Documentation, https://github.com/meltano/meltano-state-backend-snowflake
6
+ Project-URL: Source, https://github.com/meltano/meltano-state-backend-snowflake
7
+ Project-URL: Issues, https://github.com/meltano/meltano-state-backend-snowflake/issues
5
8
  Author-email: Taylor Murphy <taylor@arch.dev>
6
9
  License-Expression: MIT
7
10
  License-File: LICENSE
8
11
  Classifier: Programming Language :: Python :: 3 :: Only
9
- Classifier: Programming Language :: Python :: 3.9
10
12
  Classifier: Programming Language :: Python :: 3.10
11
13
  Classifier: Programming Language :: Python :: 3.11
12
14
  Classifier: Programming Language :: Python :: 3.12
13
15
  Classifier: Programming Language :: Python :: 3.13
14
- Requires-Python: >=3.9
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Requires-Python: >=3.10
15
18
  Requires-Dist: meltano>=3.7
16
- Requires-Dist: snowflake-connector-python<4,>=3
19
+ Requires-Dist: snowflake-connector-python<5,>=4
17
20
  Description-Content-Type: text/markdown
18
21
 
19
22
  # `meltano-state-backend-snowflake`
20
23
 
24
+ <!-- Display these if and when we publish to PyPI. -->
25
+
26
+ <!--
21
27
  [![PyPI version](https://img.shields.io/pypi/v/meltano-state-backend-snowflake.svg?logo=pypi&logoColor=FFE873&color=blue)](https://pypi.org/project/meltano-state-backend-snowflake)
22
- [![Python versions](https://img.shields.io/pypi/pyversions/meltano-state-backend-snowflake.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/meltano-state-backend-snowflake)
28
+ [![Python versions](https://img.shields.io/pypi/pyversions/meltano-state-backend-snowflake.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/meltano-state-backend-snowflake) -->
23
29
 
24
- This is a [Meltano][meltano] extension that provides a [Snowflake][snowflake] [state backend][state-backend].
30
+ This is a [Meltano] extension that provides a [Snowflake] [state backend][state-backend].
25
31
 
26
32
  ## Installation
27
33
 
@@ -32,14 +38,14 @@ This package needs to be installed in the same Python environment as Meltano.
32
38
  #### With [uv]
33
39
 
34
40
  ```bash
35
- uv tool install --with meltano-state-backend-snowflake meltano
41
+ uv tool install --with git+https://github.com/meltano/meltano-state-backend-snowflake.git meltano
36
42
  ```
37
43
 
38
44
  #### With [pipx]
39
45
 
40
46
  ```bash
41
47
  pipx install meltano
42
- pipx inject meltano 'meltano-state-backend-snowflake
48
+ pipx inject meltano git+https://github.com/meltano/meltano-state-backend-snowflake.git
43
49
  ```
44
50
 
45
51
  ## Configuration
@@ -47,6 +53,7 @@ pipx inject meltano 'meltano-state-backend-snowflake
47
53
  To store state in Snowflake, set the `state_backend.uri` setting to `snowflake://<user>:<password>@<account>/<database>/<schema>`.
48
54
 
49
55
  State will be stored in two tables that Meltano will create automatically:
56
+
50
57
  - `meltano_state` - Stores the actual state data
51
58
  - `meltano_state_locks` - Manages concurrency locks
52
59
 
@@ -88,6 +95,7 @@ state_backend:
88
95
  #### Security Considerations
89
96
 
90
97
  When storing credentials:
98
+
91
99
  - Use environment variables for sensitive values in production
92
100
  - Consider using Snowflake key-pair authentication (future enhancement)
93
101
  - Ensure the user has CREATE TABLE, INSERT, UPDATE, DELETE, and SELECT privileges
@@ -96,8 +104,8 @@ Example using environment variables:
96
104
 
97
105
  ```bash
98
106
  export MELTANO_STATE_BACKEND_SNOWFLAKE_PASSWORD='my_secure_password'
99
- meltano config meltano set state_backend.uri 'snowflake://my_user@my_account/my_database'
100
- meltano config meltano set state_backend.snowflake.warehouse 'my_warehouse'
107
+ meltano config set meltano state_backend.uri 'snowflake://my_user@my_account/my_database'
108
+ meltano config set meltano state_backend.snowflake.warehouse 'my_warehouse'
101
109
  ```
102
110
 
103
111
  ## Development
@@ -113,17 +121,20 @@ uv sync
113
121
  Run all tests, type checks, linting, and coverage:
114
122
 
115
123
  ```bash
116
- uvx -with tox-uv tox run-parallel
124
+ uvx --with tox-uv tox run-parallel
117
125
  ```
118
126
 
119
127
  ### Bump the version
120
128
 
129
+ Using the [GitHub CLI][gh]:
130
+
121
131
  ```bash
122
- uv version --bump <type>
132
+ gh release create v<new-version>
123
133
  ```
124
134
 
135
+ [gh]: https://cli.github.com/
125
136
  [meltano]: https://meltano.com
137
+ [pipx]: https://github.com/pypa/pipx
126
138
  [snowflake]: https://www.snowflake.com/
127
139
  [state-backend]: https://docs.meltano.com/concepts/state_backends
128
- [pipx]: https://github.com/pypa/pipx
129
140
  [uv]: https://docs.astral.sh/uv
@@ -1,9 +1,12 @@
1
1
  # `meltano-state-backend-snowflake`
2
2
 
3
+ <!-- Display these if and when we publish to PyPI. -->
4
+
5
+ <!--
3
6
  [![PyPI version](https://img.shields.io/pypi/v/meltano-state-backend-snowflake.svg?logo=pypi&logoColor=FFE873&color=blue)](https://pypi.org/project/meltano-state-backend-snowflake)
4
- [![Python versions](https://img.shields.io/pypi/pyversions/meltano-state-backend-snowflake.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/meltano-state-backend-snowflake)
7
+ [![Python versions](https://img.shields.io/pypi/pyversions/meltano-state-backend-snowflake.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/meltano-state-backend-snowflake) -->
5
8
 
6
- This is a [Meltano][meltano] extension that provides a [Snowflake][snowflake] [state backend][state-backend].
9
+ This is a [Meltano] extension that provides a [Snowflake] [state backend][state-backend].
7
10
 
8
11
  ## Installation
9
12
 
@@ -14,14 +17,14 @@ This package needs to be installed in the same Python environment as Meltano.
14
17
  #### With [uv]
15
18
 
16
19
  ```bash
17
- uv tool install --with meltano-state-backend-snowflake meltano
20
+ uv tool install --with git+https://github.com/meltano/meltano-state-backend-snowflake.git meltano
18
21
  ```
19
22
 
20
23
  #### With [pipx]
21
24
 
22
25
  ```bash
23
26
  pipx install meltano
24
- pipx inject meltano 'meltano-state-backend-snowflake
27
+ pipx inject meltano git+https://github.com/meltano/meltano-state-backend-snowflake.git
25
28
  ```
26
29
 
27
30
  ## Configuration
@@ -29,6 +32,7 @@ pipx inject meltano 'meltano-state-backend-snowflake
29
32
  To store state in Snowflake, set the `state_backend.uri` setting to `snowflake://<user>:<password>@<account>/<database>/<schema>`.
30
33
 
31
34
  State will be stored in two tables that Meltano will create automatically:
35
+
32
36
  - `meltano_state` - Stores the actual state data
33
37
  - `meltano_state_locks` - Manages concurrency locks
34
38
 
@@ -70,6 +74,7 @@ state_backend:
70
74
  #### Security Considerations
71
75
 
72
76
  When storing credentials:
77
+
73
78
  - Use environment variables for sensitive values in production
74
79
  - Consider using Snowflake key-pair authentication (future enhancement)
75
80
  - Ensure the user has CREATE TABLE, INSERT, UPDATE, DELETE, and SELECT privileges
@@ -78,8 +83,8 @@ Example using environment variables:
78
83
 
79
84
  ```bash
80
85
  export MELTANO_STATE_BACKEND_SNOWFLAKE_PASSWORD='my_secure_password'
81
- meltano config meltano set state_backend.uri 'snowflake://my_user@my_account/my_database'
82
- meltano config meltano set state_backend.snowflake.warehouse 'my_warehouse'
86
+ meltano config set meltano state_backend.uri 'snowflake://my_user@my_account/my_database'
87
+ meltano config set meltano state_backend.snowflake.warehouse 'my_warehouse'
83
88
  ```
84
89
 
85
90
  ## Development
@@ -95,17 +100,20 @@ uv sync
95
100
  Run all tests, type checks, linting, and coverage:
96
101
 
97
102
  ```bash
98
- uvx -with tox-uv tox run-parallel
103
+ uvx --with tox-uv tox run-parallel
99
104
  ```
100
105
 
101
106
  ### Bump the version
102
107
 
108
+ Using the [GitHub CLI][gh]:
109
+
103
110
  ```bash
104
- uv version --bump <type>
111
+ gh release create v<new-version>
105
112
  ```
106
113
 
114
+ [gh]: https://cli.github.com/
107
115
  [meltano]: https://meltano.com
116
+ [pipx]: https://github.com/pypa/pipx
108
117
  [snowflake]: https://www.snowflake.com/
109
118
  [state-backend]: https://docs.meltano.com/concepts/state_backends
110
- [pipx]: https://github.com/pypa/pipx
111
119
  [uv]: https://docs.astral.sh/uv
@@ -1,13 +1,11 @@
1
1
  [build-system]
2
2
  build-backend = "hatchling.build"
3
-
4
- requires = [ "hatchling" ]
3
+ requires = [ "hatchling", "hatch-vcs" ]
5
4
 
6
5
  [project]
7
6
  name = "meltano-state-backend-snowflake"
8
- version = "0.1.0"
7
+ dynamic = [ "version" ]
9
8
  description = "Meltano State Backend for Snowflake"
10
- readme = "README.md"
11
9
  license = "MIT"
12
10
  license-files = [
13
11
  "LICENSE",
@@ -15,20 +13,26 @@ license-files = [
15
13
  authors = [
16
14
  { name = "Taylor Murphy", email = "taylor@arch.dev" },
17
15
  ]
18
- requires-python = ">=3.9"
16
+ readme = "README.md"
17
+ requires-python = ">=3.10"
19
18
  classifiers = [
20
19
  "Programming Language :: Python :: 3 :: Only",
21
- "Programming Language :: Python :: 3.9",
22
20
  "Programming Language :: Python :: 3.10",
23
21
  "Programming Language :: Python :: 3.11",
24
22
  "Programming Language :: Python :: 3.12",
25
23
  "Programming Language :: Python :: 3.13",
24
+ "Programming Language :: Python :: 3.14",
26
25
  ]
27
26
  dependencies = [
28
27
  "meltano>=3.7",
29
- "snowflake-connector-python>=3,<4",
28
+ "snowflake-connector-python>=4,<5",
30
29
  ]
31
30
 
31
+ [project.urls]
32
+ Documentation = "https://github.com/meltano/meltano-state-backend-snowflake"
33
+ Source = "https://github.com/meltano/meltano-state-backend-snowflake"
34
+ Issues = "https://github.com/meltano/meltano-state-backend-snowflake/issues"
35
+
32
36
  [project.entry-points."meltano.settings"]
33
37
  snowflake_account = "meltano_state_backend_snowflake.backend:SNOWFLAKE_ACCOUNT"
34
38
  snowflake_database = "meltano_state_backend_snowflake.backend:SNOWFLAKE_DATABASE"
@@ -48,16 +52,22 @@ dev = [
48
52
  { include-group = "types" },
49
53
  ]
50
54
  lint = [
51
- "ruff>=0.12.3",
55
+ "ruff>=0.15",
52
56
  ]
53
57
  tests = [
54
- "coverage[toml]>=7.9",
55
- "pytest>=8.4.1",
58
+ "coverage[toml]>=7.13",
59
+ "pytest>=9",
56
60
  ]
57
61
  types = [
58
- "mypy>=1.17",
62
+ { include-group = "tests" },
63
+ "mypy>=1.19",
64
+ "ty>=0.0.14",
59
65
  ]
60
66
 
67
+ [tool.hatch.version]
68
+ fallback-version = "0.0.0.dev0"
69
+ source = "vcs"
70
+
61
71
  [tool.ruff]
62
72
  line-length = 100
63
73
 
@@ -124,10 +134,21 @@ parametrize-values-type = "tuple"
124
134
  [tool.ruff.lint.pydocstyle]
125
135
  convention = "google"
126
136
 
127
- [tool.pytest.ini_options]
137
+ [tool.pytest]
128
138
  addopts = [
129
139
  "--durations=10",
140
+ "-ra",
141
+ "--strict-config",
142
+ "--strict-markers",
130
143
  ]
144
+ filterwarnings = [
145
+ "error",
146
+ "once:The 'version' field in meltano.yml is deprecated:DeprecationWarning",
147
+ ]
148
+ log_level = "INFO"
149
+ minversion = "9"
150
+ testpaths = ["tests"]
151
+ xfail_strict = true
131
152
 
132
153
  [tool.coverage.paths]
133
154
  package = [
@@ -156,11 +177,11 @@ requires = [ "tox", "tox-uv" ]
156
177
  env_list = [
157
178
  "types",
158
179
  "lint",
180
+ "3.14",
159
181
  "3.13",
160
182
  "3.12",
161
183
  "3.11",
162
184
  "3.10",
163
- "3.9",
164
185
  "coverage",
165
186
  ]
166
187
 
@@ -171,11 +192,11 @@ commands = [ [ "coverage", "run", "-m", "pytest", { replace = "posargs", default
171
192
 
172
193
  [tool.tox.env.coverage]
173
194
  depends = [
174
- "3.9",
175
195
  "3.10",
176
196
  "3.11",
177
197
  "3.12",
178
198
  "3.13",
199
+ "3.14",
179
200
  ]
180
201
  dependency_groups = [ "tests" ]
181
202
  commands = [
@@ -197,10 +218,32 @@ dependency_groups = [ "tests", "types" ]
197
218
  commands = [
198
219
  [
199
220
  "mypy",
200
- "--strict",
201
221
  { replace = "posargs", default = [
202
222
  "src/meltano_state_backend_snowflake",
203
223
  "tests",
204
224
  ], extend = true },
205
225
  ],
226
+ [
227
+ "ty",
228
+ "check",
229
+ { replace = "posargs", default = [
230
+ "src/meltano_state_backend_snowflake",
231
+ "tests",
232
+ ], extend = true },
233
+ ],
234
+ ]
235
+
236
+ [tool.mypy]
237
+ enable_error_code = [
238
+ "ignore-without-code",
239
+ "redundant-expr",
240
+ "truthy-bool",
206
241
  ]
242
+ follow_untyped_imports = true
243
+ strict = true
244
+ warn_unreachable = true
245
+ warn_unused_configs = true
246
+ warn_unused_ignores = true
247
+
248
+ [tool.ty.rules]
249
+ unused-type-ignore-comment = "ignore"