liminal-sdk-python 2025.5.0__tar.gz → 2026.3.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 (27) hide show
  1. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/PKG-INFO +23 -23
  2. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/auth/__init__.py +1 -1
  3. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/auth/microsoft/device_code_flow.py +1 -1
  4. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/client.py +6 -7
  5. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/helpers/model.py +1 -1
  6. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/helpers/schema.py +1 -1
  7. liminal_sdk_python-2026.3.0/pyproject.toml +159 -0
  8. liminal_sdk_python-2025.5.0/pyproject.toml +0 -413
  9. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/LICENSE +0 -0
  10. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/README.md +0 -0
  11. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/__init__.py +0 -0
  12. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/auth/microsoft/__init__.py +0 -0
  13. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/auth/microsoft/models.py +0 -0
  14. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/const.py +0 -0
  15. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/__init__.py +0 -0
  16. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/llm/__init__.py +0 -0
  17. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/llm/models.py +0 -0
  18. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/llm/schemas.py +0 -0
  19. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/prompt/__init__.py +0 -0
  20. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/prompt/models.py +0 -0
  21. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/prompt/schemas.py +0 -0
  22. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/thread/__init__.py +0 -0
  23. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/thread/models.py +0 -0
  24. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/endpoints/thread/schemas.py +0 -0
  25. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/errors.py +0 -0
  26. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/helpers/__init__.py +0 -0
  27. {liminal_sdk_python-2025.5.0 → liminal_sdk_python-2026.3.0}/liminal/helpers/typing.py +0 -0
@@ -1,17 +1,18 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: liminal-sdk-python
3
- Version: 2025.5.0
3
+ Version: 2026.3.0
4
4
  Summary: The Liminal SDK for Python
5
- License: Apache-2.0
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
6
7
  Author: Liminal AI
7
8
  Author-email: info@liminal.ai
8
- Requires-Python: >=3.11,<3.14
9
+ Requires-Python: >=3.12,<3.15
9
10
  Classifier: License :: OSI Approved :: Apache Software License
10
11
  Classifier: Programming Language :: Python
11
12
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
14
  Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
15
16
  Classifier: Programming Language :: Python :: Implementation :: CPython
16
17
  Classifier: Programming Language :: Python :: Implementation :: PyPy
17
18
  Provides-Extra: all
@@ -20,29 +21,28 @@ Provides-Extra: lint
20
21
  Provides-Extra: release
21
22
  Provides-Extra: test
22
23
  Requires-Dist: anyio (>=4.4.0)
23
- Requires-Dist: blacken-docs (==1.19.1) ; extra == "lint"
24
- Requires-Dist: codespell (==2.4.1) ; extra == "lint"
25
- Requires-Dist: cryptography (==43.0.3)
24
+ Requires-Dist: blacken-docs (==1.20.0) ; extra == "lint"
25
+ Requires-Dist: codespell (==2.4.2) ; extra == "lint"
26
+ Requires-Dist: cryptography (==46.0.5)
26
27
  Requires-Dist: darglint (==1.8.1) ; extra == "lint"
27
28
  Requires-Dist: httpx (==0.28.1)
28
29
  Requires-Dist: liminal-sdk-python[build,lint,release,test] ; extra == "all"
