scim2-client 0.2.1__tar.gz → 0.2.2__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.
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.github/workflows/release.yml +1 -1
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.pre-commit-config.yaml +5 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/PKG-INFO +1 -2
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/changelog.rst +9 -2
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/conf.py +0 -1
- {scim2_client-0.2.1 → scim2_client-0.2.2}/pyproject.toml +7 -2
- {scim2_client-0.2.1 → scim2_client-0.2.2}/scim2_client/client.py +31 -29
- scim2_client-0.2.2/tests/__init__.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/uv.lock +51 -1
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.github/FUNDING.yml +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.github/workflows/tests.yaml +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.gitignore +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/.readthedocs.yml +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/LICENSE.md +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/README.md +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/__init__.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/contributing.rst +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/index.rst +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/reference.rst +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/doc/tutorial.rst +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/scim2_client/__init__.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/scim2_client/errors.py +0 -0
- /scim2_client-0.2.1/tests/__init__.py → /scim2_client-0.2.2/scim2_client/py.typed +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_create.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_delete.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_query.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_replace.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_search.py +0 -0
- {scim2_client-0.2.1 → scim2_client-0.2.2}/tests/test_utils.py +0 -0
|
@@ -15,6 +15,11 @@ repos:
|
|
|
15
15
|
- id: end-of-file-fixer
|
|
16
16
|
exclude: "\\.svg$|\\.map$|\\.min\\.css$|\\.min\\.js$|\\.po$|\\.pot$"
|
|
17
17
|
- id: check-toml
|
|
18
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
19
|
+
rev: v1.11.2
|
|
20
|
+
hooks:
|
|
21
|
+
- id: mypy
|
|
22
|
+
additional_dependencies: [pydantic]
|
|
18
23
|
- repo: https://github.com/codespell-project/codespell
|
|
19
24
|
rev: v2.3.0
|
|
20
25
|
hooks:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: scim2-client
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Pythonically build SCIM requests and parse SCIM responses
|
|
5
5
|
Project-URL: documentation, https://scim2-client.readthedocs.io
|
|
6
6
|
Project-URL: repository, https://github.com/python-scim/scim2-client
|
|
@@ -208,7 +208,6 @@ License: Apache License
|
|
|
208
208
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
209
209
|
See the License for the specific language governing permissions and
|
|
210
210
|
limitations under the License.
|
|
211
|
-
License-File: LICENSE.md
|
|
212
211
|
Keywords: api,httpx,provisioning,rfc7643,rfc7644,scim,scim2
|
|
213
212
|
Classifier: Development Status :: 3 - Alpha
|
|
214
213
|
Classifier: Environment :: Web Environment
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
[0.2.2] - 2024-11-12
|
|
5
|
+
--------------------
|
|
6
|
+
|
|
7
|
+
Added
|
|
8
|
+
^^^^^
|
|
9
|
+
- Mypy type checking and py.typed file :pr:`25`
|
|
10
|
+
|
|
4
11
|
[0.2.1] - 2024-11-07
|
|
5
|
-
|
|
12
|
+
--------------------
|
|
6
13
|
|
|
7
14
|
Added
|
|
8
15
|
^^^^^
|
|
@@ -14,7 +21,7 @@ Fixed
|
|
|
14
21
|
- Don't crash when servers don't return content type headers. :pr:`22,24`
|
|
15
22
|
|
|
16
23
|
[0.2.0] - 2024-09-01
|
|
17
|
-
|
|
24
|
+
--------------------
|
|
18
25
|
|
|
19
26
|
Added
|
|
20
27
|
^^^^^
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "scim2-client"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "Pythonically build SCIM requests and parse SCIM responses"
|
|
9
9
|
authors = [{name="Yaal Coop", email="contact@yaal.coop"}]
|
|
10
10
|
license = {file = "LICENSE.md"}
|
|
@@ -44,8 +44,8 @@ dev = [
|
|
|
44
44
|
"pytest-coverage>=0.0",
|
|
45
45
|
"pytest-httpserver>=1.0.10",
|
|
46
46
|
"tox-uv>=1.16.0",
|
|
47
|
+
"mypy>=1.13.0",
|
|
47
48
|
]
|
|
48
|
-
|
|
49
49
|
doc = [
|
|
50
50
|
"autodoc-pydantic>=2.2.0",
|
|
51
51
|
"myst-parser>=3.0.1",
|
|
@@ -100,6 +100,11 @@ force-single-line = true
|
|
|
100
100
|
[tool.ruff.format]
|
|
101
101
|
docstring-code-format = true
|
|
102
102
|
|
|
103
|
+
[tool.mypy]
|
|
104
|
+
plugins = [
|
|
105
|
+
"pydantic.mypy"
|
|
106
|
+
]
|
|
107
|
+
|
|
103
108
|
[tool.tox]
|
|
104
109
|
requires = ["tox>=4.19"]
|
|
105
110
|
env_list = [
|
|
@@ -128,17 +128,19 @@ class SCIMClient:
|
|
|
128
128
|
:rfc:`RFC7644 §3.12 <7644#section-3.12>`.
|
|
129
129
|
"""
|
|
130
130
|
|
|
131
|
-
def __init__(
|
|
131
|
+
def __init__(
|
|
132
|
+
self, client: Client, resource_types: Optional[tuple[type[Resource]]] = None
|
|
133
|
+
):
|
|
132
134
|
self.client = client
|
|
133
135
|
self.resource_types = tuple(
|
|
134
136
|
set(resource_types or []) | {ResourceType, Schema, ServiceProviderConfig}
|
|
135
137
|
)
|
|
136
138
|
|
|
137
|
-
def check_resource_type(self, resource_type):
|
|
139
|
+
def check_resource_type(self, resource_type: type[Resource]) -> None:
|
|
138
140
|
if resource_type not in self.resource_types:
|
|
139
141
|
raise SCIMRequestError(f"Unknown resource type: '{resource_type}'")
|
|
140
142
|
|
|
141
|
-
def resource_endpoint(self, resource_type: type):
|
|
143
|
+
def resource_endpoint(self, resource_type: Optional[type[Resource]]) -> str:
|
|
142
144
|
if resource_type is None:
|
|
143
145
|
return "/"
|
|
144
146
|
|
|
@@ -156,12 +158,12 @@ class SCIMClient:
|
|
|
156
158
|
def check_response(
|
|
157
159
|
self,
|
|
158
160
|
response: Response,
|
|
159
|
-
expected_status_codes: list[int],
|
|
160
|
-
expected_types: Optional[type] = None,
|
|
161
|
+
expected_status_codes: Optional[list[int]] = None,
|
|
162
|
+
expected_types: Optional[list[type[Resource]]] = None,
|
|
161
163
|
check_response_payload: bool = True,
|
|
162
164
|
raise_scim_errors: bool = True,
|
|
163
165
|
scim_ctx: Optional[Context] = None,
|
|
164
|
-
):
|
|
166
|
+
) -> Union[Error, None, dict, type[Resource]]:
|
|
165
167
|
if expected_status_codes and response.status_code not in expected_status_codes:
|
|
166
168
|
raise UnexpectedStatusCode(source=response)
|
|
167
169
|
|
|
@@ -209,8 +211,8 @@ class SCIMClient:
|
|
|
209
211
|
expected_types, response_payload, with_extensions=False
|
|
210
212
|
)
|
|
211
213
|
|
|
212
|
-
if not actual_type:
|
|
213
|
-
expected = ", ".join([
|
|
214
|
+
if response_payload and not actual_type:
|
|
215
|
+
expected = ", ".join([type_.__name__ for type_ in expected_types])
|
|
214
216
|
try:
|
|
215
217
|
schema = ", ".join(response_payload["schemas"])
|
|
216
218
|
message = f"Expected type {expected} but got unknown resource with schemas: {schema}"
|
|
@@ -293,10 +295,10 @@ class SCIMClient:
|
|
|
293
295
|
try:
|
|
294
296
|
resource = resource_type.model_validate(resource)
|
|
295
297
|
except ValidationError as exc:
|
|
296
|
-
|
|
298
|
+
scim_validation_exc = RequestPayloadValidationError(source=resource)
|
|
297
299
|
if sys.version_info >= (3, 11): # pragma: no cover
|
|
298
|
-
|
|
299
|
-
raise
|
|
300
|
+
scim_validation_exc.add_note(str(exc))
|
|
301
|
+
raise scim_validation_exc from exc
|
|
300
302
|
|
|
301
303
|
self.check_resource_type(resource_type)
|
|
302
304
|
url = kwargs.pop("url", self.resource_endpoint(resource_type))
|
|
@@ -305,10 +307,10 @@ class SCIMClient:
|
|
|
305
307
|
try:
|
|
306
308
|
response = self.client.post(url, json=payload, **kwargs)
|
|
307
309
|
except RequestError as exc:
|
|
308
|
-
|
|
310
|
+
scim_network_exc = RequestNetworkError(source=payload)
|
|
309
311
|
if sys.version_info >= (3, 11): # pragma: no cover
|
|
310
|
-
|
|
311
|
-
raise
|
|
312
|
+
scim_network_exc.add_note(str(exc))
|
|
313
|
+
raise scim_network_exc from exc
|
|
312
314
|
|
|
313
315
|
return self.check_response(
|
|
314
316
|
response=response,
|
|
@@ -321,7 +323,7 @@ class SCIMClient:
|
|
|
321
323
|
|
|
322
324
|
def query(
|
|
323
325
|
self,
|
|
324
|
-
resource_type: Optional[type] = None,
|
|
326
|
+
resource_type: Optional[type[Resource]] = None,
|
|
325
327
|
id: Optional[str] = None,
|
|
326
328
|
search_request: Optional[Union[SearchRequest, dict]] = None,
|
|
327
329
|
check_request_payload: bool = True,
|
|
@@ -396,19 +398,19 @@ class SCIMClient:
|
|
|
396
398
|
if resource_type and check_request_payload:
|
|
397
399
|
self.check_resource_type(resource_type)
|
|
398
400
|
|
|
401
|
+
payload: Optional[SearchRequest]
|
|
399
402
|
if not check_request_payload:
|
|
400
403
|
payload = search_request
|
|
401
404
|
|
|
402
|
-
|
|
403
|
-
payload = (
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
scim_ctx=Context.RESOURCE_QUERY_REQUEST,
|
|
407
|
-
)
|
|
408
|
-
if search_request
|
|
409
|
-
else None
|
|
405
|
+
elif isinstance(search_request, SearchRequest):
|
|
406
|
+
payload = search_request.model_dump(
|
|
407
|
+
exclude_unset=True,
|
|
408
|
+
scim_ctx=Context.RESOURCE_QUERY_REQUEST,
|
|
410
409
|
)
|
|
411
410
|
|
|
411
|
+
else:
|
|
412
|
+
payload = None
|
|
413
|
+
|
|
412
414
|
url = kwargs.pop("url", self.resource_endpoint(resource_type))
|
|
413
415
|
|
|
414
416
|
if resource_type is None:
|
|
@@ -647,10 +649,10 @@ class SCIMClient:
|
|
|
647
649
|
try:
|
|
648
650
|
resource = resource_type.model_validate(resource)
|
|
649
651
|
except ValidationError as exc:
|
|
650
|
-
|
|
652
|
+
scim_validation_exc = RequestPayloadValidationError(source=resource)
|
|
651
653
|
if sys.version_info >= (3, 11): # pragma: no cover
|
|
652
|
-
|
|
653
|
-
raise
|
|
654
|
+
scim_validation_exc.add_note(str(exc))
|
|
655
|
+
raise scim_validation_exc from exc
|
|
654
656
|
|
|
655
657
|
self.check_resource_type(resource_type)
|
|
656
658
|
|
|
@@ -665,10 +667,10 @@ class SCIMClient:
|
|
|
665
667
|
try:
|
|
666
668
|
response = self.client.put(url, json=payload, **kwargs)
|
|
667
669
|
except RequestError as exc:
|
|
668
|
-
|
|
670
|
+
scim_network_exc = RequestNetworkError(source=payload)
|
|
669
671
|
if sys.version_info >= (3, 11): # pragma: no cover
|
|
670
|
-
|
|
671
|
-
raise
|
|
672
|
+
scim_network_exc.add_note(str(exc))
|
|
673
|
+
raise scim_network_exc from exc
|
|
672
674
|
|
|
673
675
|
return self.check_response(
|
|
674
676
|
response=response,
|
|
File without changes
|
|
@@ -520,6 +520,54 @@ wheels = [
|
|
|
520
520
|
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
|
|
521
521
|
]
|
|
522
522
|
|
|
523
|
+
[[package]]
|
|
524
|
+
name = "mypy"
|
|
525
|
+
version = "1.13.0"
|
|
526
|
+
source = { registry = "https://pypi.org/simple" }
|
|
527
|
+
dependencies = [
|
|
528
|
+
{ name = "mypy-extensions" },
|
|
529
|
+
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
|
530
|
+
{ name = "typing-extensions" },
|
|
531
|
+
]
|
|
532
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 }
|
|
533
|
+
wheels = [
|
|
534
|
+
{ url = "https://files.pythonhosted.org/packages/5e/8c/206de95a27722b5b5a8c85ba3100467bd86299d92a4f71c6b9aa448bfa2f/mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", size = 11020731 },
|
|
535
|
+
{ url = "https://files.pythonhosted.org/packages/ab/bb/b31695a29eea76b1569fd28b4ab141a1adc9842edde080d1e8e1776862c7/mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", size = 10184276 },
|
|
536
|
+
{ url = "https://files.pythonhosted.org/packages/a5/2d/4a23849729bb27934a0e079c9c1aad912167d875c7b070382a408d459651/mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", size = 12587706 },
|
|
537
|
+
{ url = "https://files.pythonhosted.org/packages/5c/c3/d318e38ada50255e22e23353a469c791379825240e71b0ad03e76ca07ae6/mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", size = 13105586 },
|
|
538
|
+
{ url = "https://files.pythonhosted.org/packages/4a/25/3918bc64952370c3dbdbd8c82c363804678127815febd2925b7273d9482c/mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", size = 9632318 },
|
|
539
|
+
{ url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 },
|
|
540
|
+
{ url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 },
|
|
541
|
+
{ url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 },
|
|
542
|
+
{ url = "https://files.pythonhosted.org/packages/3f/1d/676e76f07f7d5ddcd4227af3938a9c9640f293b7d8a44dd4ff41d4db25c1/mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", size = 12984688 },
|
|
543
|
+
{ url = "https://files.pythonhosted.org/packages/9c/03/5a85a30ae5407b1d28fab51bd3e2103e52ad0918d1e68f02a7778669a307/mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", size = 9626811 },
|
|
544
|
+
{ url = "https://files.pythonhosted.org/packages/fb/31/c526a7bd2e5c710ae47717c7a5f53f616db6d9097caf48ad650581e81748/mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", size = 11077900 },
|
|
545
|
+
{ url = "https://files.pythonhosted.org/packages/83/67/b7419c6b503679d10bd26fc67529bc6a1f7a5f220bbb9f292dc10d33352f/mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", size = 10074818 },
|
|
546
|
+
{ url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 },
|
|
547
|
+
{ url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 },
|
|
548
|
+
{ url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 },
|
|
549
|
+
{ url = "https://files.pythonhosted.org/packages/11/bb/ab4cfdc562cad80418f077d8be9b4491ee4fb257440da951b85cbb0a639e/mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", size = 11069721 },
|
|
550
|
+
{ url = "https://files.pythonhosted.org/packages/59/3b/a393b1607cb749ea2c621def5ba8c58308ff05e30d9dbdc7c15028bca111/mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", size = 10063996 },
|
|
551
|
+
{ url = "https://files.pythonhosted.org/packages/d1/1f/6b76be289a5a521bb1caedc1f08e76ff17ab59061007f201a8a18cc514d1/mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8", size = 12584043 },
|
|
552
|
+
{ url = "https://files.pythonhosted.org/packages/a6/83/5a85c9a5976c6f96e3a5a7591aa28b4a6ca3a07e9e5ba0cec090c8b596d6/mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", size = 13036996 },
|
|
553
|
+
{ url = "https://files.pythonhosted.org/packages/b4/59/c39a6f752f1f893fccbcf1bdd2aca67c79c842402b5283563d006a67cf76/mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", size = 9737709 },
|
|
554
|
+
{ url = "https://files.pythonhosted.org/packages/5f/d4/b33ddd40dad230efb317898a2d1c267c04edba73bc5086bf77edeb410fb2/mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc", size = 11013906 },
|
|
555
|
+
{ url = "https://files.pythonhosted.org/packages/f4/e6/f414bca465b44d01cd5f4a82761e15044bedd1bf8025c5af3cc64518fac5/mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732", size = 10180657 },
|
|
556
|
+
{ url = "https://files.pythonhosted.org/packages/38/e9/fc3865e417722f98d58409770be01afb961e2c1f99930659ff4ae7ca8b7e/mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc", size = 12586394 },
|
|
557
|
+
{ url = "https://files.pythonhosted.org/packages/2e/35/f4d8b6d2cb0b3dad63e96caf159419dda023f45a358c6c9ac582ccaee354/mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d", size = 13103591 },
|
|
558
|
+
{ url = "https://files.pythonhosted.org/packages/22/1d/80594aef135f921dd52e142fa0acd19df197690bd0cde42cea7b88cf5aa2/mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24", size = 9634690 },
|
|
559
|
+
{ url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 },
|
|
560
|
+
]
|
|
561
|
+
|
|
562
|
+
[[package]]
|
|
563
|
+
name = "mypy-extensions"
|
|
564
|
+
version = "1.0.0"
|
|
565
|
+
source = { registry = "https://pypi.org/simple" }
|
|
566
|
+
sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 }
|
|
567
|
+
wheels = [
|
|
568
|
+
{ url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 },
|
|
569
|
+
]
|
|
570
|
+
|
|
523
571
|
[[package]]
|
|
524
572
|
name = "myst-parser"
|
|
525
573
|
version = "3.0.1"
|
|
@@ -888,7 +936,7 @@ wheels = [
|
|
|
888
936
|
|
|
889
937
|
[[package]]
|
|
890
938
|
name = "scim2-client"
|
|
891
|
-
version = "0.2.
|
|
939
|
+
version = "0.2.1"
|
|
892
940
|
source = { editable = "." }
|
|
893
941
|
dependencies = [
|
|
894
942
|
{ name = "httpx" },
|
|
@@ -897,6 +945,7 @@ dependencies = [
|
|
|
897
945
|
|
|
898
946
|
[package.dev-dependencies]
|
|
899
947
|
dev = [
|
|
948
|
+
{ name = "mypy" },
|
|
900
949
|
{ name = "pre-commit-uv" },
|
|
901
950
|
{ name = "pytest" },
|
|
902
951
|
{ name = "pytest-coverage" },
|
|
@@ -919,6 +968,7 @@ requires-dist = [
|
|
|
919
968
|
|
|
920
969
|
[package.metadata.requires-dev]
|
|
921
970
|
dev = [
|
|
971
|
+
{ name = "mypy", specifier = ">=1.13.0" },
|
|
922
972
|
{ name = "pre-commit-uv", specifier = ">=4.1.4" },
|
|
923
973
|
{ name = "pytest", specifier = ">=8.2.1" },
|
|
924
974
|
{ name = "pytest-coverage", specifier = ">=0.0" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|