29
- Requires-Dist: mashumaro (==3.15)
30
- Requires-Dist: msal (==1.32.3)
31
- Requires-Dist: mypy (==1.15.0) ; extra == "lint"
32
- Requires-Dist: pre-commit (==4.2.0) ; extra == "lint"
33
- Requires-Dist: pre-commit-hooks (==5.0.0) ; extra == "lint"
34
- Requires-Dist: pylint (==3.3.7) ; extra == "lint"
35
- Requires-Dist: pytest (==8.3.5) ; extra == "lint"
36
- Requires-Dist: pytest (==8.3.5) ; extra == "test"
37
- Requires-Dist: pytest-asyncio (==0.26.0) ; extra == "lint"
38
- Requires-Dist: pytest-asyncio (==0.26.0) ; extra == "test"
39
- Requires-Dist: pytest-cov (==6.1.1) ; extra == "test"
40
- Requires-Dist: pytest-httpx (==0.35.0) ; extra == "test"
30
+ Requires-Dist: mashumaro (==3.20)
31
+ Requires-Dist: msal (==1.35.1)
32
+ Requires-Dist: mypy (==1.19.1) ; extra == "lint"
33
+ Requires-Dist: pre-commit (==4.5.1) ; extra == "lint"
34
+ Requires-Dist: pre-commit-hooks (==6.0.0) ; extra == "lint"
35
+ Requires-Dist: pytest (==9.0.2) ; extra == "lint"
36
+ Requires-Dist: pytest (==9.0.2) ; extra == "test"
37
+ Requires-Dist: pytest-asyncio (==1.3.0) ; extra == "lint"
38
+ Requires-Dist: pytest-asyncio (==1.3.0) ; extra == "test"
39
+ Requires-Dist: pytest-cov (==7.0.0) ; extra == "test"
40
+ Requires-Dist: pytest-httpx (==0.36.0) ; extra == "test"
41
41
  Requires-Dist: requests (>=2.32.2)
42
- Requires-Dist: ruff (==0.11.8) ; extra == "lint"
43
- Requires-Dist: tomli (==2.2.1) ; extra == "release"
42
+ Requires-Dist: ruff (==0.15.6) ; extra == "lint"
43
+ Requires-Dist: tomli (==2.4.0) ; extra == "release"
44
44
  Requires-Dist: tomli-w (==1.2.0) ; extra == "release"
45
- Requires-Dist: uv (==0.7.2) ; extra == "build"
45
+ Requires-Dist: uv (==0.10.9) ; extra == "build"
46
46
  Description-Content-Type: text/markdown
47
47
 
48
48
  # Liminal Python SDK
@@ -1,7 +1,7 @@
1
1
  """Define auth providers."""
2
2
 
3
3
 
4
- class AuthProvider: # pylint: disable=too-few-public-methods
4
+ class AuthProvider:
5
5
  """Define an auth provider abstract base class."""
6
6
 
7
7
  async def get_access_token(self) -> str:
@@ -18,7 +18,7 @@ from liminal.errors import AuthError
18
18
  DEFAULT_AUTH_CHALLENGE_TIMEOUT: Final[int] = 60
19
19
 
20
20
 
21
- class DeviceCodeFlowProvider(AuthProvider): # pylint: disable=too-few-public-methods
21
+ class DeviceCodeFlowProvider(AuthProvider):
22
22
  """Define a Microsoft auth provider."""
23
23
 
24
24
  AUTHORITY_URL: Final[str] = "https://login.microsoftonline.com"
@@ -77,12 +77,12 @@ class Client:
77
77
  """
78
78
  client = cls(api_server_url, httpx_client=httpx_client)
79
79
  provider_access_token = await auth_provider.get_access_token()
80
- liminal_auth_response = await client._request( # noqa: SLF001
80
+ liminal_auth_response = await client._request(
81
81
  "GET",
82
82
  "/api/v1/auth/login/oauth/access-token",
83
83
  headers={"Authorization": f"Bearer {provider_access_token}"},
84
84
  )
85
- client._save_session_id_from_auth_response(liminal_auth_response) # noqa: SLF001
85
+ client._save_session_id_from_auth_response(liminal_auth_response)
86
86
  return client
87
87
 
88
88
  @classmethod
@@ -108,10 +108,10 @@ class Client:
108
108
 
109
109
  """
110
110
  client = cls(api_server_url, httpx_client=httpx_client)
111
- session_id_response = await client._request( # noqa: SLF001
111
+ session_id_response = await client._request(
112
112
  "GET", "/api/v1/users/me", cookies={"session": session_id}
113
113
  )
114
- client._save_session_id_from_auth_response(session_id_response) # noqa: SLF001
114
+ client._save_session_id_from_auth_response(session_id_response)
115
115
  return client
116
116
 
117
117
  @classmethod
@@ -132,12 +132,12 @@ class Client:
132
132
 
133
133
  """
134
134
  client = cls(api_server_url, httpx_client=httpx_client)
135
- liminal_auth_response = await client._request( # noqa: SLF001
135
+ liminal_auth_response = await client._request(
136
136
  "POST",
137
137
  "/api/v1/auth/test-automation/login",
138
138
  headers={"x-test-automation-api-key": token},
139
139
  )
140
- client._save_session_id_from_auth_response(liminal_auth_response) # noqa: SLF001
140
+ client._save_session_id_from_auth_response(liminal_auth_response)
141
141
  return client
142
142
 
143
143
  @property
@@ -332,7 +332,6 @@ class Client:
332
332
  url = f"{self._api_server_url}{endpoint}"
333
333
  cookie_jar = self._create_cookie_jar(cookies)
334
334
 
335
- # pylint: disable=contextmanager-generator-missing-cleanup
336
335
  async with (
337
336
  self._get_httpx_client() as client,
338
337
  client.stream(
@@ -7,7 +7,7 @@ from mashumaro.config import BaseConfig
7
7
  class BaseModel(DataClassDictMixin):
8
8
  """Define a base model."""
9
9
 
10
- class Config(BaseConfig): # pylint: disable=too-few-public-methods
10
+ class Config(BaseConfig):
11
11
  """Define the configuration."""
12
12
 
13
13
  code_generation_options = ["TO_DICT_ADD_BY_ALIAS_FLAG"] # noqa: RUF012
@@ -7,7 +7,7 @@ from mashumaro.config import BaseConfig
7
7
  class BaseResponseSchema(DataClassDictMixin):
8
8
  """Define a base response schema."""
9
9
 
10
- class Config(BaseConfig): # pylint: disable=too-few-public-methods
10
+ class Config(BaseConfig):
11
11
  """Define the configuration."""
12
12
 
13
13
  code_generation_options = ["TO_DICT_ADD_BY_ALIAS_FLAG"] # noqa: RUF012
@@ -0,0 +1,159 @@
1
+ [build-system]
2
+ requires = [
3
+ "poetry-core==2.3.1",
4
+ ]
5
+ build-backend = "poetry.core.masonry.api"
6
+
7
+ [project]
8
+ classifiers = [
9
+ "License :: OSI Approved :: Apache Software License",
10
+ "Programming Language :: Python",
11
+ "Programming Language :: Python :: 3",
12
+ "Programming Language :: Python :: 3.12",
13
+ "Programming Language :: Python :: 3.13",
14
+ "Programming Language :: Python :: 3.14",
15
+ "Programming Language :: Python :: Implementation :: CPython",
16
+ "Programming Language :: Python :: Implementation :: PyPy",
17
+ ]
18
+ dependencies = [
19
+ "anyio>=4.4.0",
20
+ "cryptography==46.0.5",
21
+ "httpx==0.28.1",
22
+ "mashumaro==3.20",
23
+ "msal==1.35.1",
24
+ "requests>=2.32.2",
25
+ ]
26
+ description = "The Liminal SDK for Python"
27
+ license = "Apache-2.0"
28
+ name = "liminal-sdk-python"
29
+ readme = "README.md"
30
+ requires-python = ">=3.12,<3.15"
31
+ version = "2026.03.0"
32
+
33
+ [project.optional-dependencies]
34
+ all = [
35
+ "liminal-sdk-python[build,lint,release,test]",
36
+ ]
37
+ build = [
38
+ "uv==0.10.9",
39
+ ]
40
+ lint = [
41
+ "blacken-docs==1.20.0",
42
+ "codespell==2.4.2",
43
+ "darglint==1.8.1",
44
+ "mypy==1.19.1",
45
+ "pre-commit-hooks==6.0.0",
46
+ "pre-commit==4.5.1",
47
+ "pytest-asyncio==1.3.0",
48
+ "pytest==9.0.2",
49
+ "ruff==0.15.6",
50
+ ]
51
+ release = [
52
+ "tomli==2.4.0",
53
+ "tomli-w==1.2.0",
54
+ ]
55
+ test = [
56
+ "pytest==9.0.2",
57
+ "pytest-asyncio==1.3.0",
58
+ "pytest-cov==7.0.0",
59
+ "pytest-httpx==0.36.0",
60
+ ]
61
+
62
+ [tool.coverage.report]
63
+ exclude_lines = [
64
+ "TYPE_CHECKING",
65
+ "raise NotImplementedError",
66
+ ]
67
+ fail_under = 100
68
+ show_missing = true
69
+
70
+ [tool.coverage.run]
71
+ source = [
72
+ "liminal",
73
+ ]
74
+
75
+ [tool.mypy]
76
+ check_untyped_defs = true
77
+ disallow_incomplete_defs = true
78
+ disallow_subclassing_any = true
79
+ disallow_untyped_calls = true
80
+ disallow_untyped_decorators = true
81
+ disallow_untyped_defs = true
82
+ follow_imports = "silent"
83
+ ignore_missing_imports = true
84
+ no_implicit_optional = true
85
+ platform = "linux"
86
+ python_version = "3.12"
87
+ show_error_codes = true
88
+ strict_equality = true
89
+ warn_incomplete_stub = true
90
+ warn_redundant_casts = true
91
+ warn_unreachable = true
92
+ warn_unused_configs = true
93
+ warn_unused_ignores = true
94
+
95
+ [tool.poetry]
96
+ authors = [
97
+ "Liminal AI <info@liminal.ai>",
98
+ ]
99
+ packages = [
100
+ { include = "liminal" },
101
+ ]
102
+
103
+ [tool.ruff]
104
+ target-version = "py311"
105
+
106
+ [tool.ruff.lint]
107
+ future-annotations = true
108
+ ignore = [
109
+ "A005", # Shadowing a Python standard-library module
110
+ "D202", # No blank lines allowed after function docstring
111
+ "D203", # 1 blank line required before class docstring
112
+ "D213", # Multi-line docstring summary should start at the second line
113
+ "PLR0913", # This is subjective
114
+ "PLW2901", # Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target
115
+ "PT012", # `pytest.raises()` block should contain a single simple statement
116
+ "TCH", # flake8-type-checking
117
+
118
+ # May conflict with the formatter:
119
+ # https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
120
+ "COM812",
121
+ "COM819",
122
+ "D206",
123
+ "D300",
124
+ "E111",
125
+ "E114",
126
+ "E117",
127
+ "ISC001",
128
+ "ISC002",
129
+ "Q000",
130
+ "Q001",
131
+ "Q002",
132
+ "Q003",
133
+ "W191",
134
+ ]
135
+ select = [
136
+ "ALL"
137
+ ]
138
+
139
+ [tool.ruff.lint.isort]
140
+ combine-as-imports = true
141
+ force-sort-within-sections = true
142
+ known-first-party = [
143
+ "liminal",
144
+ "tests",
145
+ ]
146
+ split-on-trailing-comma = false
147
+
148
+ [tool.ruff.lint.per-file-ignores]
149
+ "tests/*" = [
150
+ "ARG001",
151
+ "FBT001",
152
+ "PLR2004",
153
+ "S101",
154
+ "SLF001",
155
+ ]
156
+
157
+ [tool.vulture]
158
+ min_confidence = 100
159
+ sort_by_size = true
@@ -1,413 +0,0 @@
1
- [build-system]
2
- requires = [
3
- "poetry-core==2.1.3",
4
- ]
5
- build-backend = "poetry.core.masonry.api"
6
-
7
- [project]
8
- classifiers = [
9
- "License :: OSI Approved :: Apache Software License",
10
- "Programming Language :: Python",
11
- "Programming Language :: Python :: 3",
12
- "Programming Language :: Python :: 3.11",
13
- "Programming Language :: Python :: 3.12",
14
- "Programming Language :: Python :: 3.13",
15
- "Programming Language :: Python :: Implementation :: CPython",
16
- "Programming Language :: Python :: Implementation :: PyPy",
17
- ]
18
- dependencies = [
19
- "anyio>=4.4.0",
20
- "cryptography==43.0.3",
21
- "httpx==0.28.1",
22
- "mashumaro==3.15",
23
- "msal==1.32.3",
24
- "requests>=2.32.2",
25
- ]
26
- description = "The Liminal SDK for Python"
27
- license = "Apache-2.0"
28
- name = "liminal-sdk-python"
29
- readme = "README.md"
30
- requires-python = ">=3.11,<3.14"
31
- version = "2025.05.0"
32
-
33
- [project.optional-dependencies]
34
- all = [
35
- "liminal-sdk-python[build,lint,release,test]",
36
- ]
37
- build = [
38
- "uv==0.7.2",
39
- ]
40
- lint = [
41
- "blacken-docs==1.19.1",
42
- "codespell==2.4.1",
43
- "darglint==1.8.1",
44
- "mypy==1.15.0",
45
- "pre-commit-hooks==5.0.0",
46
- "pre-commit==4.2.0",
47
- "pylint==3.3.7",
48
- "pytest-asyncio==0.26.0",
49
- "pytest==8.3.5",
50
- "ruff==0.11.8",
51
- ]
52
- release = [
53
- "tomli==2.2.1",
54
- "tomli-w==1.2.0",
55
- ]
56
- test = [
57
- "pytest==8.3.5",
58
- "pytest-asyncio==0.26.0",
59
- "pytest-cov==6.1.1",
60
- "pytest-httpx==0.35.0",
61
- ]
62
-
63
- [tool.coverage.report]
64
- exclude_lines = [
65
- "TYPE_CHECKING",
66
- "raise NotImplementedError",
67
- ]
68
- fail_under = 100
69
- show_missing = true
70
-
71
- [tool.coverage.run]
72
- source = [
73
- "liminal",
74
- ]
75
-
76
- [tool.mypy]
77
- check_untyped_defs = true
78
- disallow_incomplete_defs = true
79
- disallow_subclassing_any = true
80
- disallow_untyped_calls = true
81
- disallow_untyped_decorators = true
82
- disallow_untyped_defs = true
83
- follow_imports = "silent"
84
- ignore_missing_imports = true
85
- no_implicit_optional = true
86
- platform = "linux"
87
- python_version = "3.11"
88
- show_error_codes = true
89
- strict_equality = true
90
- warn_incomplete_stub = true
91
- warn_redundant_casts = true
92
- warn_unreachable = true
93
- warn_unused_configs = true
94
- warn_unused_ignores = true
95
-
96
- [tool.poetry]
97
- authors = [
98
- "Liminal AI <info@liminal.ai>",
99
- ]
100
- packages = [
101
- { include = "liminal" },
102
- ]
103
-
104
- [tool.pylint.BASIC]
105
- class-const-naming-style = "any"
106
- expected-line-ending-format = "LF"
107
-
108
- [tool.pylint.DESIGN]
109
- max-attributes = 20
110
-
111
- [tool.pylint.FORMAT]
112
- max-line-length = 88
113
-
114
- [tool.pylint.MAIN]
115
- py-version = "3.11"
116
- ignore = [
117
- "tests",
118
- ]
119
- jobs = 2
120
- init-hook = "from pathlib import Path; import sys; from pylint.config import find_default_config_files; sys.path.append( str(Path(next(find_default_config_files())).parent.joinpath('pylint/plugins'))\n ) "
121
- load-plugins = [
122
- "pylint.extensions.code_style",
123
- "pylint.extensions.typing",
124
- ]
125
- persistent = false
126
- fail-on = [
127
- "I",
128
- ]
129
-
130
- [tool.pylint."MESSAGES CONTROL"]
131
- disable = [
132
- "abstract-method",
133
- "duplicate-code",
134
- "too-many-arguments",
135
- "too-many-lines",
136
- "too-many-locals",
137
- "too-many-positional-arguments",
138
- "anomalous-backslash-in-string",
139
- "assert-on-string-literal",
140
- "assert-on-tuple",
141
- "await-outside-async",
142
- "bad-classmethod-argument",
143
- "bad-format-string",
144
- "bad-format-string-key",
145
- "bad-str-strip-call",
146
- "bad-string-format-type",
147
- "bare-except",
148
- "bidirectional-unicode",
149
- "binary-op-exception",
150
- "broad-except",
151
- "broad-exception-raised",
152
- "cell-var-from-loop",
153
- "comparison-of-constants",
154
- "comparison-with-itself",
155
- "consider-alternative-union-syntax",
156
- "consider-iterating-dictionary",
157
- "consider-merging-isinstance",
158
- "consider-using-alias",
159
- "consider-using-dict-comprehension",
160
- "consider-using-f-string",
161
- "consider-using-generator",
162
- "consider-using-get",
163
- "consider-using-set-comprehension",
164
- "consider-using-sys-exit",
165
- "consider-using-ternary",
166
- "continue-in-finally",
167
- "duplicate-bases",
168
- "duplicate-except",
169
- "duplicate-key",
170
- "duplicate-string-formatting-argument",
171
- "duplicate-value",
172
- "empty-docstring",
173
- "eval-used",
174
- "exec-used",
175
- "expression-not-assigned",
176
- "f-string-without-interpolation",
177
- "forgotten-debug-statement",
178
- "format-needs-mapping",
179
- "format-string-without-interpolation",
180
- "function-redefined",
181
- "global-variable-not-assigned",
182
- "implicit-str-concat",
183
- "import-self",
184
- "inconsistent-quotes",
185
- "invalid-all-object",
186
- "invalid-character-backspace",
187
- "invalid-character-esc",
188
- "invalid-character-nul",
189
- "invalid-character-sub",
190
- "invalid-character-zero-width-space",
191
- "invalid-envvar-default",
192
- "invalid-name",
193
- "keyword-arg-before-vararg",
194
- "line-too-long",
195
- "literal-comparison",
196
- "logging-format-interpolation",
197
- "logging-fstring-interpolation",
198
- "logging-not-lazy",
199
- "logging-too-few-args",
200
- "logging-too-many-args",
201
- "misplaced-bare-raise",
202
- "misplaced-future",
203
- "missing-class-docstring",
204
- "missing-final-newline",
205
- "missing-format-string-key",
206
- "missing-function-docstring",
207
- "missing-module-docstring",
208
- "mixed-format-string",
209
- "multiple-imports",
210
- "named-expr-without-context",
211
- "nested-min-max",
212
- "no-else-break",
213
- "no-else-continue",
214
- "no-else-raise",
215
- "no-else-return",
216
- "no-method-argument",
217
- "no-self-argument",
218
- "nonexistent-operator",
219
- "nonlocal-without-binding",
220
- "not-in-loop",
221
- "notimplemented-raised",
222
- "pointless-statement",
223
- "property-with-parameters",
224
- "protected-access",
225
- "raise-missing-from",
226
- "redefined-builtin",
227
- "redefined-slots-in-subclass",
228
- "return-in-init",
229
- "return-outside-function",
230
- "singleton-comparison",
231
- "subprocess-run-check",
232
- "super-with-arguments",
233
- "superfluous-parens",
234
- "syntax-error",
235
- "too-few-format-args",
236
- "too-many-branches",
237
- "too-many-format-args",
238
- "too-many-return-statements",
239
- "too-many-star-expressions",
240
- "too-many-statements",
241
- "trailing-comma-tuple",
242
- "truncated-format-string",
243
- "try-except-raise",
244
- "undefined-all-variable",
245
- "undefined-variable",
246
- "ungrouped-imports",
247
- "unidiomatic-typecheck",
248
- "unnecessary-comprehension",
249
- "unnecessary-direct-lambda-call",
250
- "unnecessary-lambda-assignment",
251
- "unnecessary-pass",
252
- "unneeded-not",
253
- "unused-argument",
254
- "unused-format-string-argument",
255
- "unused-format-string-key",
256
- "unused-import",
257
- "unused-variable",
258
- "use-a-generator",
259
- "use-dict-literal",
260
- "use-list-literal",
261
- "used-prior-global-declaration",
262
- "useless-else-on-loop",
263
- "useless-import-alias",
264
- "useless-object-inheritance",
265
- "useless-return",
266
- "wildcard-import",
267
- "wrong-import-order",
268
- "wrong-import-position",
269
- "yield-inside-async-function",
270
- "yield-outside-function",
271
- "abstract-class-instantiated",
272
- "arguments-differ",
273
- "assigning-non-slot",
274
- "assignment-from-no-return",
275
- "assignment-from-none",
276
- "bad-exception-cause",
277
- "bad-format-character",
278
- "bad-reversed-sequence",
279
- "bad-super-call",
280
- "bad-thread-instantiation",
281
- "catching-non-exception",
282
- "comparison-with-callable",
283
- "deprecated-class",
284
- "dict-iter-missing-items",
285
- "format-combined-specification",
286
- "global-variable-undefined",
287
- "import-error",
288
- "inconsistent-mro",
289
- "inherit-non-class",
290
- "init-is-generator",
291
- "invalid-class-object",
292
- "invalid-enum-extension",
293
- "invalid-envvar-value",
294
- "invalid-format-returned",
295
- "invalid-hash-returned",
296
- "invalid-metaclass",
297
- "invalid-overridden-method",
298
- "invalid-repr-returned",
299
- "invalid-sequence-index",
300
- "invalid-slice-index",
301
- "invalid-slots",
302
- "invalid-slots-object",
303
- "invalid-star-assignment-target",
304
- "invalid-str-returned",
305
- "invalid-unary-operand-type",
306
- "invalid-unicode-codec",
307
- "isinstance-second-argument-not-valid-type",
308
- "method-hidden",
309
- "misplaced-format-function",
310
- "missing-format-argument-key",
311
- "missing-format-attribute",
312
- "missing-kwoa",
313
- "no-member",
314
- "no-value-for-parameter",
315
- "non-iterator-returned",
316
- "non-str-assignment-to-dunder-name",
317
- "nonlocal-and-global",
318
- "not-a-mapping",
319
- "not-an-iterable",
320
- "not-async-context-manager",
321
- "not-callable",
322
- "not-context-manager",
323
- "overridden-final-method",
324
- "raising-bad-type",
325
- "raising-non-exception",
326
- "redundant-keyword-arg",
327
- "relative-beyond-top-level",
328
- "self-cls-assignment",
329
- "signature-differs",
330
- "star-needs-assignment-target",
331
- "subclassed-final-class",
332
- "super-without-brackets",
333
- "too-many-function-args",
334
- "typevar-double-variance",
335
- "typevar-name-mismatch",
336
- "unbalanced-dict-unpacking",
337
- "unbalanced-tuple-unpacking",
338
- "unexpected-keyword-arg",
339
- "unhashable-member",
340
- "unpacking-non-sequence",
341
- "unsubscriptable-object",
342
- "unsupported-assignment-operation",
343
- "unsupported-binary-operation",
344
- "unsupported-delete-operation",
345
- "unsupported-membership-test",
346
- "used-before-assignment",
347
- "using-final-decorator-in-unsupported-version",
348
- "wrong-exception-operation",
349
- ]
350
- enable = [
351
- "useless-suppression",
352
- "use-symbolic-message-instead",
353
- ]
354
-
355
- [tool.pylint.TYPING]
356
- runtime-typing = false
357
-
358
- [tool.pylint.CODE_STYLE]
359
- max-line-length-suggestions = 72
360
-
361
- [tool.ruff]
362
- target-version = "py311"
363
-
364
- [tool.ruff.lint]
365
- select = [
366
- "ALL",
367
- ]
368
- ignore = [
369
- "A005",
370
- "D202",
371
- "D203",
372
- "D213",
373
- "PLR0913",
374
- "PLW2901",
375
- "PT012",
376
- "TCH",
377
- "COM812",
378
- "COM819",
379
- "D206",
380
- "D300",
381
- "E111",
382
- "E114",
383
- "E117",
384
- "ISC001",
385
- "ISC002",
386
- "Q000",
387
- "Q001",
388
- "Q002",
389
- "Q003",
390
- "W191",
391
- ]
392
-
393
- [tool.ruff.lint.isort]
394
- force-sort-within-sections = true
395
- known-first-party = [
396
- "liminal",
397
- "tests",
398
- ]
399
- combine-as-imports = true
400
- split-on-trailing-comma = false
401
-
402
- [tool.ruff.lint.per-file-ignores]
403
- "tests/*" = [
404
- "ARG001",
405
- "FBT001",
406
- "PLR2004",
407
- "S101",
408
- "SLF001",
409
- ]
410
-
411
- [tool.vulture]
412
- min_confidence = 100
413
- sort_by_size = true