diff --git a/Taskfile.yml b/Taskfile.yml
index b0c66b31a..fa990bf12 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -132,6 +132,31 @@ tasks:
vars:
REFERENCE_DIR: docs/automate/cmemc-command-line-interface/command-reference
+ update:cmem-client-api:
+ desc: re-generates the cmem-client Python API reference (needs local cmem-client checkout)
+ summary: |
+ Regenerates docs/develop/cmem-client-api from the docstrings of a local
+ cmem-client checkout, via that repository's own `task docs:export-md`
+ (see etc/export_api_md.py there).
+
+ This documents whatever branch/commit is currently checked out in
+ CMEM_CLIENT_DIR, not necessarily the last release - check out the ref
+ you want documented before running this.
+
+ CMEM_CLIENT_DIR=/path/to/cmem-client task update:cmem-client-api
+ preconditions:
+ - sh: '[ -n "{{.CMEM_CLIENT_DIR}}" ]'
+ msg: |
+ CMEM_CLIENT_DIR is not set. Run this task with the path to a local
+ cmem-client checkout, e.g.:
+
+ CMEM_CLIENT_DIR=/path/to/cmem-client task update:cmem-client-api
+ cmds:
+ - rm -rf {{.REFERENCE_DIR}}/*
+ - task -d {{.CMEM_CLIENT_DIR}} docs:export-md OUTPUT_DIR={{.ROOT_DIR}}/{{.REFERENCE_DIR}}
+ vars:
+ REFERENCE_DIR: docs/develop/cmem-client-api
+
update:shape-reference:
desc: re-generates the shape and datatype references (needs local CO)
summary: >
diff --git a/docs/develop/.pages b/docs/develop/.pages
index 1d1dbc14b..eeba980ef 100644
--- a/docs/develop/.pages
+++ b/docs/develop/.pages
@@ -4,6 +4,7 @@ nav:
- Python Plugins: python-plugins
- Marketplace Packages: packages
- cmempy - Python API: cmempy-python-api
+ - cmem-client - Python API: cmem-client-api
- cmemc - Python Scripts: cmemc-scripts
- Build (DataIntegration) APIs: dataintegration-apis
- Explore backend APIs: dataplatform-apis
diff --git a/docs/develop/cmem-client-api/.pages b/docs/develop/cmem-client-api/.pages
new file mode 100644
index 000000000..87b75542e
--- /dev/null
+++ b/docs/develop/cmem-client-api/.pages
@@ -0,0 +1 @@
+title: cmem-client - Python API
diff --git a/docs/develop/cmem-client-api/auth_provider/.pages b/docs/develop/cmem-client-api/auth_provider/.pages
new file mode 100644
index 000000000..2908a642b
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/.pages
@@ -0,0 +1 @@
+title: Auth Provider
diff --git a/docs/develop/cmem-client-api/auth_provider/abc.md b/docs/develop/cmem-client-api/auth_provider/abc.md
new file mode 100644
index 000000000..0ae9a92a1
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/abc.md
@@ -0,0 +1,196 @@
+# `abc` {#cmem_client.auth_provider.abc}
+
+Abstract base class and factory for authentication providers.
+
+This module defines the AuthProvider abstract base class that establishes the
+interface all authentication providers must implement. It also provides a
+factory method that automatically selects the appropriate authentication
+provider based on environment variables.
+
+The factory method supports automatic configuration from environment variables,
+making it easy to switch between different authentication methods without
+code changes by simply setting the OAUTH_GRANT_TYPE environment variable.
+
+**Classes:**
+
+- [**AuthProvider**](#cmem_client.auth_provider.abc.AuthProvider) – Abstract base class for authentication providers.
+
+**Attributes:**
+
+- [**DEFAULT_OAUTH_CLIENT_ID**](#cmem_client.auth_provider.abc.DEFAULT_OAUTH_CLIENT_ID) –
+
+## `AuthProvider` {#cmem_client.auth_provider.abc.AuthProvider}
+
+Bases: ABC
+
+Abstract base class for authentication providers.
+
+AuthProvider defines the common interface that all authentication providers
+must implement to work with the Corporate Memory client. It provides the
+contract for obtaining access tokens and includes a factory method for
+creating appropriate provider instances based on environment configuration.
+
+All concrete authentication provider implementations must inherit from this
+class and implement the get_access_token method. The class also provides
+automatic provider selection through environment variables.
+
+**Functions:**
+
+- [**from_cmempy**](#cmem_client.auth_provider.abc.AuthProvider.from_cmempy) – Create an authentication provider from a cmempy environment.
+- [**from_context**](#cmem_client.auth_provider.abc.AuthProvider.from_context) – Create an authentication provider from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.auth_provider.abc.AuthProvider.from_dict) – Create an authentication provider from a plain dictionary.
+- [**from_env**](#cmem_client.auth_provider.abc.AuthProvider.from_env) – Create an authentication provider from environment variables.
+- [**get_access_token**](#cmem_client.auth_provider.abc.AuthProvider.get_access_token) – Get the access token for Bearer Authorization header.
+
+**Attributes:**
+
+- [**logger**](#cmem_client.auth_provider.abc.AuthProvider.logger) (Logger) – The logger for the auth provider.
+- [**preferred_username**](#cmem_client.auth_provider.abc.AuthProvider.preferred_username) (str) – The preferred username for the authentication provider.
+
+### `from_cmempy` {#cmem_client.auth_provider.abc.AuthProvider.from_cmempy}
+
+```python
+from_cmempy(config)
+```
+
+Create an authentication provider from a cmempy environment.
+
+### `from_context` {#cmem_client.auth_provider.abc.AuthProvider.from_context}
+
+```python
+from_context(context)
+```
+
+Create an authentication provider from a cmem-plugin-base context object.
+
+Wraps the token callable exposed by the context's ``UserContext`` in a
+``ProvidedToken`` provider.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``user`` attribute
+(``UserContext``) with a ``token()`` method that returns a
+valid bearer token.
+
+**Returns:**
+
+- [AuthProvider](#cmem_client.auth_provider.abc.AuthProvider) – A ``ProvidedToken`` authentication provider backed by the
+- [AuthProvider](#cmem_client.auth_provider.abc.AuthProvider) – context's ``UserContext.token()`` method.
+
+### `from_dict` {#cmem_client.auth_provider.abc.AuthProvider.from_dict}
+
+```python
+from_dict(config, d)
+```
+
+Create an authentication provider from a plain dictionary.
+
+Selects and configures the appropriate authentication provider based
+on the ``OAUTH_GRANT_TYPE`` key in the dictionary, defaulting to
+``"client_credentials"`` when not specified.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Configuration object containing Corporate Memory connection
+details and endpoint URLs.
+- **d** (dict[str, str]) – Dictionary of configuration values. The ``OAUTH_GRANT_TYPE`` key
+controls which provider is created. Remaining keys are forwarded
+to the selected provider's ``from_dict`` factory.
+
+**Returns:**
+
+- [AuthProvider](#cmem_client.auth_provider.abc.AuthProvider) – A configured AuthProvider instance.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If ``OAUTH_GRANT_TYPE`` is not a supported
+value or if required keys for the selected provider are missing.
+
+### `from_env` {#cmem_client.auth_provider.abc.AuthProvider.from_env}
+
+```python
+from_env(config)
+```
+
+Create an authentication provider from environment variables.
+
+This factory method automatically selects and configures the appropriate
+authentication provider based on the OAUTH_GRANT_TYPE environment variable.
+It supports multiple OAuth 2.0 flows and authentication methods.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Configuration object containing Corporate Memory connection
+details and endpoint URLs.
+
+**Returns:**
+
+- [AuthProvider](#cmem_client.auth_provider.abc.AuthProvider) – A configured AuthProvider instance appropriate for the environment
+- [AuthProvider](#cmem_client.auth_provider.abc.AuthProvider) – configuration.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the OAUTH_GRANT_TYPE is not supported or
+if required environment variables for the selected provider
+are missing.
+
+
+Environment Variables
+
+OAUTH_GRANT_TYPE (optional): The OAuth flow type. Defaults to
+ "client_credentials". Supported values:
+ - "client_credentials": Client Credentials Flow for M2M auth
+ - "password": Resource Owner Password Flow for trusted apps
+ - "prefetched_token": Use externally obtained access token
+
+
+
+### `get_access_token` {#cmem_client.auth_provider.abc.AuthProvider.get_access_token}
+
+```python
+get_access_token()
+```
+
+Get the access token for Bearer Authorization header.
+
+Also sets the preferred username for the authentication provider via the extracted token.
+
+**Returns:**
+
+- str – A valid access token string.
+
+**Raises:**
+
+- ValueError – If the provider returned no access token.
+
+
+Note
+
+Implementations should handle token refresh logic internally when
+tokens expire, ensuring this method always returns a valid token.
+
+
+
+### `logger` {#cmem_client.auth_provider.abc.AuthProvider.logger}
+
+```python
+logger: logging.Logger
+```
+
+The logger for the auth provider.
+
+### `preferred_username` {#cmem_client.auth_provider.abc.AuthProvider.preferred_username}
+
+```python
+preferred_username: str
+```
+
+The preferred username for the authentication provider.
+
+## `DEFAULT_OAUTH_CLIENT_ID` {#cmem_client.auth_provider.abc.DEFAULT_OAUTH_CLIENT_ID}
+
+```python
+DEFAULT_OAUTH_CLIENT_ID = 'cmem-service-account'
+```
+
diff --git a/docs/develop/cmem-client-api/auth_provider/client_credentials.md b/docs/develop/cmem-client-api/auth_provider/client_credentials.md
new file mode 100644
index 000000000..05f074d22
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/client_credentials.md
@@ -0,0 +1,324 @@
+# `client_credentials` {#cmem_client.auth_provider.client_credentials}
+
+Client Credentials OAuth 2.0 flow authentication provider.
+
+This module implements the Client Credentials Flow authentication method for
+accessing eccenca Corporate Memory via OAuth 2.0. This flow is designed for
+machine-to-machine authentication where no user interaction is required.
+
+The Client Credentials Flow exchanges client ID and client secret for an access
+token directly with the authorization server. It's ideal for backend services,
+APIs, and automated systems that need to authenticate without user involvement.
+
+This implementation handles token caching and automatic renewal when tokens expire.
+
+**Classes:**
+
+- [**ClientCredentialsFlow**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow) – Client Credentials OAuth 2.0 flow authentication provider.
+
+**Attributes:**
+
+- [**DEFAULT_OAUTH_CLIENT_SECRET**](#cmem_client.auth_provider.client_credentials.DEFAULT_OAUTH_CLIENT_SECRET) –
+
+## `ClientCredentialsFlow` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow}
+
+```python
+ClientCredentialsFlow(config, client_id, client_secret)
+```
+
+Bases: [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider)
+
+Client Credentials OAuth 2.0 flow authentication provider.
+
+Implements the Client Credentials Flow (RFC 6749, section 4.4) for machine-to-machine
+authentication with Corporate Memory via Keycloak. This flow exchanges client credentials
+(client ID and secret) directly for access tokens without user interaction.
+
+The provider handles automatic token caching and refresh, ensuring that get_access_token()
+always returns a valid, non-expired token. It's designed for backend services, CLIs,
+daemons, and other automated systems that need to authenticate as an application
+rather than on behalf of a user.
+
+**Attributes:**
+
+- [**client_id**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.client_id) (str) – The OAuth 2.0 client identifier for the application.
+- [**client_secret**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.client_secret) (str) – The confidential client secret for authentication.
+- [**config**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.config) ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing endpoint URLs.
+- [**httpx**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.httpx) (Client) – HTTP client for making token requests to the OAuth server.
+- [**token**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.token) ([KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken)) – Currently cached Keycloak token with expiration tracking.
+
+
+See Also
+
+https://auth0.com/docs/get-started/authentication-and-authorization-flow/client-credentials-flow
+https://tools.ietf.org/html/rfc6749#section-4.4
+
+
+
+**Functions:**
+
+- [**fetch_new_token**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.fetch_new_token) – Fetch a new access token from the OAuth 2.0 token endpoint.
+- [**from_cmempy**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_cmempy) – Create a Client Credentials Flow provider from a cmempy environment.
+- [**from_context**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_context) – Create an authentication provider from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_dict) – Create a Client Credentials Flow provider from a plain dictionary.
+- [**from_env**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_env) – Create a Client Credentials Flow provider from environment variables.
+- [**get_access_token**](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.get_access_token) – Get the access token for Bearer Authorization header.
+
+Creates a new provider instance and immediately fetches an initial access
+token. The provider will handle token refresh automatically when needed.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs
+and other connection details.
+- **client_id** (str) – The OAuth 2.0 client identifier registered with the
+authorization server.
+- **client_secret** (str) – The confidential client secret associated with the
+client_id for authentication.
+
+**Raises:**
+
+- HTTPError – If the initial token request fails due to network issues
+or invalid credentials.
+- ValidationError – If the token response cannot be parsed as a valid
+Keycloak token.
+
+
+Note
+
+The constructor makes an immediate HTTP request to fetch the initial
+token, so ensure network connectivity and valid credentials before
+instantiation.
+
+
+
+### `client_id` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.client_id}
+
+```python
+client_id: str = client_id
+```
+
+OAuth 2.0 client identifier used to identify the application to the authorization server.
+
+### `client_secret` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.client_secret}
+
+```python
+client_secret: str = client_secret
+```
+
+Confidential client secret used to authenticate the application with the OAuth server.
+
+### `config` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.config}
+
+```python
+config: Config = config
+```
+
+Corporate Memory configuration containing OAuth token endpoint and other URLs.
+
+### `fetch_new_token` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.fetch_new_token}
+
+```python
+fetch_new_token()
+```
+
+Fetch a new access token from the OAuth 2.0 token endpoint.
+
+Makes an HTTP POST request to the Keycloak token endpoint using the
+Client Credentials Flow parameters. The response is parsed and returned
+as a KeycloakToken object with automatic expiration tracking.
+
+**Returns:**
+
+- [KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken) – A new KeycloakToken instance with the fresh access token and
+- [KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken) – expiration information.
+
+**Raises:**
+
+- HTTPError – If the token request fails due to network issues,
+invalid credentials, or server errors.
+- ValidationError – If the token response cannot be parsed as a
+valid Keycloak token format.
+
+
+Note
+
+This method performs a synchronous HTTP request and should not be
+called directly in most cases. Use get_access_token() instead,
+which handles caching and only calls this method when necessary.
+
+
+
+
+Implementation Details
+
+- Uses the standard OAuth 2.0 Client Credentials Flow parameters
+- Sends credentials in the request body (not in Authorization header)
+- Automatically decodes the JSON response and validates the format
+- Extracts JWT claims for expiration tracking
+
+
+
+### `from_cmempy` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_cmempy}
+
+```python
+from_cmempy(config)
+```
+
+Create a Client Credentials Flow provider from a cmempy environment.
+
+### `from_context` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_context}
+
+```python
+from_context(context)
+```
+
+Create an authentication provider from a cmem-plugin-base context object.
+
+Wraps the token callable exposed by the context's ``UserContext`` in a
+``ProvidedToken`` provider.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``user`` attribute
+(``UserContext``) with a ``token()`` method that returns a
+valid bearer token.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A ``ProvidedToken`` authentication provider backed by the
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – context's ``UserContext.token()`` method.
+
+### `from_dict` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_dict}
+
+```python
+from_dict(config, d)
+```
+
+Create a Client Credentials Flow provider from a plain dictionary.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs.
+- **d** (dict[str, str]) – Dictionary of configuration values. Expected keys:
+``OAUTH_CLIENT_ID`` (optional, defaults to ``"cmem-service-account"``)
+and ``OAUTH_CLIENT_SECRET`` (required).
+
+**Returns:**
+
+- [ClientCredentialsFlow](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow) – A configured ClientCredentialsFlow instance.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If ``OAUTH_CLIENT_SECRET`` is missing or empty.
+
+### `from_env` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.from_env}
+
+```python
+from_env(config)
+```
+
+Create a Client Credentials Flow provider from environment variables.
+
+This factory method creates a provider instance by reading OAuth client
+credentials from environment variables. It's the recommended way to
+create providers in production environments where credentials are
+managed externally.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs.
+
+**Returns:**
+
+- [ClientCredentialsFlow](#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow) – A configured ClientCredentialsFlow instance ready for use.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the required OAUTH_CLIENT_SECRET environment
+variable is not set.
+
+
+Environment Variables
+
+OAUTH_CLIENT_ID (optional): The OAuth 2.0 client identifier.
+ Defaults to "cmem-service-account" if not specified.
+OAUTH_CLIENT_SECRET (required): The confidential client secret
+ for authentication. Must be provided.
+
+
+
+
+Security Note
+
+Client secrets should be stored securely and never committed to
+version control. Use environment variables or secure secret
+management systems in production.
+
+
+
+### `get_access_token` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.get_access_token}
+
+```python
+get_access_token()
+```
+
+Get the access token for Bearer Authorization header.
+
+Also sets the preferred username for the authentication provider via the extracted token.
+
+**Returns:**
+
+- str – A valid access token string.
+
+**Raises:**
+
+- ValueError – If the provider returned no access token.
+
+
+Note
+
+Implementations should handle token refresh logic internally when
+tokens expire, ensuring this method always returns a valid token.
+
+
+
+### `httpx` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.httpx}
+
+```python
+httpx: httpx.Client = httpx.Client(verify=config.verify, headers=config.extra_headers)
+```
+
+HTTP client instance used for making requests to the OAuth token endpoint.
+
+### `logger` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.logger}
+
+```python
+logger: logging.Logger = logging.getLogger(__name__)
+```
+
+Logger object for logging.
+
+### `preferred_username` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.preferred_username}
+
+```python
+preferred_username: str
+```
+
+The preferred username for the authentication provider.
+
+### `token` {#cmem_client.auth_provider.client_credentials.ClientCredentialsFlow.token}
+
+```python
+token: KeycloakToken = self.fetch_new_token()
+```
+
+Currently cached access token with automatic expiration tracking and JWT parsing.
+
+## `DEFAULT_OAUTH_CLIENT_SECRET` {#cmem_client.auth_provider.client_credentials.DEFAULT_OAUTH_CLIENT_SECRET}
+
+```python
+DEFAULT_OAUTH_CLIENT_SECRET = 'c8c12828-000c-467b-9b6d-2d6b5e16df4a'
+```
+
diff --git a/docs/develop/cmem-client-api/auth_provider/password.md b/docs/develop/cmem-client-api/auth_provider/password.md
new file mode 100644
index 000000000..afd44cfad
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/password.md
@@ -0,0 +1,359 @@
+# `password` {#cmem_client.auth_provider.password}
+
+Resource Owner Password OAuth 2.0 flow authentication provider.
+
+This module implements the Resource Owner Password Flow authentication method,
+which allows highly-trusted applications to authenticate users by collecting
+their username and password credentials directly.
+
+Security Warning: This flow should only be used by absolutely trusted
+applications as it requires handling user passwords directly. It's typically
+used for legacy applications or first-party applications where other OAuth flows
+are not feasible.
+
+This implementation handles token caching and automatic renewal when tokens expire,
+similar to the Client Credentials Flow but using username/password credentials.
+
+**Classes:**
+
+- [**PasswordFlow**](#cmem_client.auth_provider.password.PasswordFlow) – Resource Owner Password OAuth 2.0 flow authentication provider.
+
+## `PasswordFlow` {#cmem_client.auth_provider.password.PasswordFlow}
+
+```python
+PasswordFlow(config, client_id, username, password)
+```
+
+Bases: [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider)
+
+Resource Owner Password OAuth 2.0 flow authentication provider.
+
+Security Warning: This authentication flow should only be used by
+absolutely trusted applications as it requires handling user passwords directly.
+
+Implements the Resource Owner Password Flow (RFC 6749, section 4.3) for
+authentication with Corporate Memory via Keycloak. This flow exchanges user
+credentials (username and password) directly for access tokens, bypassing
+the standard OAuth 2.0 authorization code flow.
+
+This provider handles automatic token caching and refresh, ensuring that
+get_access_token() always returns a valid token. It's typically used for
+legacy applications, first-party applications, or scenarios where the standard
+OAuth flows are not feasible.
+
+**Attributes:**
+
+- [**client_id**](#cmem_client.auth_provider.password.PasswordFlow.client_id) (str) – The OAuth 2.0 client identifier for the application.
+- [**username**](#cmem_client.auth_provider.password.PasswordFlow.username) (str) – The user's username for authentication.
+- [**password**](#cmem_client.auth_provider.password.PasswordFlow.password) (str) – The user's password for authentication.
+- [**config**](#cmem_client.auth_provider.password.PasswordFlow.config) ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing endpoint URLs.
+- [**httpx**](#cmem_client.auth_provider.password.PasswordFlow.httpx) (Client) – HTTP client for making token requests to the OAuth server.
+- [**token**](#cmem_client.auth_provider.password.PasswordFlow.token) ([KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken)) – Currently cached Keycloak token with expiration tracking.
+
+
+Security Considerations
+
+- User credentials are sent directly to the authorization server
+- Passwords may be stored in memory for token refresh purposes
+- Only use in highly trusted applications with secure credential handling
+- Consider using Client Credentials Flow for machine-to-machine auth instead
+
+
+
+
+See Also
+
+https://auth0.com/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow
+https://tools.ietf.org/html/rfc6749#section-4.3
+
+
+
+**Functions:**
+
+- [**fetch_new_token**](#cmem_client.auth_provider.password.PasswordFlow.fetch_new_token) – Fetch a new access token from the OAuth 2.0 token endpoint.
+- [**from_cmempy**](#cmem_client.auth_provider.password.PasswordFlow.from_cmempy) – Create a Password Flow provider from a cmempy environment.
+- [**from_context**](#cmem_client.auth_provider.password.PasswordFlow.from_context) – Create an authentication provider from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.auth_provider.password.PasswordFlow.from_dict) – Create a Password Flow provider from a plain dictionary.
+- [**from_env**](#cmem_client.auth_provider.password.PasswordFlow.from_env) – Create a Password Flow provider from environment variables.
+- [**get_access_token**](#cmem_client.auth_provider.password.PasswordFlow.get_access_token) – Get the access token for Bearer Authorization header.
+
+Security Warning: This constructor stores the user's password in memory
+for potential token refresh operations. Only use in absolutely trusted applications.
+
+Creates a new provider instance and immediately fetches an initial access
+token. The provider will handle token refresh automatically when needed.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs
+and other connection details.
+- **client_id** (str) – The OAuth 2.0 client identifier registered with the
+authorization server.
+- **username** (str) – The user's username or email address for authentication.
+- **password** (str) – The user's password for authentication.
+
+**Raises:**
+
+- HTTPError – If the initial token request fails due to network issues
+or invalid credentials.
+- ValidationError – If the token response cannot be parsed as a valid
+Keycloak token.
+
+
+Security Note
+
+The constructor makes an immediate HTTP request to fetch the initial
+token, sending the user's credentials over the network. Ensure secure
+network connections (HTTPS) and proper credential handling.
+
+
+
+### `client_id` {#cmem_client.auth_provider.password.PasswordFlow.client_id}
+
+```python
+client_id: str = client_id
+```
+
+OAuth 2.0 client identifier used to identify the application to the authorization server.
+
+### `config` {#cmem_client.auth_provider.password.PasswordFlow.config}
+
+```python
+config: Config = config
+```
+
+Corporate Memory configuration containing OAuth token endpoint and other URLs.
+
+### `fetch_new_token` {#cmem_client.auth_provider.password.PasswordFlow.fetch_new_token}
+
+```python
+fetch_new_token()
+```
+
+Fetch a new access token from the OAuth 2.0 token endpoint.
+
+Security Warning: This method sends user credentials (username and password)
+over the network to the authorization server. Ensure secure connections (HTTPS).
+
+Makes an HTTP POST request to the Keycloak token endpoint using the
+Resource Owner Password Flow parameters. The response is parsed and returned
+as a KeycloakToken object with automatic expiration tracking.
+
+**Returns:**
+
+- [KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken) – A new KeycloakToken instance with the fresh access token and
+- [KeycloakToken](../models/token.md#cmem_client.models.token.KeycloakToken) – expiration information.
+
+**Raises:**
+
+- HTTPError – If the token request fails due to network issues,
+invalid credentials, or server errors.
+- ValidationError – If the token response cannot be parsed as a
+valid Keycloak token format.
+
+
+Security Considerations
+
+- User credentials are sent in plaintext (over HTTPS)
+- Consider the security implications of credential reuse for token refresh
+- Monitor for credential compromise if tokens are frequently refreshed
+
+
+
+
+Note
+
+This method performs a synchronous HTTP request and should not be
+called directly in most cases. Use get_access_token() instead,
+which handles caching and only calls this method when necessary.
+
+
+
+
+Implementation Details
+
+- Uses the standard OAuth 2.0 Resource Owner Password Flow parameters
+- Sends credentials in the request body (not in Authorization header)
+- Automatically decodes the JSON response and validates the format
+- Extracts JWT claims for expiration tracking
+
+
+
+### `from_cmempy` {#cmem_client.auth_provider.password.PasswordFlow.from_cmempy}
+
+```python
+from_cmempy(config)
+```
+
+Create a Password Flow provider from a cmempy environment.
+
+### `from_context` {#cmem_client.auth_provider.password.PasswordFlow.from_context}
+
+```python
+from_context(context)
+```
+
+Create an authentication provider from a cmem-plugin-base context object.
+
+Wraps the token callable exposed by the context's ``UserContext`` in a
+``ProvidedToken`` provider.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``user`` attribute
+(``UserContext``) with a ``token()`` method that returns a
+valid bearer token.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A ``ProvidedToken`` authentication provider backed by the
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – context's ``UserContext.token()`` method.
+
+### `from_dict` {#cmem_client.auth_provider.password.PasswordFlow.from_dict}
+
+```python
+from_dict(config, d)
+```
+
+Create a Password Flow provider from a plain dictionary.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs.
+- **d** (dict[str, str]) – Dictionary of configuration values. Expected keys:
+``OAUTH_USER`` (required), ``OAUTH_PASSWORD`` (required),
+and ``OAUTH_CLIENT_ID`` (optional, defaults to ``"cmem-service-account"``).
+
+**Returns:**
+
+- [PasswordFlow](#cmem_client.auth_provider.password.PasswordFlow) – A configured PasswordFlow instance.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If ``OAUTH_USER`` or ``OAUTH_PASSWORD`` are missing.
+
+### `from_env` {#cmem_client.auth_provider.password.PasswordFlow.from_env}
+
+```python
+from_env(config)
+```
+
+Create a Password Flow provider from environment variables.
+
+Security Warning: This method reads user credentials from environment
+variables, which may be visible in process lists or logs. Use with extreme caution.
+
+This factory method creates a provider instance by reading user credentials
+from environment variables. While more secure than hardcoded credentials,
+environment variables should be properly protected in production environments.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration containing OAuth endpoint URLs.
+
+**Returns:**
+
+- [PasswordFlow](#cmem_client.auth_provider.password.PasswordFlow) – A configured PasswordFlow instance ready for use.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the required OAUTH_USER or OAUTH_PASSWORD
+environment variables are not set.
+
+
+Environment Variables
+
+OAUTH_USER (required): The username or email address for authentication.
+ Must be a valid user account in the Corporate Memory system.
+OAUTH_PASSWORD (required): The user's password for authentication.
+ Should be handled securely and not logged.
+OAUTH_CLIENT_ID (optional): The OAuth 2.0 client identifier.
+ Defaults to "cmem-service-account" if not specified.
+
+
+
+
+Security Notes
+
+- Environment variables may be visible in process lists
+- Use secure credential management in production environments
+- Consider using Client Credentials Flow for service accounts instead
+- Ensure proper access controls on systems storing these credentials
+
+
+
+### `get_access_token` {#cmem_client.auth_provider.password.PasswordFlow.get_access_token}
+
+```python
+get_access_token()
+```
+
+Get the access token for Bearer Authorization header.
+
+Also sets the preferred username for the authentication provider via the extracted token.
+
+**Returns:**
+
+- str – A valid access token string.
+
+**Raises:**
+
+- ValueError – If the provider returned no access token.
+
+
+Note
+
+Implementations should handle token refresh logic internally when
+tokens expire, ensuring this method always returns a valid token.
+
+
+
+### `httpx` {#cmem_client.auth_provider.password.PasswordFlow.httpx}
+
+```python
+httpx: httpx.Client = httpx.Client(verify=config.verify, headers=config.extra_headers)
+```
+
+HTTP client instance used for making requests to the OAuth token endpoint.
+
+### `logger` {#cmem_client.auth_provider.password.PasswordFlow.logger}
+
+```python
+logger: logging.Logger = logging.getLogger(__name__)
+```
+
+Logger object used to log messages.
+
+### `password` {#cmem_client.auth_provider.password.PasswordFlow.password}
+
+```python
+password: str = password
+```
+
+User's password for authentication. ⚠️ Stored in memory for token refresh.
+
+### `preferred_username` {#cmem_client.auth_provider.password.PasswordFlow.preferred_username}
+
+```python
+preferred_username: str
+```
+
+The preferred username for the authentication provider.
+
+### `token` {#cmem_client.auth_provider.password.PasswordFlow.token}
+
+```python
+token: KeycloakToken = self.fetch_new_token()
+```
+
+Currently cached access token with automatic expiration tracking and JWT parsing.
+
+### `username` {#cmem_client.auth_provider.password.PasswordFlow.username}
+
+```python
+username: str = username
+```
+
+User's username/email for authentication with the OAuth server.
+
diff --git a/docs/develop/cmem-client-api/auth_provider/prefetched_token.md b/docs/develop/cmem-client-api/auth_provider/prefetched_token.md
new file mode 100644
index 000000000..6c91341a6
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/prefetched_token.md
@@ -0,0 +1,242 @@
+# `prefetched_token` {#cmem_client.auth_provider.prefetched_token}
+
+Prefetched token authentication provider.
+
+This module provides an authentication provider for scenarios where access tokens
+are obtained through external means rather than through OAuth flows. This is useful
+for environments where tokens are managed by external systems, CI/CD pipelines,
+or when integrating with existing authentication infrastructure.
+
+The PrefetchedToken provider simply stores and returns a pre-obtained access token
+without performing any token refresh or validation. It's the responsibility of the
+external system to ensure the token is valid and renewed when necessary.
+
+This approach is often used in containerized environments, serverless functions,
+or when tokens are managed by orchestration platforms.
+
+**Classes:**
+
+- [**PrefetchedToken**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken) – Authentication provider for externally managed access tokens.
+
+## `PrefetchedToken` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken}
+
+```python
+PrefetchedToken(prefetched_token)
+```
+
+Bases: [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider)
+
+Authentication provider for externally managed access tokens.
+
+PrefetchedToken is designed for scenarios where access tokens are obtained
+and managed by external systems rather than through standard OAuth 2.0 flows.
+This provider simply stores and returns a pre-obtained token without performing
+any validation, refresh, or expiration checking.
+
+This approach is commonly used in:
+- Containerized environments where tokens are injected at runtime
+- CI/CD pipelines with token management systems
+- Serverless functions with external authentication services
+- Integration with existing authentication infrastructure
+- Short-lived execution contexts where token refresh isn't needed
+
+**Attributes:**
+
+- [**prefetched_token**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.prefetched_token) (str) – The pre-obtained access token to be used for authentication.
+
+
+Important Notes
+
+- No token validation or expiration checking is performed
+- Token refresh is not supported; external systems must handle renewal
+- The token is assumed to be valid and properly formatted
+- Suitable for short-lived processes or external token management scenarios
+
+
+
+
+See Also
+
+For automatic token management with refresh capabilities, consider using
+ClientCredentialsFlow or PasswordFlow instead.
+
+
+
+**Functions:**
+
+- [**from_cmempy**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_cmempy) – Create a Prefetched Token provider from a cmempy environment.
+- [**from_context**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_context) – Create an authentication provider from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_dict) – Create a Prefetched Token provider from a plain dictionary.
+- [**from_env**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_env) – Create a Prefetched Token provider from environment variables.
+- [**get_access_token**](#cmem_client.auth_provider.prefetched_token.PrefetchedToken.get_access_token) – Get the access token for Bearer Authorization header.
+
+Creates a provider instance that stores the given access token for use
+in authentication requests. No validation or processing is performed
+on the token; it is stored as-is.
+
+**Parameters:**
+
+- **prefetched_token** (str) – A pre-obtained access token string. The token
+should be valid, properly formatted (typically JWT), and
+have appropriate permissions for Corporate Memory operations.
+
+
+Note
+
+Unlike other authentication providers, this constructor does not
+make any network requests or perform token validation. The token
+is assumed to be valid and ready for immediate use.
+
+
+
+### `from_cmempy` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_cmempy}
+
+```python
+from_cmempy(config)
+```
+
+Create a Prefetched Token provider from a cmempy environment.
+
+### `from_context` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_context}
+
+```python
+from_context(context)
+```
+
+Create an authentication provider from a cmem-plugin-base context object.
+
+Wraps the token callable exposed by the context's ``UserContext`` in a
+``ProvidedToken`` provider.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``user`` attribute
+(``UserContext``) with a ``token()`` method that returns a
+valid bearer token.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A ``ProvidedToken`` authentication provider backed by the
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – context's ``UserContext.token()`` method.
+
+### `from_dict` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_dict}
+
+```python
+from_dict(config, d)
+```
+
+Create a Prefetched Token provider from a plain dictionary.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration object. Not used by
+PrefetchedToken but required for interface consistency.
+- **d** (dict[str, str]) – Dictionary of configuration values. Expected key:
+``OAUTH_ACCESS_TOKEN`` (required).
+
+**Returns:**
+
+- [PrefetchedToken](#cmem_client.auth_provider.prefetched_token.PrefetchedToken) – A configured PrefetchedToken instance.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If ``OAUTH_ACCESS_TOKEN`` is missing or empty.
+
+### `from_env` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.from_env}
+
+```python
+from_env(config)
+```
+
+Create a Prefetched Token provider from environment variables.
+
+This factory method creates a provider instance by reading a pre-obtained
+access token from the OAUTH_ACCESS_TOKEN environment variable.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Corporate Memory configuration object. Note that this parameter
+is not used by PrefetchedToken but is required to maintain
+consistency with other AuthProvider implementations.
+
+**Returns:**
+
+- [PrefetchedToken](#cmem_client.auth_provider.prefetched_token.PrefetchedToken) – A configured PrefetchedToken instance ready for use.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the required OAUTH_ACCESS_TOKEN environment
+variable is not set or is empty.
+
+
+Environment Variables
+
+OAUTH_ACCESS_TOKEN (required): The pre-obtained access token.
+ Should be a valid JWT or other token format accepted by
+ Corporate Memory. The token must have appropriate permissions
+ for the intended operations.
+
+
+
+
+Use Cases
+
+- Docker containers with token injection
+- Kubernetes pods with secret mounting
+- CI/CD pipelines with secure token storage
+- Serverless functions with environment-based configuration
+- Integration with external token management systems
+
+
+
+### `get_access_token` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.get_access_token}
+
+```python
+get_access_token()
+```
+
+Get the access token for Bearer Authorization header.
+
+Also sets the preferred username for the authentication provider via the extracted token.
+
+**Returns:**
+
+- str – A valid access token string.
+
+**Raises:**
+
+- ValueError – If the provider returned no access token.
+
+
+Note
+
+Implementations should handle token refresh logic internally when
+tokens expire, ensuring this method always returns a valid token.
+
+
+
+### `logger` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.logger}
+
+```python
+logger: logging.Logger = logging.getLogger(__name__)
+```
+
+Logger object for logging.
+
+### `preferred_username` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.preferred_username}
+
+```python
+preferred_username: str
+```
+
+The preferred username for the authentication provider.
+
+### `prefetched_token` {#cmem_client.auth_provider.prefetched_token.PrefetchedToken.prefetched_token}
+
+```python
+prefetched_token: str = prefetched_token
+```
+
+The pre-obtained access token used for authentication requests.
+
diff --git a/docs/develop/cmem-client-api/auth_provider/provided_token.md b/docs/develop/cmem-client-api/auth_provider/provided_token.md
new file mode 100644
index 000000000..095b6cc89
--- /dev/null
+++ b/docs/develop/cmem-client-api/auth_provider/provided_token.md
@@ -0,0 +1,204 @@
+# `provided_token` {#cmem_client.auth_provider.provided_token}
+
+Provided token authentication provider.
+
+This module provides an authentication provider for scenarios where access tokens
+are obtained by calling a method on a user-provided object. This enables integration
+with custom authentication systems, third-party libraries, or dynamic token generation
+logic that is managed outside the cmem-client library.
+
+The ProvidedToken provider delegates token retrieval to a callable method on an
+external object, allowing maximum flexibility for custom authentication workflows
+while maintaining compatibility with the Corporate Memory client interface.
+
+**Classes:**
+
+- [**ProvidedToken**](#cmem_client.auth_provider.provided_token.ProvidedToken) – Authentication provider that retrieves tokens by calling a method on a provided object.
+
+## `ProvidedToken` {#cmem_client.auth_provider.provided_token.ProvidedToken}
+
+```python
+ProvidedToken(provider_object, method_name)
+```
+
+Bases: [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider)
+
+Authentication provider that retrieves tokens by calling a method on a provided object.
+
+This provider enables integration with custom authentication systems by delegating
+token retrieval to a callable method on an external object.
+
+**Attributes:**
+
+- [**provider_object**](#cmem_client.auth_provider.provided_token.ProvidedToken.provider_object) (object) – The object containing the token retrieval method.
+- [**method_name**](#cmem_client.auth_provider.provided_token.ProvidedToken.method_name) (str) – The name of the method to call for retrieving tokens.
+- [**logger**](#cmem_client.auth_provider.provided_token.ProvidedToken.logger) (Logger) – Logger for the authentication provider.
+
+**Functions:**
+
+- [**from_cmempy**](#cmem_client.auth_provider.provided_token.ProvidedToken.from_cmempy) – Create an authentication provider from a cmempy environment.
+- [**from_context**](#cmem_client.auth_provider.provided_token.ProvidedToken.from_context) – Create an authentication provider from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.auth_provider.provided_token.ProvidedToken.from_dict) – Create an authentication provider from a plain dictionary.
+- [**from_env**](#cmem_client.auth_provider.provided_token.ProvidedToken.from_env) – Create an authentication provider from environment variables.
+- [**get_access_token**](#cmem_client.auth_provider.provided_token.ProvidedToken.get_access_token) – Get the access token for Bearer Authorization header.
+
+**Parameters:**
+
+- **provider_object** (object) – Object with a callable method that returns access tokens.
+- **method_name** (str) – Name of the method to call on provider_object.
+
+**Raises:**
+
+- AttributeError – If provider_object does not have the specified method.
+
+### `from_cmempy` {#cmem_client.auth_provider.provided_token.ProvidedToken.from_cmempy}
+
+```python
+from_cmempy(config)
+```
+
+Create an authentication provider from a cmempy environment.
+
+### `from_context` {#cmem_client.auth_provider.provided_token.ProvidedToken.from_context}
+
+```python
+from_context(context)
+```
+
+Create an authentication provider from a cmem-plugin-base context object.
+
+Wraps the token callable exposed by the context's ``UserContext`` in a
+``ProvidedToken`` provider.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``user`` attribute
+(``UserContext``) with a ``token()`` method that returns a
+valid bearer token.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A ``ProvidedToken`` authentication provider backed by the
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – context's ``UserContext.token()`` method.
+
+### `from_dict` {#cmem_client.auth_provider.provided_token.ProvidedToken.from_dict}
+
+```python
+from_dict(config, d)
+```
+
+Create an authentication provider from a plain dictionary.
+
+Selects and configures the appropriate authentication provider based
+on the ``OAUTH_GRANT_TYPE`` key in the dictionary, defaulting to
+``"client_credentials"`` when not specified.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Configuration object containing Corporate Memory connection
+details and endpoint URLs.
+- **d** (dict[str, str]) – Dictionary of configuration values. The ``OAUTH_GRANT_TYPE`` key
+controls which provider is created. Remaining keys are forwarded
+to the selected provider's ``from_dict`` factory.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A configured AuthProvider instance.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If ``OAUTH_GRANT_TYPE`` is not a supported
+value or if required keys for the selected provider are missing.
+
+### `from_env` {#cmem_client.auth_provider.provided_token.ProvidedToken.from_env}
+
+```python
+from_env(config)
+```
+
+Create an authentication provider from environment variables.
+
+This factory method automatically selects and configures the appropriate
+authentication provider based on the OAUTH_GRANT_TYPE environment variable.
+It supports multiple OAuth 2.0 flows and authentication methods.
+
+**Parameters:**
+
+- **config** ([Config](../config.md#cmem_client.config.Config)) – Configuration object containing Corporate Memory connection
+details and endpoint URLs.
+
+**Returns:**
+
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – A configured AuthProvider instance appropriate for the environment
+- [AuthProvider](../auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – configuration.
+
+**Raises:**
+
+- [ClientEnvConfigError](../exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the OAUTH_GRANT_TYPE is not supported or
+if required environment variables for the selected provider
+are missing.
+
+
+Environment Variables
+
+OAUTH_GRANT_TYPE (optional): The OAuth flow type. Defaults to
+ "client_credentials". Supported values:
+ - "client_credentials": Client Credentials Flow for M2M auth
+ - "password": Resource Owner Password Flow for trusted apps
+ - "prefetched_token": Use externally obtained access token
+
+
+
+### `get_access_token` {#cmem_client.auth_provider.provided_token.ProvidedToken.get_access_token}
+
+```python
+get_access_token()
+```
+
+Get the access token for Bearer Authorization header.
+
+Also sets the preferred username for the authentication provider via the extracted token.
+
+**Returns:**
+
+- str – A valid access token string.
+
+**Raises:**
+
+- ValueError – If the provider returned no access token.
+
+
+Note
+
+Implementations should handle token refresh logic internally when
+tokens expire, ensuring this method always returns a valid token.
+
+
+
+### `logger` {#cmem_client.auth_provider.provided_token.ProvidedToken.logger}
+
+```python
+logger: logging.Logger = logging.getLogger(__name__)
+```
+
+### `method_name` {#cmem_client.auth_provider.provided_token.ProvidedToken.method_name}
+
+```python
+method_name: str = method_name
+```
+
+### `preferred_username` {#cmem_client.auth_provider.provided_token.ProvidedToken.preferred_username}
+
+```python
+preferred_username: str
+```
+
+The preferred username for the authentication provider.
+
+### `provider_object` {#cmem_client.auth_provider.provided_token.ProvidedToken.provider_object}
+
+```python
+provider_object: object = provider_object
+```
+
diff --git a/docs/develop/cmem-client-api/components/.pages b/docs/develop/cmem-client-api/components/.pages
new file mode 100644
index 000000000..9937383b7
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/.pages
@@ -0,0 +1 @@
+title: Components
diff --git a/docs/develop/cmem-client-api/components/deployment.md b/docs/develop/cmem-client-api/components/deployment.md
new file mode 100644
index 000000000..ff636dd54
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/deployment.md
@@ -0,0 +1,52 @@
+# `deployment` {#cmem_client.components.deployment}
+
+Corporate Memory deployment status component.
+
+Provides the Deployment component for aggregating version and health
+information across all Corporate Memory services (DataIntegration,
+DataPlatform, shapes catalog, and graph store).
+
+**Classes:**
+
+- [**Deployment**](#cmem_client.components.deployment.Deployment) – High-level interface for Corporate Memory deployment status.
+
+## `Deployment` {#cmem_client.components.deployment.Deployment}
+
+```python
+Deployment(client)
+```
+
+High-level interface for Corporate Memory deployment status.
+
+Aggregates version and health information across all Corporate Memory
+components (DataIntegration, DataPlatform, shapes catalog, graph store).
+Per-component failures are captured rather than raised, so a partial
+outage still returns a populated StatusInfo for the healthy components.
+
+**Functions:**
+
+- [**get_status**](#cmem_client.components.deployment.Deployment.get_status) – Aggregate version and health information across all components.
+
+**Attributes:**
+
+- [**logger**](#cmem_client.components.deployment.Deployment.logger) –
+
+### `get_status` {#cmem_client.components.deployment.Deployment.get_status}
+
+```python
+get_status()
+```
+
+Aggregate version and health information across all components.
+
+**Returns:**
+
+- [StatusInfo](../models/status.md#cmem_client.models.status.StatusInfo) – StatusInfo with version, health, and error per component. The
+- [StatusInfo](../models/status.md#cmem_client.models.status.StatusInfo) – overall health is exposed via the StatusInfo.health property.
+
+### `logger` {#cmem_client.components.deployment.Deployment.logger}
+
+```python
+logger = logging.getLogger(f'{self._client.logger.name}.{self.__class__.__name__}')
+```
+
diff --git a/docs/develop/cmem-client-api/components/graph_store.md b/docs/develop/cmem-client-api/components/graph_store.md
new file mode 100644
index 000000000..64a82919b
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/graph_store.md
@@ -0,0 +1,433 @@
+# `graph_store` {#cmem_client.components.graph_store}
+
+Corporate Memory DataPlatform (explore) graph store management.
+
+This module provides the GraphStore component for managing Corporate Memory's
+DataPlatform graph store. The graph store is the primary repository for RDF
+data and knowledge graphs, supporting semantic queries and exploration.
+
+The GraphStore component provides high-level administrative operations including
+bootstrap data management, full store backup and restoration, and system
+information retrieval. These operations are essential for store maintenance,
+deployment, and operational monitoring.
+
+**Classes:**
+
+- [**GraphStore**](#cmem_client.components.graph_store.GraphStore) – High-level interface for Corporate Memory DataPlatform graph store operations.
+- [**StoreInformation**](#cmem_client.components.graph_store.StoreInformation) – Information about the graph store instance and its capabilities.
+
+**Attributes:**
+
+- [**AUTHORIZATION_GRAPH_URI**](#cmem_client.components.graph_store.AUTHORIZATION_GRAPH_URI) – The URI of the access conditions graph. Deleting or importing this graph requires an authorization refresh.
+
+## `AUTHORIZATION_GRAPH_URI` {#cmem_client.components.graph_store.AUTHORIZATION_GRAPH_URI}
+
+```python
+AUTHORIZATION_GRAPH_URI = 'https://ns.eccenca.com/data/ac/'
+```
+
+The URI of the access conditions graph. Deleting or importing this graph requires an authorization refresh.
+
+## `GraphStore` {#cmem_client.components.graph_store.GraphStore}
+
+```python
+GraphStore(client)
+```
+
+High-level interface for Corporate Memory DataPlatform graph store operations.
+
+The GraphStore component provides administrative and operational methods for
+managing the Corporate Memory DataPlatform graph store. It handles store-level
+operations including bootstrap data management, full backup and restoration,
+and system information retrieval.
+
+This component abstracts the complexities of the DataPlatform API and provides
+a convenient interface for common graph store management tasks. It's designed
+for administrative operations rather than individual graph manipulation
+(use repositories for graph-level operations).
+
+**Attributes:**
+
+- **_client** ([Client](../index.md#cmem_client.client.Client)) – The Corporate Memory client instance used for API communication.
+- **_sparql_wrapper** ([SPARQLWrapper](../components/sparql_wrapper.md#cmem_client.components.sparql_wrapper.SPARQLWrapper)) – SPARQLWrapper instance for rdflib SPARQL queries.
+
+
+Administrative Operations
+
+- Full store backup and restoration
+- Bootstrap data management (system vocabularies, etc.)
+
+
+
+
+See Also
+
+For individual graph operations, use the repositories.graphs module
+which provides CRUD operations for specific RDF graphs.
+
+
+
+**Functions:**
+
+- [**create_showcase_data**](#cmem_client.components.graph_store.GraphStore.create_showcase_data) – Create showcase data in the graph store.
+- [**delete_bootstrap_data**](#cmem_client.components.graph_store.GraphStore.delete_bootstrap_data) – Delete bootstrap data from the graph store.
+- [**export_to_zip**](#cmem_client.components.graph_store.GraphStore.export_to_zip) – Export a complete backup of the graph store as a ZIP archive.
+- [**import_bootstrap_data**](#cmem_client.components.graph_store.GraphStore.import_bootstrap_data) – Import or update bootstrap data in the graph store.
+- [**import_from_zip**](#cmem_client.components.graph_store.GraphStore.import_from_zip) – Import and restore a complete graph store backup from a ZIP archive.
+
+Creates a GraphStore component that uses the provided client for
+API communication with the DataPlatform graph store.
+
+**Parameters:**
+
+- **client** ([Client](../index.md#cmem_client.client.Client)) – A configured Corporate Memory client instance with
+authentication and endpoint configuration.
+
+
+Note
+
+This constructor is typically called automatically by the
+Client class when accessing the store property. Direct
+instantiation is rarely needed in normal usage.
+
+
+
+### `create_showcase_data` {#cmem_client.components.graph_store.GraphStore.create_showcase_data}
+
+```python
+create_showcase_data(scale_factor=None)
+```
+
+Create showcase data in the graph store.
+
+Inserts a showcase scenario of multiple graphs including integration
+graphs, shapes, statement annotations, etc. Useful for demonstration
+and testing environments.
+
+**Parameters:**
+
+- **scale_factor** (int | None) – Multiplies the default showcase dataset by this factor.
+A value of 10 results in around 40k triples, a value of
+50 in around 350k triples. Defaults to the server default when None.
+
+**Raises:**
+
+- HTTPError – If the showcase creation request fails due to network
+issues or server errors.
+
+### `delete_bootstrap_data` {#cmem_client.components.graph_store.GraphStore.delete_bootstrap_data}
+
+```python
+delete_bootstrap_data()
+```
+
+Delete bootstrap data from the graph store.
+
+Warning: This operation removes system vocabularies and foundational
+RDF data required for proper Corporate Memory operation. Use with extreme caution.
+
+Removes all bootstrap data including system vocabularies, ontologies,
+and other foundational RDF graphs. This is typically used for cleanup
+during testing, or system reset.
+
+**Raises:**
+
+- HTTPError – If the bootstrap deletion request fails due to network
+issues or server errors.
+
+
+Caution
+
+After deleting bootstrap data, the Corporate Memory system may not
+function correctly until new bootstrap data is imported. This
+operation should typically be followed by import_bootstrap_data().
+
+
+
+
+Use Cases
+
+- System reset during testing
+- Troubleshooting corrupted system vocabularies
+- Development environment reset
+
+
+
+### `export_to_zip` {#cmem_client.components.graph_store.GraphStore.export_to_zip}
+
+```python
+export_to_zip(path)
+```
+
+Export a complete backup of the graph store as a ZIP archive.
+
+Creates a full backup of the entire Corporate Memory DataPlatform graph store,
+including all RDF graphs, system vocabularies, and metadata. The backup is
+streamed directly to the specified file path as a compressed ZIP archive.
+
+This operation creates a point-in-time snapshot that can be used for:
+- Disaster recovery and backup strategies
+- Environment migration and cloning
+- System maintenance and testing
+- Data archival and compliance requirements
+
+**Parameters:**
+
+- **path** (Path) – The file system path where the ZIP backup archive will be saved.
+The path should include the .zip extension and the parent directory
+must exist and be writable.
+
+**Raises:**
+
+- HTTPError – If the backup request fails due to network issues, server
+errors, or insufficient permissions.
+- OSError – If the specified path cannot be written to due to file system
+permissions or disk space issues.
+
+
+Performance Notes
+
+- The backup is streamed directly to disk to minimize memory usage
+- Large stores may take significant time to back up completely
+- Network bandwidth and storage I/O will impact backup duration
+- The operation blocks until the entire backup is complete
+
+
+
+
+Security Considerations
+
+- Backup files contain all graph data and should be stored securely
+- Consider encryption for sensitive data in backup archives
+- Ensure appropriate access controls on backup storage locations
+- Backup files may contain authentication tokens or sensitive metadata
+
+
+
+
+See Also
+
+Use import_from_zip() to restore from backup archives created by this method.
+
+
+
+### `import_bootstrap_data` {#cmem_client.components.graph_store.GraphStore.import_bootstrap_data}
+
+```python
+import_bootstrap_data()
+```
+
+Import or update bootstrap data in the graph store.
+
+Bootstrap data includes system vocabularies, ontologies, and other
+foundational RDF data required for proper Corporate Memory operation.
+This operation ensures the store contains all necessary system-level
+graphs and vocabularies.
+
+**Raises:**
+
+- HTTPError – If the bootstrap import request fails due to network
+issues or server errors.
+
+
+Note
+
+This operation may take some time.
+It's typically performed during system initialization or when
+updating to new Corporate Memory versions that include new
+system vocabularies.
+
+
+
+
+Use Cases
+
+- Initial system setup
+- System updates with new vocabularies
+- Recovery after bootstrap data corruption
+
+
+
+### `import_from_zip` {#cmem_client.components.graph_store.GraphStore.import_from_zip}
+
+```python
+import_from_zip(path)
+```
+
+Import and restore a complete graph store backup from a ZIP archive.
+
+Warning: This operation replaces ALL existing data in the graph store.
+All current graphs, vocabularies, and metadata will be permanently deleted
+and replaced with the contents of the backup archive.
+
+Restores a Corporate Memory DataPlatform graph store from a ZIP backup
+archive created by export_to_zip(). The restoration process completely
+replaces the current store contents with the archived data, effectively
+rolling back the store to the state captured in the backup.
+
+**Parameters:**
+
+- **path** (Path) – The file system path to the ZIP backup archive to import.
+The file must be a valid backup archive created by export_to_zip()
+or compatible with the Corporate Memory backup format.
+
+**Raises:**
+
+- HTTPError – If the restore request fails due to network issues, server
+errors, insufficient permissions, or invalid backup format.
+- OSError – If the specified backup file cannot be read due to file system
+permissions or if the file does not exist.
+- ValidationError – If the backup archive format is invalid or corrupted.
+
+
+Important Warnings
+
+- **Data Loss**: All existing graphs and data will be permanently deleted
+- **Downtime**: The store may be unavailable during the restoration process
+- **Irreversible**: This operation cannot be undone without another backup
+- **Compatibility**: Ensure backup compatibility with current store version
+
+
+
+
+Performance Notes
+
+- Large backup archives may take significant time to restore
+- The store will be unavailable during the restoration process
+- Network bandwidth and storage I/O will impact restoration duration
+- Memory usage is optimized through streaming file upload
+
+
+
+
+Use Cases
+
+- Disaster recovery from catastrophic data loss
+- Environment synchronization and cloning
+- Rolling back to known good state after issues
+- Migrating data between Corporate Memory instances
+- Testing and development environment setup
+
+
+
+
+See Also
+
+Use export_to_zip() to create backup archives for import with this method.
+
+
+
+### `logger` {#cmem_client.components.graph_store.GraphStore.logger}
+
+```python
+logger = logging.getLogger(f'{self._client.logger.name}.{self.__class__.__name__}')
+```
+
+### `self_information` {#cmem_client.components.graph_store.GraphStore.self_information}
+
+```python
+self_information: StoreInformation
+```
+
+Get metadata and version information about the graph store instance.
+
+Retrieves information about the Corporate Memory DataPlatform
+graph store, including the store implementation type and version.
+
+The information is fetched from the store's actuator endpoint, which
+provides real-time metadata about the running graph store instance.
+
+**Returns:**
+
+- **StoreInformation** ([StoreInformation](#cmem_client.components.graph_store.StoreInformation)) – A model containing store type and version information.
+The returned object includes the store implementation name
+(e.g., "GRAPHDB", "TENTRIS") and its version string.
+
+**Raises:**
+
+- HTTPError – If the information request fails due to network issues,
+server errors, or insufficient permissions to access actuator endpoints.
+- ValidationError – If the response cannot be parsed as valid store
+information due to unexpected response format.
+
+
+Performance Notes
+
+- This property makes a live HTTP request on each access
+- Consider caching the result if accessed frequently
+- The actuator endpoint is typically lightweight and fast-responding
+- Network latency will impact response time for this property
+
+
+
+
+Security Notes
+
+- Actuator endpoints may reveal system information
+- Ensure appropriate access controls on actuator endpoints
+- Store version information should be treated as potentially sensitive
+
+
+
+### `sparql` {#cmem_client.components.graph_store.GraphStore.sparql}
+
+```python
+sparql: SPARQLWrapper
+```
+
+Get a SPARQLWrapper instance for rdflib-based SPARQL queries.
+
+Returns a SPARQLWrapper component configured with authentication
+for executing SPARQL queries using rdflib. The wrapper provides
+access to the Corporate Memory SPARQL endpoint with automatic
+authentication handling.
+
+**Returns:**
+
+- [SPARQLWrapper](../components/sparql_wrapper.md#cmem_client.components.sparql_wrapper.SPARQLWrapper) – The SPARQLWrapper component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> sparql_wrapper = client.store.sparql
+```
+
+## `StoreInformation` {#cmem_client.components.graph_store.StoreInformation}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Information about the graph store instance and its capabilities.
+
+This model represents metadata about the DataPlatform graph store,
+including the store type and version information. This information
+is useful for compatibility checks, monitoring, and debugging.
+
+**Attributes:**
+
+- [**type**](#cmem_client.components.graph_store.StoreInformation.type) (str) – The type of graph store (e.g., "GRAPHDB", "TENTRIS").
+- [**version**](#cmem_client.components.graph_store.StoreInformation.version) (str) – The version string of the graph store implementation.
+
+### `model_config` {#cmem_client.components.graph_store.StoreInformation.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `type` {#cmem_client.components.graph_store.StoreInformation.type}
+
+```python
+type: str
+```
+
+The type/implementation of the graph store (e.g., "GRAPHDB", "TENTRIS").
+
+### `version` {#cmem_client.components.graph_store.StoreInformation.version}
+
+```python
+version: str
+```
+
+The version string of the graph store implementation.
+
diff --git a/docs/develop/cmem-client-api/components/marketplace.md b/docs/develop/cmem-client-api/components/marketplace.md
new file mode 100644
index 000000000..f6810e39e
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/marketplace.md
@@ -0,0 +1,261 @@
+# `marketplace` {#cmem_client.components.marketplace}
+
+eccenca Marketplace server integration.
+
+This module provides the Marketplace component for interacting with the eccenca
+Marketplace server. The component handles package downloads, uploads and version queries,
+abstracting the marketplace REST API into a convenient Python interface.
+
+The eccenca Marketplace is a central repository for distributing Corporate Memory
+packages, including vocabularies, ontologies, and Python plugins. This component
+enables automated package retrieval for installation and dependency resolution.
+
+**Classes:**
+
+- [**Marketplace**](#cmem_client.components.marketplace.Marketplace) – Interface for eccenca Marketplace server operations.
+
+**Attributes:**
+
+- [**LICENSE_HEADER**](#cmem_client.components.marketplace.LICENSE_HEADER) – Header carrying the encrypted license on outbound marketplace requests.
+- [**MARKETPLACE_CACHE_DIR**](#cmem_client.components.marketplace.MARKETPLACE_CACHE_DIR) –
+
+## `LICENSE_HEADER` {#cmem_client.components.marketplace.LICENSE_HEADER}
+
+```python
+LICENSE_HEADER = 'x-eccenca-auth'
+```
+
+Header carrying the encrypted license on outbound marketplace requests.
+
+## `MARKETPLACE_CACHE_DIR` {#cmem_client.components.marketplace.MARKETPLACE_CACHE_DIR}
+
+```python
+MARKETPLACE_CACHE_DIR = xdg_cache_home() / 'eccenca-marketplace'
+```
+
+## `Marketplace` {#cmem_client.components.marketplace.Marketplace}
+
+```python
+Marketplace(client, marketplace_url='https://eccenca.market', cache_dir=MARKETPLACE_CACHE_DIR, credentials=None, timeout=30, license_issuer_url=None)
+```
+
+Interface for eccenca Marketplace server operations.
+
+The Marketplace component provides methods for downloading, uploading and deleting
+packages from the eccenca Marketplace server. It handles version resolution, package retrieval,
+and writing downloaded content to the filesystem.
+
+**Attributes:**
+
+- **_client** ([Client](../index.md#cmem_client.client.Client)) – The Corporate Memory client instance used for HTTP communication.
+- **_marketplace_url** ([HttpUrl](../models/url.md#cmem_client.models.url.HttpUrl)) – Default marketplace server URL for package operations.
+- **_cache_dir** (Path | None) – Directory to use for cached downloads.
+
+**Functions:**
+
+- [**delete_package**](#cmem_client.components.marketplace.Marketplace.delete_package) – Delete a package from the marketplace server.
+- [**download_package**](#cmem_client.components.marketplace.Marketplace.download_package) – Download a package from the marketplace server to a specified directory.
+- [**get_available_packages**](#cmem_client.components.marketplace.Marketplace.get_available_packages) – Get the available packages from the marketplace server.
+- [**get_marketplace_keycloak_token**](#cmem_client.components.marketplace.Marketplace.get_marketplace_keycloak_token) – Get the marketplace keycloak token from the marketplace server provided keycloak instance.
+- [**get_versions_from_package**](#cmem_client.components.marketplace.Marketplace.get_versions_from_package) – Get the available versions of a package from the marketplace server.
+- [**upload_package**](#cmem_client.components.marketplace.Marketplace.upload_package) – Upload a local package to the marketplace server.
+
+**Parameters:**
+
+- **client** ([Client](../index.md#cmem_client.client.Client)) – The Corporate Memory client instance.
+- **marketplace_url** ([HttpUrl](../models/url.md#cmem_client.models.url.HttpUrl) | str) – Default marketplace server URL. Defaults to the public eccenca Marketplace.
+- **cache_dir** (Path | None) – Directory to use for cached downloads. If set to None, caching is disabled.
+- **credentials** ([BaseCredentials](../models/credentials.md#cmem_client.models.credentials.BaseCredentials) | None) – The credentials used to authenticate with the marketplace server. Setting this attribute
+is needed for write operations on the server.
+- **timeout** (int) – The timeout to wait for a response from the marketplace server. Defaults to 30 seconds.
+- **license_issuer_url** ([HttpUrl](../models/url.md#cmem_client.models.url.HttpUrl) | str | None) – The local marketplace whose ``/api/session`` mints the encrypted license token
+attached as ``x-eccenca-auth`` to outbound requests. Defaults to
+``client.config.url_marketplace`` (the marketplace bundled beside Corporate Memory).
+
+### `cache_dir` {#cmem_client.components.marketplace.Marketplace.cache_dir}
+
+```python
+cache_dir: Path | None
+```
+
+Get the cache directory.
+
+### `credentials` {#cmem_client.components.marketplace.Marketplace.credentials}
+
+```python
+credentials: BaseCredentials | None
+```
+
+Get the marketplace credentials.
+
+### `delete_package` {#cmem_client.components.marketplace.Marketplace.delete_package}
+
+```python
+delete_package(package_id)
+```
+
+Delete a package from the marketplace server.
+
+**Parameters:**
+
+- **package_id** (PackageIdentifier) – Marketplace package identifier of the package to be deleted.
+
+**Raises:**
+
+- [MarketplaceAuthError](../exceptions.md#cmem_client.exceptions.MarketplaceAuthError) – If the token could not be provided.
+- [MarketplaceDeleteError](../exceptions.md#cmem_client.exceptions.MarketplaceDeleteError) – If the deletion was rejected by the marketplace server.
+- HTTPError – If the marketplace server request fails.
+
+### `download_package` {#cmem_client.components.marketplace.Marketplace.download_package}
+
+```python
+download_package(package_id, path=None, package_version=None, use_cache=True)
+```
+
+Download a package from the marketplace server to a specified directory.
+
+Queries the marketplace server for available versions and downloads the
+requested package version. If no version is specified, downloads the latest
+available version. The package is saved with the naming convention:
+{package_id}-v{version}.cpa
+
+If the package already exists in the cache, it will be reused instead of
+re-downloading.
+
+**Parameters:**
+
+- **package_id** (PackageIdentifier) – Marketplace package identifier (e.g., "semanticarts-gist-vocab").
+- **path** (Path | None) – Target directory where the package will be saved. If None, uses the
+cache directory. Must be a directory, not a file path.
+- **package_version** (PackageVersionIdentifier | None) – Specific version to download. If None, downloads the latest version.
+- **use_cache** (bool) – If True, use cached version if available instead of downloading.
+
+**Returns:**
+
+- Path – The full file path where the package was saved (e.g.,
+- Path – /path/to/cache/semanticarts-gist-vocab-v13.0.0.cpa).
+
+**Raises:**
+
+- [MarketplaceReadError](../exceptions.md#cmem_client.exceptions.MarketplaceReadError) – If the marketplace server request fails or the package/version is not found.
+
+### `get_available_packages` {#cmem_client.components.marketplace.Marketplace.get_available_packages}
+
+```python
+get_available_packages()
+```
+
+Get the available packages from the marketplace server.
+
+### `get_marketplace_keycloak_token` {#cmem_client.components.marketplace.Marketplace.get_marketplace_keycloak_token}
+
+```python
+get_marketplace_keycloak_token(credentials=None)
+```
+
+Get the marketplace keycloak token from the marketplace server provided keycloak instance.
+
+This method first fetches the keycloak token URL needed from the marketplace server.
+After this it fetches a token with the given credentials and provides it for
+further authentication of protected routes.
+
+When no credentials parameter is given, it uses the class attribute of the marketplace component.
+
+**Parameters:**
+
+- **credentials** ([BaseCredentials](../models/credentials.md#cmem_client.models.credentials.BaseCredentials) | None) – Marketplace keycloak credentials.
+
+**Returns:**
+
+- str – The marketplace keycloak token.
+
+**Raises:**
+
+- [MarketplaceAuthError](../exceptions.md#cmem_client.exceptions.MarketplaceAuthError) – If no token could be provided.
+
+### `get_versions_from_package` {#cmem_client.components.marketplace.Marketplace.get_versions_from_package}
+
+```python
+get_versions_from_package(package_id)
+```
+
+Get the available versions of a package from the marketplace server.
+
+**Parameters:**
+
+- **package_id** (PackageIdentifier) – Marketplace package identifier.
+
+**Returns:**
+
+- list[PackageVersionIdentifier] – List of package versions available, newest first.
+
+**Raises:**
+
+- [MarketplaceReadError](../exceptions.md#cmem_client.exceptions.MarketplaceReadError) – If the versions could not be retrieved from the
+marketplace server.
+
+### `http` {#cmem_client.components.marketplace.Marketplace.http}
+
+```python
+http: httpx.Client
+```
+
+Get the HTTP client instance for making API requests.
+
+Returns the configured HTTP client, creating it lazily on first access.
+The client is pre-configured with the timeout value. Authentication headers
+are added per-request by the individual methods that require them.
+
+**Returns:**
+
+- Client – The httpx.Client instance configured for the marketplace component.
+
+### `license_issuer_url` {#cmem_client.components.marketplace.Marketplace.license_issuer_url}
+
+```python
+license_issuer_url: HttpUrl
+```
+
+Get the local marketplace URL used as the license-token issuer.
+
+### `logger` {#cmem_client.components.marketplace.Marketplace.logger}
+
+```python
+logger = logging.getLogger(f'{self._client.logger.name}.{self.__class__.__name__}')
+```
+
+### `marketplace_url` {#cmem_client.components.marketplace.Marketplace.marketplace_url}
+
+```python
+marketplace_url: HttpUrl
+```
+
+Get the marketplace server URL.
+
+### `timeout` {#cmem_client.components.marketplace.Marketplace.timeout}
+
+```python
+timeout: int
+```
+
+Get the marketplace timeout.
+
+### `upload_package` {#cmem_client.components.marketplace.Marketplace.upload_package}
+
+```python
+upload_package(package_id, path)
+```
+
+Upload a local package to the marketplace server.
+
+**Parameters:**
+
+- **package_id** (PackageIdentifier) – Marketplace package identifier of the package to be uploaded.
+- **path** (Path) – Path of the package to be uploaded. Must be a valid .cpa file.
+
+**Raises:**
+
+- [MarketplaceAuthError](../exceptions.md#cmem_client.exceptions.MarketplaceAuthError) – If the token could not be provided.
+- [MarketplaceWriteError](../exceptions.md#cmem_client.exceptions.MarketplaceWriteError) – If the upload was rejected by the marketplace server.
+- HTTPError – If the marketplace server request fails.
+
diff --git a/docs/develop/cmem-client-api/components/sparql_wrapper.md b/docs/develop/cmem-client-api/components/sparql_wrapper.md
new file mode 100644
index 000000000..0ee21aab9
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/sparql_wrapper.md
@@ -0,0 +1,49 @@
+# `sparql_wrapper` {#cmem_client.components.sparql_wrapper}
+
+SPARQL Wrapper for eccenca Corporate Memory
+
+**Classes:**
+
+- [**SPARQLWrapper**](#cmem_client.components.sparql_wrapper.SPARQLWrapper) – Sparql wrapper class
+
+## `SPARQLWrapper` {#cmem_client.components.sparql_wrapper.SPARQLWrapper}
+
+```python
+SPARQLWrapper(sparql_endpoint, update_endpoint, client)
+```
+
+Bases: SPARQLConnector
+
+Sparql wrapper class
+
+**Functions:**
+
+- [**query**](#cmem_client.components.sparql_wrapper.SPARQLWrapper.query) – Query a SPARQL endpoint.
+- [**update**](#cmem_client.components.sparql_wrapper.SPARQLWrapper.update) – Perform update SPARQL query.
+
+**Attributes:**
+
+- [**logger**](#cmem_client.components.sparql_wrapper.SPARQLWrapper.logger) –
+
+### `logger` {#cmem_client.components.sparql_wrapper.SPARQLWrapper.logger}
+
+```python
+logger = logging.getLogger(f'{self._client.logger.name}.{self.__class__.__name__}')
+```
+
+### `query` {#cmem_client.components.sparql_wrapper.SPARQLWrapper.query}
+
+```python
+query(query, default_graph=None, named_graph=None, owl_imports_resolution=True)
+```
+
+Query a SPARQL endpoint.
+
+### `update` {#cmem_client.components.sparql_wrapper.SPARQLWrapper.update}
+
+```python
+update(query, default_graph=None, named_graph=None)
+```
+
+Perform update SPARQL query.
+
diff --git a/docs/develop/cmem-client-api/components/workspace.md b/docs/develop/cmem-client-api/components/workspace.md
new file mode 100644
index 000000000..62136a902
--- /dev/null
+++ b/docs/develop/cmem-client-api/components/workspace.md
@@ -0,0 +1,287 @@
+# `workspace` {#cmem_client.components.workspace}
+
+Corporate Memory DataIntegration (build) workspace management.
+
+This module provides the BuildWorkspace component for managing Corporate Memory's
+DataIntegration workspace. The workspace contains projects, datasets, transformations,
+and other integration artifacts organized in a hierarchical structure.
+
+The BuildWorkspace component provides high-level operations for workspace backup
+and restoration, allowing entire workspace snapshots to be exported and imported
+as ZIP archives. This is essential for deployment, migration, and disaster recovery
+scenarios.
+
+**Classes:**
+
+- [**BuildWorkspace**](#cmem_client.components.workspace.BuildWorkspace) – High-level interface for Corporate Memory DataIntegration workspace operations.
+
+## `BuildWorkspace` {#cmem_client.components.workspace.BuildWorkspace}
+
+```python
+BuildWorkspace(client)
+```
+
+High-level interface for Corporate Memory DataIntegration workspace operations.
+
+The BuildWorkspace component provides administrative and operational methods for
+managing the Corporate Memory DataIntegration (build) workspace. It handles
+workspace-level operations including complete backup and restoration of all
+workspace contents as ZIP archives.
+
+The workspace contains all DataIntegration artifacts including:
+- Projects and their configurations
+- Datasets and data sources
+- Transformation workflows and mapping rules
+- Workflow definitions and scheduling configurations
+
+This component abstracts the complexities of the DataIntegration API and provides
+a convenient interface for workspace-wide administrative tasks.
+
+**Attributes:**
+
+- **_client** ([Client](../index.md#cmem_client.client.Client)) – The Corporate Memory client instance used for API communication.
+
+
+Administrative Operations
+
+- Complete workspace backup and restoration
+- Environment synchronization and migration
+- Disaster recovery and rollback capabilities
+- Deployment automation and CI/CD integration
+
+
+
+
+See Also
+
+For individual project operations, use the repositories.projects module
+which provides CRUD operations for specific DataIntegration projects.
+
+
+
+**Functions:**
+
+- [**export_to_zip**](#cmem_client.components.workspace.BuildWorkspace.export_to_zip) – Export a complete backup of the workspace as a ZIP archive.
+- [**get_marshalling_plugins**](#cmem_client.components.workspace.BuildWorkspace.get_marshalling_plugins) – Get the list of marshalling plugins.
+- [**get_status**](#cmem_client.components.workspace.BuildWorkspace.get_status) – Get the loading status of the whole workspace.
+- [**import_from_zip**](#cmem_client.components.workspace.BuildWorkspace.import_from_zip) – Import and restore a complete workspace backup from a ZIP archive.
+- [**reload_workspace**](#cmem_client.components.workspace.BuildWorkspace.reload_workspace) – Reload the workspace.
+- [**retrieve_access_control_configuration**](#cmem_client.components.workspace.BuildWorkspace.retrieve_access_control_configuration) – Retrieves the current access control configuration.
+
+Creates a BuildWorkspace component that uses the provided client for
+API communication with the DataIntegration workspace endpoints.
+
+**Parameters:**
+
+- **client** ([Client](../index.md#cmem_client.client.Client)) – A configured Corporate Memory client instance with
+authentication and endpoint configuration.
+
+
+Note
+
+This constructor is typically called automatically by the
+Client class when accessing the workspace property. Direct
+instantiation is rarely needed in normal usage.
+
+
+
+### `export_to_zip` {#cmem_client.components.workspace.BuildWorkspace.export_to_zip}
+
+```python
+export_to_zip(path, marshalling_plugin='xmlZip', include_access_conditions=False, export_user_data=True)
+```
+
+Export a complete backup of the workspace as a ZIP archive.
+
+Creates a comprehensive backup of the entire Corporate Memory DataIntegration
+workspace, including all projects, datasets, transformations, vocabularies,
+workflows, and configurations. The backup is streamed directly to the
+specified file path as a compressed ZIP archive.
+
+This operation creates a point-in-time snapshot of the complete workspace
+that can be used for:
+- Environment migration and synchronization
+- Disaster recovery and backup strategies
+- Development and testing environment setup
+- Deployment automation and CI/CD pipelines
+- Team collaboration and workspace sharing
+
+**Parameters:**
+
+- **path** (Path) – The file system path where the ZIP workspace archive will be saved.
+The path should include the .zip extension and the parent directory
+must exist and be writable.
+- **marshalling_plugin** (str) – The type of marshalling plugin to use.
+- **include_access_conditions** (bool) – Whether to include project specific access conditions.
+- **export_user_data** (bool) – Whether to include user-identifying metadata (created/modified
+timestamps and account names). If False, this data is removed from the archive.
+
+**Raises:**
+
+- HTTPError – If the export request fails due to network issues, server
+errors, or insufficient permissions.
+- OSError – If the specified path cannot be written to due to file system
+permissions or disk space issues.
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the server reports that the export failed.
+
+
+Performance Notes
+
+- The export is streamed directly to disk to minimize memory usage
+- Large workspaces may take significant time to export completely
+- Network bandwidth and storage I/O will impact export duration
+- The operation blocks until the entire workspace is exported
+- Export size depends on workspace complexity and resource files
+
+
+
+
+Security Considerations
+
+- Workspace archives contain all project data and configurations
+- May include database connection strings and access credentials
+- Should be stored securely with appropriate access controls
+- Consider encryption for sensitive workspace data
+- Review archive contents before sharing or transferring
+
+
+
+
+Use Cases
+
+- **Environment Promotion**: Move workspace from dev to production
+- **Disaster Recovery**: Regular backups for business continuity
+- **Team Onboarding**: Share workspace setups with new team members
+- **CI/CD Integration**: Automated workspace deployment pipelines
+- **Migration Support**: Transfer workspaces between instances
+- **Version Control**: Track workspace state changes over time
+
+
+
+
+See Also
+
+Use import_from_zip() to restore workspace archives created by this method.
+
+
+
+### `get_marshalling_plugins` {#cmem_client.components.workspace.BuildWorkspace.get_marshalling_plugins}
+
+```python
+get_marshalling_plugins()
+```
+
+Get the list of marshalling plugins.
+
+### `get_status` {#cmem_client.components.workspace.BuildWorkspace.get_status}
+
+```python
+get_status()
+```
+
+Get the loading status of the whole workspace.
+
+Reports task loading errors for all projects in a single response.
+Only projects with at least one failed task are listed.
+
+**Returns:**
+
+- [WorkspaceStatus](../models/workspace_status.md#cmem_client.models.workspace_status.WorkspaceStatus) – The workspace status, listing the failed tasks per project.
+
+### `import_from_zip` {#cmem_client.components.workspace.BuildWorkspace.import_from_zip}
+
+```python
+import_from_zip(path, marshalling_plugin='xmlZip', include_access_conditions=False)
+```
+
+Import and restore a complete workspace backup from a ZIP archive.
+
+Warning: This operation overwrites existing workspace content.
+All projects, datasets, transformations, and other workspace artifacts will be
+replaced or removed during the import process.
+
+Restores a Corporate Memory DataIntegration workspace from a ZIP backup
+archive created by export_to_zip(). The import process loads all workspace
+artifacts including projects, datasets, transformations, vocabularies,
+and configurations from the archive into the current workspace.
+
+**Parameters:**
+
+- **path** (Path) – The file system path to the ZIP backup archive to import.
+The file must be a valid workspace backup archive created by
+export_to_zip() or compatible with the DataIntegration workspace format.
+- **marshalling_plugin** (str) – The type of marshalling plugin to use for import.
+- **include_access_conditions** (bool) – Whether to include project specific access conditions.
+
+**Returns:**
+
+- **Response** (Response) – The HTTP response object from the import operation.
+Check response.status_code for success (200) and response.json()
+for detailed import results and any warnings or errors.
+
+**Raises:**
+
+- HTTPError – If the import request fails due to network issues, server
+errors, insufficient permissions, or invalid archive format.
+- OSError – If the specified backup file cannot be read due to file system
+permissions or if the file does not exist.
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the server reports that the import failed.
+
+
+Important Considerations
+
+- **Data Validation**: Invalid configurations in the archive may cause failures
+- **Dependency Resolution**: Project dependencies must be satisfied after import
+
+
+
+
+Performance Notes
+
+- Large workspace archives may take significant time to import
+- The workspace may be partially unavailable during import
+- Network bandwidth affects upload speed for large archives
+- Import processing time depends on workspace complexity
+
+
+
+
+Use Cases
+
+- Environment synchronization between development and production
+- Workspace migration between Corporate Memory instances
+- Disaster recovery from workspace backups
+- Deployment automation and CI/CD pipeline integration
+- Team collaboration and workspace sharing
+
+
+
+
+See Also
+
+Use export_to_zip() to create workspace archives for import with this method.
+
+
+
+### `logger` {#cmem_client.components.workspace.BuildWorkspace.logger}
+
+```python
+logger = logging.getLogger(f'{self._client.logger.name}.{self.__class__.__name__}')
+```
+
+### `reload_workspace` {#cmem_client.components.workspace.BuildWorkspace.reload_workspace}
+
+```python
+reload_workspace()
+```
+
+Reload the workspace.
+
+### `retrieve_access_control_configuration` {#cmem_client.components.workspace.BuildWorkspace.retrieve_access_control_configuration}
+
+```python
+retrieve_access_control_configuration()
+```
+
+Retrieves the current access control configuration.
+
diff --git a/docs/develop/cmem-client-api/config.md b/docs/develop/cmem-client-api/config.md
new file mode 100644
index 000000000..5f480b9ed
--- /dev/null
+++ b/docs/develop/cmem-client-api/config.md
@@ -0,0 +1,352 @@
+# `config` {#cmem_client.config}
+
+Configuration management for the Corporate Memory client.
+
+This module provides the Config class that handles all configuration aspects
+of the Corporate Memory client, including URL construction, SSL verification,
+authentication endpoints, and environment variable parsing.
+
+The Config class automatically constructs various API endpoints based on a base URL
+and provides flexible configuration through both programmatic setup and environment
+variables, making it suitable for different deployment environments.
+
+**Classes:**
+
+- [**Config**](#cmem_client.config.Config) – Corporate Memory Client configuration.
+
+**Attributes:**
+
+- [**DEFAULT_CMEM_BASE_URI**](#cmem_client.config.DEFAULT_CMEM_BASE_URI) –
+
+## `Config` {#cmem_client.config.Config}
+
+```python
+Config(url_base, realm_id='cmem')
+```
+
+Corporate Memory Client configuration.
+
+The Config class manages all configuration aspects for connecting to Corporate
+Memory instances, including URL construction, SSL verification, timeout settings,
+and authentication endpoints. It provides both programmatic configuration and
+automatic configuration from environment variables.
+
+The class automatically constructs various API endpoints based on a base URL
+and realm configuration, with support for customizing individual endpoints
+when needed for complex deployment scenarios.
+
+**Attributes:**
+
+- **_realm_id** (str) – The Keycloak realm identifier for authentication.
+- **_verify** (bool | str) – SSL/TLS certificate verification flag.
+- **_url_base** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – Base URL of the Corporate Memory instance.
+- **_url_keycloak** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – Base URL of the Keycloak authentication server.
+- **_url_keycloak_issuer** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – Keycloak realm issuer URL for token validation.
+- **_url_build_api** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – DataIntegration (build) API endpoint URL.
+- **_url_explore_api** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – DataPlatform (explore) API endpoint URL.
+- **_url_oauth_token** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl)) – OAuth token endpoint URL for authentication.
+- [**timeout**](#cmem_client.config.Config.timeout) (int | None) – HTTP request timeout in seconds.
+
+**Functions:**
+
+- [**from_cmempy**](#cmem_client.config.Config.from_cmempy) – Create a Config instance from a cmempy environment.
+- [**from_context**](#cmem_client.config.Config.from_context) – Create a Config instance from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.config.Config.from_dict) – Create a Config instance from a plain dictionary of configuration values.
+- [**from_env**](#cmem_client.config.Config.from_env) – Create a Config instance from environment variables.
+
+**Parameters:**
+
+- **url_base** ([HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) | str) – The base URL of the Corporate Memory instance. Can be
+provided as either an HttpUrl object or a string that will
+be converted to HttpUrl.
+- **realm_id** (str) – The Keycloak realm identifier for authentication.
+Defaults to "cmem" for standard Corporate Memory deployments.
+
+### `extra_headers` {#cmem_client.config.Config.extra_headers}
+
+```python
+extra_headers: dict[str, str] = {}
+```
+
+Extra HTTP headers to include with every request, e.g. from CMEMC_CUSTOM_HEADER_* vars.
+
+### `from_cmempy` {#cmem_client.config.Config.from_cmempy}
+
+```python
+from_cmempy()
+```
+
+Create a Config instance from a cmempy environment.
+
+### `from_context` {#cmem_client.config.Config.from_context}
+
+```python
+from_context(context)
+```
+
+Create a Config instance from a cmem-plugin-base context object.
+
+Reads connection URLs directly from the context's ``SystemContext``,
+making manual environment variable configuration unnecessary inside
+Corporate Memory Python plugins.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``system`` attribute
+(``SystemContext``) providing ``cmem_base_uri()``,
+``di_api_endpoint()``, and ``dp_api_endpoint()``.
+
+**Returns:**
+
+- [Config](#cmem_client.config.Config) – A Config instance populated with URLs from the context's
+- [Config](#cmem_client.config.Config) – ``SystemContext``.
+
+**Raises:**
+
+- [ClientEnvConfigError](exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the base URL returned by the context's
+``SystemContext`` is empty or missing.
+
+### `from_dict` {#cmem_client.config.Config.from_dict}
+
+```python
+from_dict(d)
+```
+
+Create a Config instance from a plain dictionary of configuration values.
+
+This factory method creates a configuration by reading values from a
+plain dictionary. The expected keys mirror the environment variable names
+used by ``from_env()``, making it easy to pass config-file sections or
+test fixtures without mutating ``os.environ``.
+
+**Parameters:**
+
+- **d** (dict[str, str]) – A mapping of configuration keys to string values. Keys follow
+the same naming convention as environment variables (e.g.
+``"CMEM_BASE_URI"``, ``"SSL_VERIFY"``).
+
+**Returns:**
+
+- [Config](#cmem_client.config.Config) – A Config instance configured with values from the dictionary.
+
+**Raises:**
+
+- [ClientEnvConfigError](exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the required ``CMEM_BASE_URI`` key is
+missing or empty.
+
+
+Keys
+
+CMEM_BASE_URI (required): Base URL of the Corporate Memory instance.
+DI_API_ENDPOINT (optional): DataIntegration API endpoint override.
+DP_API_ENDPOINT (optional): DataPlatform API endpoint override.
+KEYCLOAK_BASE_URI (optional): Keycloak server URL override.
+KEYCLOAK_REALM_ID (optional): Keycloak realm identifier override.
+OAUTH_TOKEN_URI (optional): OAuth token endpoint override.
+MARKETPLACE_BASE_URI (optional): Local marketplace (license issuer) override.
+SSL_VERIFY (optional): Set to ``"false"`` to disable SSL verification.
+REQUESTS_CA_BUNDLE (optional): Path to a custom CA bundle file.
+
+
+
+### `from_env` {#cmem_client.config.Config.from_env}
+
+```python
+from_env()
+```
+
+Create a Config instance from environment variables.
+
+This factory method creates a configuration by reading various environment
+variables that specify Corporate Memory connection details. It provides
+a convenient way to configure the client in containerized or cloud
+environments where configuration is managed through environment variables.
+
+**Returns:**
+
+- [Config](#cmem_client.config.Config) – A Config instance configured with values from environment variables.
+
+**Raises:**
+
+- [ClientEnvConfigError](exceptions.md#cmem_client.exceptions.ClientEnvConfigError) – If the required CMEM_BASE_URI environment
+variable is not set.
+
+
+Environment Variables
+
+CMEM_BASE_URI (required): Base URL of the Corporate Memory instance.
+DI_API_ENDPOINT (optional): DataIntegration API endpoint override.
+DP_API_ENDPOINT (optional): DataPlatform API endpoint override.
+KEYCLOAK_BASE_URI (optional): Keycloak server URL override.
+KEYCLOAK_REALM_ID (optional): Keycloak realm identifier override.
+OAUTH_TOKEN_URI (optional): OAuth token endpoint override.
+MARKETPLACE_BASE_URI (optional): Local marketplace (license issuer) override.
+SSL_VERIFY (optional): SSL certificate verification flag.
+REQUESTS_CA_BUNDLE (optional): Path to a custom CA bundle file.
+
+
+
+### `realm_id` {#cmem_client.config.Config.realm_id}
+
+```python
+realm_id = realm_id
+```
+
+### `timeout` {#cmem_client.config.Config.timeout}
+
+```python
+timeout: int | None = None
+```
+
+HTTP request timeout in seconds, defaults to no timeout (None)
+
+### `url_base` {#cmem_client.config.Config.url_base}
+
+```python
+url_base: HttpUrl
+```
+
+Get the base URL of the Corporate Memory instance.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The base URL from which all other API endpoints are derived.
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – This is the root URL of the Corporate Memory deployment.
+
+### `url_build_api` {#cmem_client.config.Config.url_build_api}
+
+```python
+url_build_api: HttpUrl
+```
+
+Get the DataIntegration (build) API endpoint URL.
+
+Returns the URL for the DataIntegration API, which handles projects,
+datasets, transformations, and data integration workflows. If not
+explicitly set, it defaults to the base URL with '/dataintegration/' appended.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The DataIntegration API endpoint URL.
+
+### `url_explore_api` {#cmem_client.config.Config.url_explore_api}
+
+```python
+url_explore_api: HttpUrl
+```
+
+Get the DataPlatform (explore) API endpoint URL.
+
+Returns the URL for the DataPlatform API, which handles graph storage,
+SPARQL queries, and semantic data exploration. If not explicitly set,
+it defaults to the base URL with '/dataplatform/' appended.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The DataPlatform API endpoint URL.
+
+### `url_keycloak` {#cmem_client.config.Config.url_keycloak}
+
+```python
+url_keycloak: HttpUrl
+```
+
+Get the Keycloak authentication server base URL.
+
+Returns the URL of the Keycloak server used for authentication and
+authorization. If not explicitly set, it defaults to the base URL
+with '/auth/' appended.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The Keycloak server base URL.
+
+### `url_keycloak_issuer` {#cmem_client.config.Config.url_keycloak_issuer}
+
+```python
+url_keycloak_issuer: HttpUrl
+```
+
+Get the Keycloak realm issuer URL.
+
+Returns the issuer URL for the specific Keycloak realm, which is used
+for token validation and OpenID Connect flows. This URL is constructed
+from the Keycloak base URL and the realm identifier.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The Keycloak realm issuer URL.
+
+
+Note
+
+This property cannot be set directly. It is automatically constructed
+based on the Keycloak URL and realm ID. To customize it, set the
+url_keycloak property and realm_id attribute instead.
+
+
+
+### `url_marketplace` {#cmem_client.config.Config.url_marketplace}
+
+```python
+url_marketplace: HttpUrl
+```
+
+Get the local marketplace URL used as the license-token issuer.
+
+Returns the URL of the marketplace bundled beside this Corporate Memory
+instance. Its ``/api/session`` endpoint mints the encrypted license token
+(``x-eccenca-auth``) attached to outbound marketplace requests. If not
+explicitly set, it defaults to the base URL with '/marketplace/' appended.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The local marketplace URL.
+
+### `url_oauth_token` {#cmem_client.config.Config.url_oauth_token}
+
+```python
+url_oauth_token: HttpUrl
+```
+
+Get the OAuth 2.0 token endpoint URL.
+
+Returns the URL for the OAuth 2.0 token endpoint, which is used by
+authentication providers to obtain access tokens. If not explicitly
+set, it defaults to the standard OpenID Connect token endpoint path
+within the Keycloak realm.
+
+**Returns:**
+
+- [HttpUrl](models/url.md#cmem_client.models.url.HttpUrl) – The OAuth 2.0 token endpoint URL.
+
+### `verify` {#cmem_client.config.Config.verify}
+
+```python
+verify: bool | str
+```
+
+Get the SSL/TLS certificate verification flag or CA bundle path.
+
+**Returns:**
+
+- bool | str – True if SSL/TLS certificates should be verified using the default
+- bool | str – CA bundle, False to disable verification, or a string path to a
+- bool | str – custom CA bundle file.
+- bool | str – Defaults to True for security reasons.
+
+
+Note
+
+Disabling SSL verification should only be done in development
+environments. Production deployments should always verify certificates.
+
+
+
+## `DEFAULT_CMEM_BASE_URI` {#cmem_client.config.DEFAULT_CMEM_BASE_URI}
+
+```python
+DEFAULT_CMEM_BASE_URI = 'http://docker.localhost'
+```
+
diff --git a/docs/develop/cmem-client-api/exceptions.md b/docs/develop/cmem-client-api/exceptions.md
new file mode 100644
index 000000000..00e10d34b
--- /dev/null
+++ b/docs/develop/cmem-client-api/exceptions.md
@@ -0,0 +1,242 @@
+# `exceptions` {#cmem_client.exceptions}
+
+Custom exception classes for the cmem_client package.
+
+This module defines all custom exceptions used throughout the cmem_client library,
+providing specific error types for different failure scenarios such as authentication,
+configuration, and repository operations.
+
+**Classes:**
+
+- [**BaseError**](#cmem_client.exceptions.BaseError) – Base exception for all cmem_client exceptions.
+- [**ClientEnvConfigError**](#cmem_client.exceptions.ClientEnvConfigError) – Exception raised when an environment key is missing.
+- [**ClientNoAuthProviderError**](#cmem_client.exceptions.ClientNoAuthProviderError) – Exception raised when no auth provider is given but needed.
+- [**FilesDeleteError**](#cmem_client.exceptions.FilesDeleteError) – Exception raised when a file import fails.
+- [**FilesExportError**](#cmem_client.exceptions.FilesExportError) – Exception raised when a file export fails.
+- [**FilesImportError**](#cmem_client.exceptions.FilesImportError) – Exception raised when a file import fails.
+- [**FilesNotFoundError**](#cmem_client.exceptions.FilesNotFoundError) – Exception raised when a file is not found in a project.
+- [**FilesReadError**](#cmem_client.exceptions.FilesReadError) – Exception raised when reading the content of a file fails.
+- [**GraphExportError**](#cmem_client.exceptions.GraphExportError) – Exception raised when a vocabulary export operation fails.
+- [**GraphImportError**](#cmem_client.exceptions.GraphImportError) – Exception raised when a vocabulary import operation fails.
+- [**GraphVannMetadataConflictError**](#cmem_client.exceptions.GraphVannMetadataConflictError) – Exception raised when vann namespace metadata in the file conflicts with provided config.
+- [**GraphVannMetadataMissingError**](#cmem_client.exceptions.GraphVannMetadataMissingError) – Exception raised when vann namespace metadata is missing from an ontology file.
+- [**MarketplaceAuthError**](#cmem_client.exceptions.MarketplaceAuthError) – Exception raised when a marketplace auth operation failed or is invalid.
+- [**MarketplaceDeleteError**](#cmem_client.exceptions.MarketplaceDeleteError) – Exception raised when a marketplace delete operation failed or is invalid.
+- [**MarketplacePackagesDeleteError**](#cmem_client.exceptions.MarketplacePackagesDeleteError) – Exception raised when a marketplace package deletion fails.
+- [**MarketplacePackagesExportError**](#cmem_client.exceptions.MarketplacePackagesExportError) – Exception raised when a marketplace packages export fails.
+- [**MarketplacePackagesImportError**](#cmem_client.exceptions.MarketplacePackagesImportError) – Exception raised when a marketplace package installation fails.
+- [**MarketplaceReadError**](#cmem_client.exceptions.MarketplaceReadError) – Exception raised when a marketplace read operation failed or is invalid.
+- [**MarketplaceWriteError**](#cmem_client.exceptions.MarketplaceWriteError) – Exception raised when a marketplace write operation failed or is invalid.
+- [**ProjectExportError**](#cmem_client.exceptions.ProjectExportError) – Exception raised when a project export operation fails.
+- [**ProjectImportError**](#cmem_client.exceptions.ProjectImportError) – Exception raised when a project import operation fails.
+- [**PythonPackageImportError**](#cmem_client.exceptions.PythonPackageImportError) – Exception raised when a python plugin import fails.
+- [**QueryExportError**](#cmem_client.exceptions.QueryExportError) – Exception raised when a query export operation fails.
+- [**QueryNotFoundError**](#cmem_client.exceptions.QueryNotFoundError) – Exception raised when a query is not found in the catalog.
+- [**QueryUpdateError**](#cmem_client.exceptions.QueryUpdateError) – Exception raised when a query update operation fails.
+- [**RepositoryConfigError**](#cmem_client.exceptions.RepositoryConfigError) – Exception raised when a repository configuration is invalid.
+- [**RepositoryItemNotFoundError**](#cmem_client.exceptions.RepositoryItemNotFoundError) – Exception raised when a specific item is missing in a repository.
+- [**RepositoryModificationError**](#cmem_client.exceptions.RepositoryModificationError) – Exception raised when a repository modification failed or is invalid.
+- [**RepositoryReadError**](#cmem_client.exceptions.RepositoryReadError) – Exception raised when a repository read operation failed or is invalid.
+- [**VocabularyInstallError**](#cmem_client.exceptions.VocabularyInstallError) – Exception raised when a vocabulary installation fails.
+- [**VocabularyUninstallError**](#cmem_client.exceptions.VocabularyUninstallError) – Exception raised when a vocabulary uninstallation fails.
+- [**WorkflowExecutionError**](#cmem_client.exceptions.WorkflowExecutionError) – Exception raised when a workflow execution operation failed or is invalid.
+- [**WorkflowReadError**](#cmem_client.exceptions.WorkflowReadError) – Exception raised when a workflow read operation failed or is invalid.
+
+## `BaseError` {#cmem_client.exceptions.BaseError}
+
+Bases: Exception
+
+Base exception for all cmem_client exceptions.
+
+## `ClientEnvConfigError` {#cmem_client.exceptions.ClientEnvConfigError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when an environment key is missing.
+
+## `ClientNoAuthProviderError` {#cmem_client.exceptions.ClientNoAuthProviderError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when no auth provider is given but needed.
+
+## `FilesDeleteError` {#cmem_client.exceptions.FilesDeleteError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a file import fails.
+
+## `FilesExportError` {#cmem_client.exceptions.FilesExportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a file export fails.
+
+## `FilesImportError` {#cmem_client.exceptions.FilesImportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a file import fails.
+
+## `FilesNotFoundError` {#cmem_client.exceptions.FilesNotFoundError}
+
+Bases: [RepositoryItemNotFoundError](#cmem_client.exceptions.RepositoryItemNotFoundError)
+
+Exception raised when a file is not found in a project.
+
+## `FilesReadError` {#cmem_client.exceptions.FilesReadError}
+
+Bases: [RepositoryReadError](#cmem_client.exceptions.RepositoryReadError)
+
+Exception raised when reading the content of a file fails.
+
+## `GraphExportError` {#cmem_client.exceptions.GraphExportError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a vocabulary export operation fails.
+
+## `GraphImportError` {#cmem_client.exceptions.GraphImportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a vocabulary import operation fails.
+
+## `GraphVannMetadataConflictError` {#cmem_client.exceptions.GraphVannMetadataConflictError}
+
+Bases: [GraphImportError](#cmem_client.exceptions.GraphImportError)
+
+Exception raised when vann namespace metadata in the file conflicts with provided config.
+
+## `GraphVannMetadataMissingError` {#cmem_client.exceptions.GraphVannMetadataMissingError}
+
+Bases: [GraphImportError](#cmem_client.exceptions.GraphImportError)
+
+Exception raised when vann namespace metadata is missing from an ontology file.
+
+## `MarketplaceAuthError` {#cmem_client.exceptions.MarketplaceAuthError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a marketplace auth operation failed or is invalid.
+
+## `MarketplaceDeleteError` {#cmem_client.exceptions.MarketplaceDeleteError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a marketplace delete operation failed or is invalid.
+
+## `MarketplacePackagesDeleteError` {#cmem_client.exceptions.MarketplacePackagesDeleteError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a marketplace package deletion fails.
+
+## `MarketplacePackagesExportError` {#cmem_client.exceptions.MarketplacePackagesExportError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a marketplace packages export fails.
+
+## `MarketplacePackagesImportError` {#cmem_client.exceptions.MarketplacePackagesImportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a marketplace package installation fails.
+
+## `MarketplaceReadError` {#cmem_client.exceptions.MarketplaceReadError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a marketplace read operation failed or is invalid.
+
+## `MarketplaceWriteError` {#cmem_client.exceptions.MarketplaceWriteError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a marketplace write operation failed or is invalid.
+
+## `ProjectExportError` {#cmem_client.exceptions.ProjectExportError}
+
+Bases: [RepositoryReadError](#cmem_client.exceptions.RepositoryReadError)
+
+Exception raised when a project export operation fails.
+
+## `ProjectImportError` {#cmem_client.exceptions.ProjectImportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a project import operation fails.
+
+## `PythonPackageImportError` {#cmem_client.exceptions.PythonPackageImportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a python plugin import fails.
+
+## `QueryExportError` {#cmem_client.exceptions.QueryExportError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a query export operation fails.
+
+## `QueryNotFoundError` {#cmem_client.exceptions.QueryNotFoundError}
+
+Bases: [RepositoryItemNotFoundError](#cmem_client.exceptions.RepositoryItemNotFoundError)
+
+Exception raised when a query is not found in the catalog.
+
+## `QueryUpdateError` {#cmem_client.exceptions.QueryUpdateError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a query update operation fails.
+
+## `RepositoryConfigError` {#cmem_client.exceptions.RepositoryConfigError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a repository configuration is invalid.
+
+## `RepositoryItemNotFoundError` {#cmem_client.exceptions.RepositoryItemNotFoundError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a specific item is missing in a repository.
+
+## `RepositoryModificationError` {#cmem_client.exceptions.RepositoryModificationError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a repository modification failed or is invalid.
+
+## `RepositoryReadError` {#cmem_client.exceptions.RepositoryReadError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a repository read operation failed or is invalid.
+
+## `VocabularyInstallError` {#cmem_client.exceptions.VocabularyInstallError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a vocabulary installation fails.
+
+## `VocabularyUninstallError` {#cmem_client.exceptions.VocabularyUninstallError}
+
+Bases: [RepositoryModificationError](#cmem_client.exceptions.RepositoryModificationError)
+
+Exception raised when a vocabulary uninstallation fails.
+
+## `WorkflowExecutionError` {#cmem_client.exceptions.WorkflowExecutionError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a workflow execution operation failed or is invalid.
+
+## `WorkflowReadError` {#cmem_client.exceptions.WorkflowReadError}
+
+Bases: [BaseError](#cmem_client.exceptions.BaseError)
+
+Exception raised when a workflow read operation failed or is invalid.
+
diff --git a/docs/develop/cmem-client-api/index.md b/docs/develop/cmem-client-api/index.md
new file mode 100644
index 000000000..b604f96d8
--- /dev/null
+++ b/docs/develop/cmem-client-api/index.md
@@ -0,0 +1,786 @@
+---
+icon: material/language-python
+tags:
+ - API
+ - Python
+---
+
+# `client` {#cmem_client.client}
+
+Main API client for eccenca Corporate Memory.
+
+This module provides the primary Client class that serves as the central interface
+for interacting with eccenca Corporate Memory instances. The Client orchestrates
+authentication, HTTP communication, and provides access to various service components
+like workspaces and graph stores.
+
+The Client uses lazy loading for its components and can be configured either manually
+or automatically from environment variables, making it flexible for different
+deployment scenarios.
+
+**Examples:**
+
+```pycon
+>>> from os import environ
+>>> from cmem_client.models.url import HttpUrl
+>>> from cmem_client.auth_provider.client_credentials import ClientCredentialsFlow
+>>> config = Config(url_base=HttpUrl(environ.get("TESTING_BASE_URL")))
+>>> client = Client(config=config)
+>>> client_id = environ.get("TESTING_CCF_CLIENT_ID")
+>>> client_secret = environ.get("TESTING_CCF_CLIENT_SECRET")
+>>> client.auth = ClientCredentialsFlow(config=config, client_id=client_id, client_secret=client_secret)
+>>> # Client is now configured with oauth provider from environment
+```
+
+
+Logging
+
+The client logs through the standard library. Its logger is ``cmem_client.client``
+unless another one is passed to the constructor, and every component creates a child
+of it, named after its class (``cmem_client.client.GraphsRepository``). Configuring
+the client logger therefore configures the whole library.
+
+The quickest way is ``configure_client_logger()``, which sets the level and installs
+a handler:
+
+>>> client = Client.from_env()
+>>> client.configure_client_logger(level="DEBUG")
+>>> client.configure_client_logger(level="INFO", filename="cmem.log")
+
+Deployments which already describe their logging in a file use
+``configure_logging_from_dict()`` or ``configure_logging_from_json()`` instead. Both
+validate the configuration against
+[LoggingConfig][cmem_client.models.logging_config.LoggingConfig] before handing it to
+``logging.config.dictConfig()``:
+
+>>> client.configure_logging_from_json(Path("logging.json"))
+
+In addition to the standard levels, the client installs a ``TRACE`` level (5), which
+is more verbose than ``DEBUG``. Methods carrying the
+[log_method][cmem_client.logging_utils.log_method] decorator log their arguments on
+entry and their result on exit at that level, which makes it useful when a request
+does not do what you expect:
+
+>>> client.configure_client_logger(level="TRACE")
+
+Because ``TRACE`` logs arguments and results verbatim, it can write credentials and
+payloads into your logs. Keep it out of production.
+
+
+
+**Classes:**
+
+- [**Client**](#cmem_client.client.Client) – API Client for eccenca Corporate Memory.
+
+## `Client` {#cmem_client.client.Client}
+
+```python
+Client(config, auth=None, logger=None)
+```
+
+API Client for eccenca Corporate Memory.
+
+The Client class provides the main interface for interacting with eccenca
+Corporate Memory instances. It manages authentication, HTTP communication,
+and provides access to various service components through lazy-loaded properties.
+
+The client follows a lazy initialization pattern where components are only
+created when first accessed, improving performance and reducing unnecessary
+resource allocation.
+
+**Attributes:**
+
+- [**config**](#cmem_client.client.Client.config) ([Config](config.md#cmem_client.config.Config)) – Configuration object containing URLs and connection settings.
+- **_headers** (dict) – Class-level dictionary of HTTP headers shared across instances.
+- **_auth** ([AuthProvider](auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider)) – Authentication provider for obtaining access tokens.
+- **_http** (Client) – HTTP client instance for making API requests.
+- **_workspace** ([BuildWorkspace](components/workspace.md#cmem_client.components.workspace.BuildWorkspace)) – DataIntegration workspace component for build operations.
+- **_store** ([GraphStore](components/graph_store.md#cmem_client.components.graph_store.GraphStore)) – DataPlatform graph store component for explore operations.
+
+**Functions:**
+
+- [**configure_client_logger**](#cmem_client.client.Client.configure_client_logger) – Configure logging for the client's loggger and its decendants.
+- [**configure_logging_from_dict**](#cmem_client.client.Client.configure_logging_from_dict) – Configure logging for the client.
+- [**configure_logging_from_json**](#cmem_client.client.Client.configure_logging_from_json) – Configure logging for the client via a json file.
+- [**from_cmempy**](#cmem_client.client.Client.from_cmempy) – Create a client instance configured from a cmempy environment.
+- [**from_context**](#cmem_client.client.Client.from_context) – Create a client instance configured from a cmem-plugin-base context object.
+- [**from_dict**](#cmem_client.client.Client.from_dict) – Create a client instance from a plain dictionary of configuration values.
+- [**from_env**](#cmem_client.client.Client.from_env) – Create a client instance configured from environment variables.
+- [**get_new_httpx_client**](#cmem_client.client.Client.get_new_httpx_client) – Create a new HTTP client instance with current configuration.
+
+**Parameters:**
+
+- **config** ([Config](config.md#cmem_client.config.Config)) – Configuration object containing base URLs, SSL settings,
+and other connection parameters.
+- **auth** ([AuthProvider](auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) | None) – Optional authentication provider. If given, it is applied
+through the ``auth`` setter (which fetches an access token and
+prepares the HTTP client). If ``None``, an authentication
+provider must be set before making authenticated requests.
+- **logger** (Logger | None) – Optional Logger object for configuring logging.
+
+### `access_conditions` {#cmem_client.client.Client.access_conditions}
+
+```python
+access_conditions: AccessConditionsRepository
+```
+
+Get the access conditions repository for managing DataPlatform authorization.
+
+Returns: The access conditions repository instance, created lazy on first access.
+
+### `auth` {#cmem_client.client.Client.auth}
+
+```python
+auth: AuthProvider
+```
+
+Get the current authentication provider.
+
+Returns the authentication provider responsible for obtaining and
+refreshing access tokens for API requests.
+
+**Returns:**
+
+- [AuthProvider](auth_provider/abc.md#cmem_client.auth_provider.abc.AuthProvider) – The currently configured AuthProvider instance.
+
+**Raises:**
+
+- [ClientNoAuthProviderError](exceptions.md#cmem_client.exceptions.ClientNoAuthProviderError) – If no authentication provider has been
+set on this client instance.
+
+
+Note
+
+An authentication provider must be set before the client can make
+authenticated API requests. Use Client.from_env() for automatic
+configuration or set the auth property manually.
+
+
+
+### `client_accounts` {#cmem_client.client.Client.client_accounts}
+
+```python
+client_accounts: ClientAccountRepository
+```
+
+Get the Keycloak OpenID Connect client accounts repository.
+
+Returns the ClientAccountRepository for managing OpenID Connect client
+accounts in the Corporate Memory Keycloak realm.
+
+**Returns:**
+
+- [ClientAccountRepository](repositories/client_accounts.md#cmem_client.repositories.client_accounts.ClientAccountRepository) – The ClientAccountRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> for client_account in client.client_accounts.values():
+... print(client_account.client_id)
+```
+
+### `config` {#cmem_client.client.Client.config}
+
+```python
+config: Config = config
+```
+
+Configuration object containing URLs, timeouts, and SSL settings.
+
+### `configure_client_logger` {#cmem_client.client.Client.configure_client_logger}
+
+```python
+configure_client_logger(level='INFO', format_string=None, handlers=None, filename=None)
+```
+
+Configure logging for the client's loggger and its decendants.
+
+**Parameters:**
+
+- **level** (str | int) – Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) or int
+- **format_string** (str | None) – Custom log format string
+- **handlers** (list[Handler] | None) – List of custom handlers (if provided, overrides filename)
+- **filename** (str | Path | None) – Path to log file (creates FileHandler if provided)
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> client.configure_client_logger(level="DEBUG")
+>>> client.configure_client_logger(level="INFO", filename="cmem.log")
+```
+
+### `configure_logging_from_dict` {#cmem_client.client.Client.configure_logging_from_dict}
+
+```python
+configure_logging_from_dict(config)
+```
+
+Configure logging for the client.
+
+**Parameters:**
+
+- **config** (dict[str, Any]) – Dictionary of logging configuration
+
+### `configure_logging_from_json` {#cmem_client.client.Client.configure_logging_from_json}
+
+```python
+configure_logging_from_json(json_config)
+```
+
+Configure logging for the client via a json file.
+
+**Parameters:**
+
+- **json_config** (Path) – Path to json configuration file
+
+### `datasets` {#cmem_client.client.Client.datasets}
+
+```python
+datasets: DatasetsRepository
+```
+
+Get the DataIntegration (build) datasets repository.
+
+Returns the DatasetsRepository for managing Corporate Memory datasets
+within projects. Provides access to dataset listing, creation, update,
+deletion, and file resource upload/download operations.
+
+**Returns:**
+
+- [DatasetsRepository](repositories/datasets.md#cmem_client.repositories.datasets.DatasetsRepository) – The DatasetsRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> client.datasets.fetch_data()
+>>> for dataset in client.datasets.values():
+... print(dataset.get_id())
+```
+
+### `deployment` {#cmem_client.client.Client.deployment}
+
+```python
+deployment: Deployment
+```
+
+Get the deployment status component.
+
+Returns the Deployment component for aggregating version and health
+information across all Corporate Memory services.
+
+**Returns:**
+
+- [Deployment](components/deployment.md#cmem_client.components.deployment.Deployment) – The Deployment component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> status = client.deployment.get_status()
+>>> print(status.explore.version, status.health)
+```
+
+### `files` {#cmem_client.client.Client.files}
+
+```python
+files: FilesRepository
+```
+
+Get the files repository for managing files
+
+Returns: The files repository instance, created lazy on first access.
+
+### `from_cmempy` {#cmem_client.client.Client.from_cmempy}
+
+```python
+from_cmempy(logger=None)
+```
+
+Create a client instance configured from a cmempy environment.
+
+### `from_context` {#cmem_client.client.Client.from_context}
+
+```python
+from_context(context, logger=None)
+```
+
+Create a client instance configured from a cmem-plugin-base context object.
+
+This method is intended for use inside corporate memory python plugins.
+It extracts connection URLs from the ``SystemContext`` and uses the token
+provided by the ``UserContext`` for authentication, so no environment variables
+or credentials need to be supplied manually.
+
+**Parameters:**
+
+- **context** (object) – An ``ExecutionContext`` or ``PluginContext`` instance from
+``cmem-plugin-base``. Must expose a ``system`` attribute
+(``SystemContext``) for URL discovery and a ``user`` attribute
+(``UserContext``) for token retrieval.
+- **logger** (Logger | None) – Optional Logger object for configuring logging.
+
+**Returns:**
+
+- [Client](#cmem_client.client.Client) – A fully configured Client instance authenticated via the token
+- [Client](#cmem_client.client.Client) – provided by the context's ``UserContext``.
+
+**Raises:**
+
+- ClientEnvConfigError – If the base URL cannot be retrieved from the
+context's ``SystemContext``.
+
+**Examples:**
+
+```pycon
+>>> def execute(self, inputs, context):
+... client = Client.from_context(context)
+... packages = client.marketplace.get_available_packages()
+```
+
+### `from_dict` {#cmem_client.client.Client.from_dict}
+
+```python
+from_dict(data, logger=None)
+```
+
+Create a client instance from a plain dictionary of configuration values.
+
+This factory method is intended for callers that manage their own
+configuration (e.g. a config file with named environments) and want
+to pass parsed values directly without relying on environment variables
+or the cmempy library.
+
+**Parameters:**
+
+- **data** (dict[str, str]) – A flat dictionary whose keys mirror the environment variable
+names used by ``from_env()`` (e.g. ``"CMEM_BASE_URI"``,
+``"OAUTH_GRANT_TYPE"``, ``"OAUTH_CLIENT_SECRET"``).
+- **logger** (Logger | None) – Optional Logger object for configuring logging.
+
+**Returns:**
+
+- [Client](#cmem_client.client.Client) – A fully configured Client instance with authentication provider
+- [Client](#cmem_client.client.Client) – set from the supplied dictionary.
+
+**Raises:**
+
+- ClientEnvConfigError – If required keys are missing from ``data``.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_dict({
+... "CMEM_BASE_URI": "http://docker.localhost",
+... "OAUTH_GRANT_TYPE": "password",
+... "OAUTH_CLIENT_ID": "cmemc",
+... "OAUTH_USER": "admin",
+... "OAUTH_PASSWORD": "admin",
+... })
+```
+
+### `from_env` {#cmem_client.client.Client.from_env}
+
+```python
+from_env(logger=None)
+```
+
+Create a client instance configured from environment variables.
+
+This factory method creates a fully configured client by reading
+configuration and authentication settings from environment variables.
+It's the recommended way to create clients in most applications.
+
+**Parameters:**
+
+- **logger** (Logger | None) – Optional Logger object for configuring logging.
+
+**Returns:**
+
+- [Client](#cmem_client.client.Client) – A fully configured Client instance with authentication provider
+- [Client](#cmem_client.client.Client) – automatically set based on environment variables.
+
+**Raises:**
+
+- ClientEnvConfigError – If required environment variables are missing.
+
+**Examples:**
+
+```pycon
+>>> my_client = Client.from_env() # Uses CMEM_BASE_URI, OAUTH_* vars
+>>> store_info = my_client.store.self_information
+```
+
+### `get_new_httpx_client` {#cmem_client.client.Client.get_new_httpx_client}
+
+```python
+get_new_httpx_client()
+```
+
+Create a new HTTP client instance with current configuration.
+
+Creates a fresh httpx.Client instance configured with the current
+headers, SSL verification settings, and timeout values from the
+client configuration.
+
+**Returns:**
+
+- Client – A new httpx.Client instance ready for making HTTP requests.
+
+
+Note
+
+This method is called internally when the auth provider changes
+or when the HTTP client needs to be refreshed with new headers.
+
+
+
+### `graph_imports` {#cmem_client.client.Client.graph_imports}
+
+```python
+graph_imports: GraphImportsRepository
+```
+
+Get the graph imports repository for managing graph imports
+
+Returns: The graph imports repository instance, created lazily on first access.
+
+### `graph_insights` {#cmem_client.client.Client.graph_insights}
+
+```python
+graph_insights: GraphInsightsRepository
+```
+
+Get the Graph Insights repository for managing semspect snapshots.
+
+Returns: The GraphInsightsRepository instance, created lazily on first access.
+
+### `graphs` {#cmem_client.client.Client.graphs}
+
+```python
+graphs: GraphsRepository
+```
+
+Get the DataPlatform (explore) graph repository component.
+
+Returns the GraphsRepository component for managing Corporate Memory's
+DataPlatform graph repository for importing and exporting graph
+files and manages their integration with the graph store.
+
+**Returns:**
+
+- [GraphsRepository](repositories/graphs.md#cmem_client.repositories.graphs.GraphsRepository) – The GraphRepository component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> from pathlib import Path
+>>> client = Client.from_env()
+>>> graphs = client.graphs
+>>> graphs.import_item(Path("backup.ttl"))
+```
+
+### `http` {#cmem_client.client.Client.http}
+
+```python
+http: httpx.Client
+```
+
+Get the HTTP client instance for making API requests.
+
+Returns the configured HTTP client, creating it lazily on first access.
+The client is pre-configured with authentication headers, SSL settings,
+and timeout values.
+
+**Returns:**
+
+- Client – The httpx.Client instance configured for this client.
+
+
+Note
+
+The HTTP client is automatically recreated when the authentication
+provider is changed to ensure headers are updated.
+
+
+
+### `logger` {#cmem_client.client.Client.logger}
+
+```python
+logger: logging.Logger
+```
+
+Return the configured logger.
+
+### `marketplace` {#cmem_client.client.Client.marketplace}
+
+```python
+marketplace: Marketplace
+```
+
+Get the DataPlatform (explore) marketplace component.
+
+Returns the Marketplace component.
+
+**Returns:**
+
+- [Marketplace](components/marketplace.md#cmem_client.components.marketplace.Marketplace) – The Marketplace component instance, created lazily on first access.
+
+### `marketplace_packages` {#cmem_client.client.Client.marketplace_packages}
+
+```python
+marketplace_packages: MarketplacePackagesRepository
+```
+
+Get the package repository for managing Corporate Memory's marketplace packages
+
+Returns the package repository for managing Corporate Memory's
+marketplace packages. This component handles marketplace packages
+in a .zip format.
+
+Returns: The marketplace package repository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> from pathlib import Path
+>>> client = Client.from_env()
+>>> packages = client.marketplace_packages
+>>> packages.import_item(key="w3c-geo-vocab")
+```
+
+### `projects` {#cmem_client.client.Client.projects}
+
+```python
+projects: ProjectsRepository
+```
+
+Get the DataIntegration (build) project repository component.
+
+Returns the ProjectsRepository component to manage
+DataIntegration projects, such as importing and exporting project
+files.
+
+**Returns:**
+
+- [ProjectsRepository](repositories/projects.md#cmem_client.repositories.projects.ProjectsRepository) – The ProjectsRepository component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> from pathlib import Path
+>>> client = Client.from_env()
+>>> projects = client.projects
+>>> projects.import_item(Path("project.zip"))
+```
+
+### `python_packages` {#cmem_client.client.Client.python_packages}
+
+```python
+python_packages: PythonPackagesRepository
+```
+
+Get the package repository for managing python packages
+
+Returns: The python package repository instance, created lazily on first access.
+
+### `queries` {#cmem_client.client.Client.queries}
+
+```python
+queries: QueriesRepository
+```
+
+Get the DataPlatform (explore) queries repository.
+
+Returns the QueriesRepository for accessing queries stored in the
+Corporate Memory query catalog. Queries are fetched from RDF catalog
+graphs and described using SHACL UI vocabulary.
+
+**Returns:**
+
+- [QueriesRepository](repositories/queries.md#cmem_client.repositories.queries.QueriesRepository) – The QueriesRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> queries = client.queries
+>>> queries.fetch_data()
+>>> my_query = queries.get(":myQueryId")
+```
+
+### `schedulers` {#cmem_client.client.Client.schedulers}
+
+```python
+schedulers: SchedulersRepository
+```
+
+Get the workflow schedulers repository.
+
+Returns the SchedulersRepository for accessing workflow schedulers across
+all Corporate Memory projects. Schedulers execute workflows at specified
+intervals and are identified by a 'project_id:scheduler_id' composite key.
+
+**Returns:**
+
+- [SchedulersRepository](repositories/schedulers.md#cmem_client.repositories.schedulers.SchedulersRepository) – The SchedulersRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> for scheduler in client.schedulers.values():
+... print(scheduler.get_id())
+```
+
+### `store` {#cmem_client.client.Client.store}
+
+```python
+store: GraphStore
+```
+
+Get the DataPlatform (explore) graph store component.
+
+Returns the GraphStore component for managing Corporate Memory's
+DataPlatform graph store, including RDF graph operations, bootstrap
+data management, and store-level backup/restore functionality.
+
+**Returns:**
+
+- [GraphStore](components/graph_store.md#cmem_client.components.graph_store.GraphStore) – The GraphStore component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> store_info = client.store.self_information
+>>> print(f"Store type: {store_info.type}, version: {store_info.version}")
+```
+
+### `user_accounts` {#cmem_client.client.Client.user_accounts}
+
+```python
+user_accounts: UserAccountRepository
+```
+
+Get the Keycloak user accounts repository.
+
+Returns the UserAccountRepository for managing user accounts in the Corporate
+Memory Keycloak realm. Provides CRUD operations on user accounts as well
+as group assignment and password management.
+
+**Returns:**
+
+- [UserAccountRepository](repositories/user_accounts.md#cmem_client.repositories.user_accounts.UserAccountRepository) – The UserAccountRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> for user in client.user_accounts.values():
+... print(user.username)
+```
+
+### `validations` {#cmem_client.client.Client.validations}
+
+```python
+validations: ValidationsRepository
+```
+
+Get the repository for managing SHACL batch validation processes.
+
+Returns: The ValidationsRepository instance, created lazily on first access.
+
+### `variables` {#cmem_client.client.Client.variables}
+
+```python
+variables: VariablesRepository
+```
+
+Get the DataIntegration (build) variables repository.
+
+Returns the VariablesRepository for managing project variables across all
+Corporate Memory projects. Variables can hold static values or Jinja2 template
+strings referencing other variables.
+
+**Returns:**
+
+- [VariablesRepository](repositories/variables.md#cmem_client.repositories.variables.VariablesRepository) – The VariablesRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> for variable in client.variables.values():
+... print(variable.get_id())
+```
+
+### `vocabularies` {#cmem_client.client.Client.vocabularies}
+
+```python
+vocabularies: VocabulariesRepository
+```
+
+Get the vocabulary catalog repository.
+
+Returns the VocabulariesRepository for listing, installing, uninstalling,
+and reading cache data for Corporate Memory vocabularies.
+
+**Returns:**
+
+- [VocabulariesRepository](repositories/vocabularies.md#cmem_client.repositories.vocabularies.VocabulariesRepository) – The VocabulariesRepository instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> client = Client.from_env()
+>>> installed = client.vocabularies.list_vocabularies(filter_="installed")
+```
+
+### `workflows` {#cmem_client.client.Client.workflows}
+
+```python
+workflows: WorkflowsRepository
+```
+
+Get the workflows repository for managing workflows
+
+Returns: The workflows repository instance, created lazily on first access.
+
+### `workspace` {#cmem_client.client.Client.workspace}
+
+```python
+workspace: BuildWorkspace
+```
+
+Get the DataIntegration (build) workspace component.
+
+Returns the BuildWorkspace component for managing Corporate Memory's
+DataIntegration workspace, including projects, datasets, transformations,
+and workspace-level import/export operations.
+
+**Returns:**
+
+- [BuildWorkspace](components/workspace.md#cmem_client.components.workspace.BuildWorkspace) – The BuildWorkspace component instance, created lazily on first access.
+
+**Examples:**
+
+```pycon
+>>> from pathlib import Path
+>>> client = Client.from_env()
+>>> client.workspace.import_from_zip(Path("backup.zip"))
+>>> client.workspace.export_to_zip(Path("new_backup.zip"))
+```
+
+### `workspace_configs` {#cmem_client.client.Client.workspace_configs}
+
+```python
+workspace_configs: WorkspaceConfigsRepository
+```
+
+Get the workspace configs repository for managing explore workspace configurations.
+
+Returns: The workspace configs repository instance, created lazy on first access.
+
diff --git a/docs/develop/cmem-client-api/logging_utils.md b/docs/develop/cmem-client-api/logging_utils.md
new file mode 100644
index 000000000..930530813
--- /dev/null
+++ b/docs/develop/cmem-client-api/logging_utils.md
@@ -0,0 +1,44 @@
+# `logging_utils` {#cmem_client.logging_utils}
+
+Logging utilities.
+
+Note: This module uses Any for kwargs to match the stdlib logging interface signature.
+
+**Functions:**
+
+- [**install_trace_logger**](#cmem_client.logging_utils.install_trace_logger) – Install TRACE level logging dynamically.
+- [**log_method**](#cmem_client.logging_utils.log_method) – Wrapper to log entry and exit of methods using TRACE level.
+
+**Attributes:**
+
+- [**TRACE_LEVEL**](#cmem_client.logging_utils.TRACE_LEVEL) –
+
+## `TRACE_LEVEL` {#cmem_client.logging_utils.TRACE_LEVEL}
+
+```python
+TRACE_LEVEL = 5
+```
+
+## `install_trace_logger` {#cmem_client.logging_utils.install_trace_logger}
+
+```python
+install_trace_logger()
+```
+
+Install TRACE level logging dynamically.
+
+## `log_method` {#cmem_client.logging_utils.log_method}
+
+```python
+log_method(method, display_name=None)
+```
+
+Wrapper to log entry and exit of methods using TRACE level.
+
+Note: Don't use this on methods with sensitive information as they might get logged too
+
+**Returns:**
+
+- **wrapper** (Callable) – The wrapped method, which logs its arguments on entry and its
+result on exit.
+
diff --git a/docs/develop/cmem-client-api/models/.pages b/docs/develop/cmem-client-api/models/.pages
new file mode 100644
index 000000000..692bdcffb
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/.pages
@@ -0,0 +1 @@
+title: Models
diff --git a/docs/develop/cmem-client-api/models/access_condition.md b/docs/develop/cmem-client-api/models/access_condition.md
new file mode 100644
index 000000000..517badf79
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/access_condition.md
@@ -0,0 +1,464 @@
+# `access_condition` {#cmem_client.models.access_condition}
+
+Access control and authorization models for Corporate Memory.
+
+This module defines models for managing access conditions in Corporate Memory,
+which control user and group permissions for graphs, actions, and other resources.
+Access conditions form the foundation of Corporate Memory's authorization system.
+
+The AccessCondition model supports both static permissions (defined at creation)
+and dynamic permissions (computed via SPARQL queries), providing flexible
+access control patterns for different organizational needs.
+
+Access conditions can grant various permissions including graph read/write access,
+action execution rights, and management permissions for other access conditions.
+
+**Classes:**
+
+- [**AccessCondition**](#cmem_client.models.access_condition.AccessCondition) – An access condition
+- [**AccessConditionResultSet**](#cmem_client.models.access_condition.AccessConditionResultSet) – An access condition result set
+- [**AccessConditionReview**](#cmem_client.models.access_condition.AccessConditionReview) – Review of access rights for a given account.
+- [**AccessControlConfiguration**](#cmem_client.models.access_condition.AccessControlConfiguration) – An access condition configuration
+- [**AclAction**](#cmem_client.models.access_condition.AclAction) – An action that can be granted by an access condition.
+- [**MatchingAccessCondition**](#cmem_client.models.access_condition.MatchingAccessCondition) – A single access condition that matched during a review.
+
+**Attributes:**
+
+- [**NS_AC**](#cmem_client.models.access_condition.NS_AC) –
+- [**NS_ACTION**](#cmem_client.models.access_condition.NS_ACTION) –
+
+## `AccessCondition` {#cmem_client.models.access_condition.AccessCondition}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+An access condition
+
+A condition names who it applies to (``requires_account``, ``requires_group``) and
+what they may then do (the grants below). A condition without a ``requires_*`` field
+applies to everyone. The grants of all matching conditions add up, so access is
+widened by adding a condition and never narrowed.
+
+**Attributes:**
+
+- [**iri**](#cmem_client.models.access_condition.AccessCondition.iri) (str) – IRI of the access condition, e.g.
+``http://eccenca.com/ac/my-condition``. This is the key of the repository,
+and it has to start with that namespace.
+- [**name**](#cmem_client.models.access_condition.AccessCondition.name) (str) – Short name identifying the condition, e.g. ``My Access Condition``.
+- [**comment**](#cmem_client.models.access_condition.AccessCondition.comment) (str | None) – Longer description of what the condition is for.
+- [**requires_account**](#cmem_client.models.access_condition.AccessCondition.requires_account) (str | None) – IRI of the single account the condition applies to, e.g.
+``http://eccenca.com/admin``.
+- [**requires_group**](#cmem_client.models.access_condition.AccessCondition.requires_group) (list[str]) – IRIs of the groups an account has to be a member of for the
+condition to apply, e.g. ``http://eccenca.com/elds-admins``.
+- [**readable_graphs**](#cmem_client.models.access_condition.AccessCondition.readable_graphs) (list[str]) – IRIs of the graphs this grants read access to. The special
+``https://vocab.eccenca.com/auth/AllGraphs`` covers every graph.
+- [**writable_graphs**](#cmem_client.models.access_condition.AccessCondition.writable_graphs) (list[str]) – IRIs of the graphs this grants read and write access to.
+- [**allowed_actions**](#cmem_client.models.access_condition.AccessCondition.allowed_actions) (list[str]) – IRIs of the actions this grants permission to execute, e.g.
+``https://vocab.eccenca.com/auth/Action/Build``. The special
+``.../Action/AllActions`` covers every action.
+- [**grant_allowed_actions**](#cmem_client.models.access_condition.AccessCondition.grant_allowed_actions) (list[str]) – Patterns of actions whose granting conditions the holder
+may manage, e.g. ``https://vocab.eccenca.com/auth/Action/Build*`` or ``*``.
+This delegates administration rather than granting the action itself.
+- [**grant_read_patterns**](#cmem_client.models.access_condition.AccessCondition.grant_read_patterns) (list[str]) – Patterns of graphs whose read-granting conditions the
+holder may manage, e.g. ``https://example.org/*``.
+- [**grant_write_patterns**](#cmem_client.models.access_condition.AccessCondition.grant_write_patterns) (list[str]) – Patterns of graphs whose write-granting conditions the
+holder may manage.
+- [**query**](#cmem_client.models.access_condition.AccessCondition.query) (str | None) – SPARQL SELECT query computing the grants instead of listing them, which
+is what makes a condition dynamic. It has to project the variables ``user``,
+``group``, ``readGraph`` and ``writeGraph``.
+- [**creator**](#cmem_client.models.access_condition.AccessCondition.creator) (str | None) – IRI of the account which created the condition. Read-only, so it is
+dropped from a create request.
+- [**created**](#cmem_client.models.access_condition.AccessCondition.created) (datetime | None) – When the condition was created. Read-only as well.
+
+**Functions:**
+
+- [**get_create_request**](#cmem_client.models.access_condition.AccessCondition.get_create_request) – Create a CreateAccessConditionRequest dict
+- [**get_id**](#cmem_client.models.access_condition.AccessCondition.get_id) – Get the IRI of the access condition
+- [**set_iri**](#cmem_client.models.access_condition.AccessCondition.set_iri) – Set the IRI of the access condition based on a new local name
+
+### `allowed_actions` {#cmem_client.models.access_condition.AccessCondition.allowed_actions}
+
+```python
+allowed_actions: list[str] = Field(alias='allowedActions', default=[])
+```
+
+### `comment` {#cmem_client.models.access_condition.AccessCondition.comment}
+
+```python
+comment: str | None = None
+```
+
+### `created` {#cmem_client.models.access_condition.AccessCondition.created}
+
+```python
+created: datetime | None = None
+```
+
+### `creator` {#cmem_client.models.access_condition.AccessCondition.creator}
+
+```python
+creator: str | None = None
+```
+
+### `get_create_request` {#cmem_client.models.access_condition.AccessCondition.get_create_request}
+
+```python
+get_create_request()
+```
+
+Create a CreateAccessConditionRequest dict
+
+This object is used to create new access condition.
+
+**Returns:**
+
+- dict – The request payload, with the ``staticId`` derived from the access condition
+- dict – IRI and the read-only keys removed.
+
+**Raises:**
+
+- ValueError – If the access condition IRI does not start with the access
+condition namespace.
+
+### `get_id` {#cmem_client.models.access_condition.AccessCondition.get_id}
+
+```python
+get_id()
+```
+
+Get the IRI of the access condition
+
+### `grant_allowed_actions` {#cmem_client.models.access_condition.AccessCondition.grant_allowed_actions}
+
+```python
+grant_allowed_actions: list[str] = Field(alias='grantAllowedActions', default=[])
+```
+
+### `grant_read_patterns` {#cmem_client.models.access_condition.AccessCondition.grant_read_patterns}
+
+```python
+grant_read_patterns: list[str] = Field(alias='grantReadPatterns', default=[])
+```
+
+### `grant_write_patterns` {#cmem_client.models.access_condition.AccessCondition.grant_write_patterns}
+
+```python
+grant_write_patterns: list[str] = Field(alias='grantWritePatterns', default=[])
+```
+
+### `iri` {#cmem_client.models.access_condition.AccessCondition.iri}
+
+```python
+iri: str
+```
+
+### `model_config` {#cmem_client.models.access_condition.AccessCondition.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `name` {#cmem_client.models.access_condition.AccessCondition.name}
+
+```python
+name: str
+```
+
+### `query` {#cmem_client.models.access_condition.AccessCondition.query}
+
+```python
+query: str | None = Field(alias='dynamicAccessConditionQuery', default=None)
+```
+
+### `readable_graphs` {#cmem_client.models.access_condition.AccessCondition.readable_graphs}
+
+```python
+readable_graphs: list[str] = Field(alias='readableGraphs', default=[])
+```
+
+### `requires_account` {#cmem_client.models.access_condition.AccessCondition.requires_account}
+
+```python
+requires_account: str | None = Field(alias='requiresAccount', default=None)
+```
+
+### `requires_group` {#cmem_client.models.access_condition.AccessCondition.requires_group}
+
+```python
+requires_group: list[str] = Field(alias='requiresGroup', default=[])
+```
+
+### `set_iri` {#cmem_client.models.access_condition.AccessCondition.set_iri}
+
+```python
+set_iri(local_name)
+```
+
+Set the IRI of the access condition based on a new local name
+
+this just adds the namespace prefix
+
+### `writable_graphs` {#cmem_client.models.access_condition.AccessCondition.writable_graphs}
+
+```python
+writable_graphs: list[str] = Field(alias='writableGraphs', default=[])
+```
+
+## `AccessConditionResultSet` {#cmem_client.models.access_condition.AccessConditionResultSet}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An access condition result set
+
+**Attributes:**
+
+- [**content**](#cmem_client.models.access_condition.AccessConditionResultSet.content) (list[[AccessCondition](#cmem_client.models.access_condition.AccessCondition)]) – The access conditions on this page.
+- [**page**](#cmem_client.models.access_condition.AccessConditionResultSet.page) ([PageDescription](../repositories/base/paged_list.md#cmem_client.repositories.base.paged_list.PageDescription)) – Which page this is and how many there are in total.
+
+### `content` {#cmem_client.models.access_condition.AccessConditionResultSet.content}
+
+```python
+content: list[AccessCondition]
+```
+
+### `model_config` {#cmem_client.models.access_condition.AccessConditionResultSet.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `page` {#cmem_client.models.access_condition.AccessConditionResultSet.page}
+
+```python
+page: PageDescription
+```
+
+## `AccessConditionReview` {#cmem_client.models.access_condition.AccessConditionReview}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Review of access rights for a given account.
+
+A review answers what an account may actually do, after every condition which
+applies to it has been evaluated and their grants added up.
+
+**Attributes:**
+
+- [**principal_name**](#cmem_client.models.access_condition.AccessConditionReview.principal_name) (str) – Name of the reviewed account.
+- [**account_iri**](#cmem_client.models.access_condition.AccessConditionReview.account_iri) (str) – IRI of the reviewed account.
+- [**has_root_access**](#cmem_client.models.access_condition.AccessConditionReview.has_root_access) (bool) – Whether the account bypasses access control entirely.
+- [**can_read_all**](#cmem_client.models.access_condition.AccessConditionReview.can_read_all) (bool) – Whether the account may read every graph, which makes
+``readable_graphs`` beside the point.
+- [**can_write_all**](#cmem_client.models.access_condition.AccessConditionReview.can_write_all) (bool) – Whether the account may write every graph.
+- [**are_all_actions_allowed**](#cmem_client.models.access_condition.AccessConditionReview.are_all_actions_allowed) (bool) – Whether the account may execute every action.
+- [**readable_graphs**](#cmem_client.models.access_condition.AccessConditionReview.readable_graphs) (list[str]) – IRIs of the graphs the account may read.
+- [**writable_graphs**](#cmem_client.models.access_condition.AccessConditionReview.writable_graphs) (list[str]) – IRIs of the graphs the account may write.
+- [**allowed_actions**](#cmem_client.models.access_condition.AccessConditionReview.allowed_actions) (list[str]) – IRIs of the actions the account may execute.
+- [**read_graph_grants**](#cmem_client.models.access_condition.AccessConditionReview.read_graph_grants) (list[str]) – Graph patterns whose read-granting conditions the account
+may manage.
+- [**write_graph_grants**](#cmem_client.models.access_condition.AccessConditionReview.write_graph_grants) (list[str]) – Graph patterns whose write-granting conditions it may
+manage.
+- [**matching_access_conditions**](#cmem_client.models.access_condition.AccessConditionReview.matching_access_conditions) (list[[MatchingAccessCondition](#cmem_client.models.access_condition.MatchingAccessCondition)]) – The conditions which produced this result, with the
+grants each one contributed. Use it to find out why an account has an
+access it should not have.
+- [**validity_time_stamp**](#cmem_client.models.access_condition.AccessConditionReview.validity_time_stamp) (datetime) – When the review was computed. A dynamic condition can
+change its outcome afterwards.
+- [**group_iri**](#cmem_client.models.access_condition.AccessConditionReview.group_iri) (list[str] | None) – IRIs of the groups the account belongs to.
+
+### `account_iri` {#cmem_client.models.access_condition.AccessConditionReview.account_iri}
+
+```python
+account_iri: str = Field(alias='accountIri')
+```
+
+### `allowed_actions` {#cmem_client.models.access_condition.AccessConditionReview.allowed_actions}
+
+```python
+allowed_actions: list[str] = Field(alias='allowedActions', default=[])
+```
+
+### `are_all_actions_allowed` {#cmem_client.models.access_condition.AccessConditionReview.are_all_actions_allowed}
+
+```python
+are_all_actions_allowed: bool = Field(alias='areAllActionsAllowed')
+```
+
+### `can_read_all` {#cmem_client.models.access_condition.AccessConditionReview.can_read_all}
+
+```python
+can_read_all: bool = Field(alias='canReadAll')
+```
+
+### `can_write_all` {#cmem_client.models.access_condition.AccessConditionReview.can_write_all}
+
+```python
+can_write_all: bool = Field(alias='canWriteAll')
+```
+
+### `group_iri` {#cmem_client.models.access_condition.AccessConditionReview.group_iri}
+
+```python
+group_iri: list[str] | None = Field(alias='groupIri', default=None)
+```
+
+### `has_root_access` {#cmem_client.models.access_condition.AccessConditionReview.has_root_access}
+
+```python
+has_root_access: bool = Field(alias='hasRootAccess')
+```
+
+### `matching_access_conditions` {#cmem_client.models.access_condition.AccessConditionReview.matching_access_conditions}
+
+```python
+matching_access_conditions: list[MatchingAccessCondition] = Field(alias='matchingAccessConditions', default=[])
+```
+
+### `model_config` {#cmem_client.models.access_condition.AccessConditionReview.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `principal_name` {#cmem_client.models.access_condition.AccessConditionReview.principal_name}
+
+```python
+principal_name: str = Field(alias='principalName')
+```
+
+### `read_graph_grants` {#cmem_client.models.access_condition.AccessConditionReview.read_graph_grants}
+
+```python
+read_graph_grants: list[str] = Field(alias='readGraphGrants', default=[])
+```
+
+### `readable_graphs` {#cmem_client.models.access_condition.AccessConditionReview.readable_graphs}
+
+```python
+readable_graphs: list[str] = Field(alias='readableGraphs', default=[])
+```
+
+### `validity_time_stamp` {#cmem_client.models.access_condition.AccessConditionReview.validity_time_stamp}
+
+```python
+validity_time_stamp: datetime = Field(alias='validityTimeStamp')
+```
+
+### `writable_graphs` {#cmem_client.models.access_condition.AccessConditionReview.writable_graphs}
+
+```python
+writable_graphs: list[str] = Field(alias='writableGraphs', default=[])
+```
+
+### `write_graph_grants` {#cmem_client.models.access_condition.AccessConditionReview.write_graph_grants}
+
+```python
+write_graph_grants: list[str] = Field(alias='writeGraphGrants', default=[])
+```
+
+## `AccessControlConfiguration` {#cmem_client.models.access_condition.AccessControlConfiguration}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An access condition configuration
+
+**Attributes:**
+
+- [**enabled**](#cmem_client.models.access_condition.AccessControlConfiguration.enabled) (bool) – Whether access control is switched on for the deployment. With it off,
+the conditions are kept but not enforced.
+- [**admin_action**](#cmem_client.models.access_condition.AccessControlConfiguration.admin_action) (str | None) – IRI of the action which grants administration of access
+conditions.
+
+### `admin_action` {#cmem_client.models.access_condition.AccessControlConfiguration.admin_action}
+
+```python
+admin_action: str | None = Field(alias='adminAction', default=None)
+```
+
+### `enabled` {#cmem_client.models.access_condition.AccessControlConfiguration.enabled}
+
+```python
+enabled: bool = Field(default=False)
+```
+
+### `model_config` {#cmem_client.models.access_condition.AccessControlConfiguration.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `AclAction` {#cmem_client.models.access_condition.AclAction}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An action that can be granted by an access condition.
+
+**Attributes:**
+
+- [**iri**](#cmem_client.models.access_condition.AclAction.iri) (str) – IRI of the action, as used in ``AccessCondition.allowed_actions``.
+- [**name**](#cmem_client.models.access_condition.AclAction.name) (str) – Short name of the action.
+
+### `iri` {#cmem_client.models.access_condition.AclAction.iri}
+
+```python
+iri: str
+```
+
+### `model_config` {#cmem_client.models.access_condition.AclAction.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `name` {#cmem_client.models.access_condition.AclAction.name}
+
+```python
+name: str
+```
+
+## `MatchingAccessCondition` {#cmem_client.models.access_condition.MatchingAccessCondition}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A single access condition that matched during a review.
+
+**Attributes:**
+
+- [**access_condition_iri**](#cmem_client.models.access_condition.MatchingAccessCondition.access_condition_iri) (str) – IRI of the condition which matched.
+- [**read_graph_grants**](#cmem_client.models.access_condition.MatchingAccessCondition.read_graph_grants) (list[str]) – Graph IRIs this condition contributed read access to.
+- [**write_graph_grants**](#cmem_client.models.access_condition.MatchingAccessCondition.write_graph_grants) (list[str]) – Graph IRIs this condition contributed write access to.
+
+### `access_condition_iri` {#cmem_client.models.access_condition.MatchingAccessCondition.access_condition_iri}
+
+```python
+access_condition_iri: str = Field(alias='accessConditionIri')
+```
+
+### `model_config` {#cmem_client.models.access_condition.MatchingAccessCondition.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `read_graph_grants` {#cmem_client.models.access_condition.MatchingAccessCondition.read_graph_grants}
+
+```python
+read_graph_grants: list[str] = Field(alias='readGraphGrants', default=[])
+```
+
+### `write_graph_grants` {#cmem_client.models.access_condition.MatchingAccessCondition.write_graph_grants}
+
+```python
+write_graph_grants: list[str] = Field(alias='writeGraphGrants', default=[])
+```
+
+## `NS_AC` {#cmem_client.models.access_condition.NS_AC}
+
+```python
+NS_AC = 'http://eccenca.com/ac/'
+```
+
+## `NS_ACTION` {#cmem_client.models.access_condition.NS_ACTION}
+
+```python
+NS_ACTION = 'https://vocab.eccenca.com/auth/Action/'
+```
+
diff --git a/docs/develop/cmem-client-api/models/base.md b/docs/develop/cmem-client-api/models/base.md
new file mode 100644
index 000000000..6e0aca531
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/base.md
@@ -0,0 +1,78 @@
+# `base` {#cmem_client.models.base}
+
+Base model classes for all cmem_client data models.
+
+This module provides the foundational model classes that all other models
+inherit from, establishing common patterns for data validation, serialization,
+and repository interactions.
+
+The Model class serves as the base for all Pydantic models in the library,
+while ReadRepositoryItem provides an additional interface for entities that
+can be retrieved from repositories and have identifiable IDs.
+
+Two settings apply to every model of the library and are worth knowing:
+
+- Fields can be set under their Python name as well as under the alias the API uses,
+ so ``Graph(iri=..., assigned_classes=[])`` and ``assignedClasses=[]`` both work.
+ Serializing with ``model_dump(by_alias=True)`` produces what the API expects.
+- Fields the models do not declare are kept rather than rejected, and end up in
+ ``model_extra``. A deployment which returns more than a model knows therefore still
+ validates, and no data is lost. The flip side is that a field the server renames is
+ only noticed when it was required: a renamed optional field silently stays at its
+ default, with the unknown name sitting in ``model_extra``.
+
+**Classes:**
+
+- [**Model**](#cmem_client.models.base.Model) – Base model for all cmem-client models.
+- [**ReadRepositoryItem**](#cmem_client.models.base.ReadRepositoryItem) – Abstract base class for items of a read repository
+
+## `Model` {#cmem_client.models.base.Model}
+
+Bases: BaseModel
+
+Base model for all cmem-client models.
+
+**Attributes:**
+
+- [**model_config**](#cmem_client.models.base.Model.model_config) – Accepts both field names and API aliases as input, and keeps
+unknown fields in ``model_extra`` instead of rejecting them.
+
+### `model_config` {#cmem_client.models.base.Model.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `ReadRepositoryItem` {#cmem_client.models.base.ReadRepositoryItem}
+
+Bases: BaseModel, ABC
+
+Abstract base class for items of a read repository
+
+An item knows the key it is stored under, which ``get_id()`` returns. For most
+resources that is their ID or IRI, while items living inside a project combine
+both, as in ``{project_id}:{id}``.
+
+**Attributes:**
+
+- [**model_config**](#cmem_client.models.base.ReadRepositoryItem.model_config) – Same settings as on ``Model``: aliases are accepted as input and
+unknown fields are kept in ``model_extra``.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.base.ReadRepositoryItem.get_id) – Get the id of the item.
+
+### `get_id` {#cmem_client.models.base.ReadRepositoryItem.get_id}
+
+```python
+get_id()
+```
+
+Get the id of the item.
+
+### `model_config` {#cmem_client.models.base.ReadRepositoryItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/common.md b/docs/develop/cmem-client-api/models/common.md
new file mode 100644
index 000000000..951075e1e
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/common.md
@@ -0,0 +1,34 @@
+# `common` {#cmem_client.models.common}
+
+Shared domain models used across multiple resource types.
+
+Holds the models which are not specific to a single resource. Currently that is the
+tag, which DataIntegration attaches to the items of ``client.datasets`` and
+``client.workflows`` alike.
+
+**Classes:**
+
+- [**Tag**](#cmem_client.models.common.Tag) – A tag with a label, used across multiple resource types (datasets, workflows, etc.).
+
+## `Tag` {#cmem_client.models.common.Tag}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A tag with a label, used across multiple resource types (datasets, workflows, etc.).
+
+**Attributes:**
+
+- [**label**](#cmem_client.models.common.Tag.label) (str) – Human readable text of the tag.
+
+### `label` {#cmem_client.models.common.Tag.label}
+
+```python
+label: str = ''
+```
+
+### `model_config` {#cmem_client.models.common.Tag.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/credentials.md b/docs/develop/cmem-client-api/models/credentials.md
new file mode 100644
index 000000000..d6ca210c9
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/credentials.md
@@ -0,0 +1,102 @@
+# `credentials` {#cmem_client.models.credentials}
+
+Models for the OAuth2 credentials.
+
+These models carry the credentials of an OAuth2 flow as a validated object, instead of
+a set of loose strings. The marketplace operations of ``client.marketplace`` take one
+of them to authenticate against a marketplace server. The secrets are held as
+``SecretStr``, so they are masked when a model is printed or logged.
+
+**Classes:**
+
+- [**BaseCredentials**](#cmem_client.models.credentials.BaseCredentials) – Base class for OAuth2 credential types
+- [**ClientCredentials**](#cmem_client.models.credentials.ClientCredentials) – The client credentials class
+- [**PasswordCredentials**](#cmem_client.models.credentials.PasswordCredentials) – The password credentials class
+
+## `BaseCredentials` {#cmem_client.models.credentials.BaseCredentials}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Base class for OAuth2 credential types
+
+**Attributes:**
+
+- [**client_id**](#cmem_client.models.credentials.BaseCredentials.client_id) (str) – Keycloak client the credentials authenticate with. The default suits
+the password flow; the client credentials flow needs the ID of the service
+account instead.
+
+### `client_id` {#cmem_client.models.credentials.BaseCredentials.client_id}
+
+```python
+client_id: str = 'cmemc'
+```
+
+### `model_config` {#cmem_client.models.credentials.BaseCredentials.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `ClientCredentials` {#cmem_client.models.credentials.ClientCredentials}
+
+Bases: [BaseCredentials](#cmem_client.models.credentials.BaseCredentials)
+
+The client credentials class
+
+**Attributes:**
+
+- [**client_secret**](#cmem_client.models.credentials.ClientCredentials.client_secret) (SecretStr) – Secret of the Keycloak client named by ``client_id``.
+
+### `client_id` {#cmem_client.models.credentials.ClientCredentials.client_id}
+
+```python
+client_id: str = 'cmemc'
+```
+
+### `client_secret` {#cmem_client.models.credentials.ClientCredentials.client_secret}
+
+```python
+client_secret: SecretStr
+```
+
+### `model_config` {#cmem_client.models.credentials.ClientCredentials.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `PasswordCredentials` {#cmem_client.models.credentials.PasswordCredentials}
+
+Bases: [BaseCredentials](#cmem_client.models.credentials.BaseCredentials)
+
+The password credentials class
+
+**Attributes:**
+
+- [**username**](#cmem_client.models.credentials.PasswordCredentials.username) (str) – Name of the Keycloak user.
+- [**password**](#cmem_client.models.credentials.PasswordCredentials.password) (SecretStr) – Password of the Keycloak user.
+
+### `client_id` {#cmem_client.models.credentials.PasswordCredentials.client_id}
+
+```python
+client_id: str = 'cmemc'
+```
+
+### `model_config` {#cmem_client.models.credentials.PasswordCredentials.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `password` {#cmem_client.models.credentials.PasswordCredentials.password}
+
+```python
+password: SecretStr
+```
+
+### `username` {#cmem_client.models.credentials.PasswordCredentials.username}
+
+```python
+username: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/dataset.md b/docs/develop/cmem-client-api/models/dataset.md
new file mode 100644
index 000000000..e2e519ac0
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/dataset.md
@@ -0,0 +1,324 @@
+# `dataset` {#cmem_client.models.dataset}
+
+Corporate Memory dataset models for data integration.
+
+This module defines models for representing datasets within Corporate Memory
+projects. Datasets are data sources or sinks used in data integration workflows,
+connecting to various external systems through plugins.
+
+The Dataset model represents the configuration and metadata of datasets within
+the DataIntegration environment, including their association with projects
+and the plugins that handle their data access.
+
+**Classes:**
+
+- [**Dataset**](#cmem_client.models.dataset.Dataset) – A Dataset Description (Build)
+- [**DatasetData**](#cmem_client.models.dataset.DatasetData) – Plugin configuration as returned by the full dataset details endpoint.
+- [**DatasetMetadata**](#cmem_client.models.dataset.DatasetMetadata) – Metadata for a dataset with optional label and description.
+- [**DatasetPlugin**](#cmem_client.models.dataset.DatasetPlugin) – A dataset plugin description as returned by the task plugins endpoint.
+- [**DatasetPluginSchema**](#cmem_client.models.dataset.DatasetPluginSchema) – Schema description of a dataset plugin as returned by the plugin schema endpoint.
+- [**DatasetSearchResultSet**](#cmem_client.models.dataset.DatasetSearchResultSet) – A dataset search result set
+- [**ItemLink**](#cmem_client.models.dataset.ItemLink) – An item link pointing to a workspace resource.
+- [**PluginProperty**](#cmem_client.models.dataset.PluginProperty) – A single configuration property of a dataset plugin.
+
+## `Dataset` {#cmem_client.models.dataset.Dataset}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A Dataset Description (Build)
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.dataset.Dataset.id) (str) – ID of the dataset, unique within its project.
+- [**project_id**](#cmem_client.models.dataset.Dataset.project_id) (str) – ID of the project holding the dataset. Together with ``id`` it
+forms the ``{project_id}:{id}`` key of the repository.
+- [**tags**](#cmem_client.models.dataset.Dataset.tags) (list[[Tag](../models/common.md#cmem_client.models.common.Tag)]) – Tags attached to the dataset.
+- [**item_links**](#cmem_client.models.dataset.Dataset.item_links) (list[[ItemLink](#cmem_client.models.dataset.ItemLink)]) – Links into the user interface for this dataset.
+- [**data**](#cmem_client.models.dataset.Dataset.data) ([DatasetData](#cmem_client.models.dataset.DatasetData)) – Plugin type and parameters, which is what actually connects the dataset
+to its data.
+- [**metadata**](#cmem_client.models.dataset.Dataset.metadata) ([DatasetMetadata](#cmem_client.models.dataset.DatasetMetadata)) – Label and description of the dataset.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.dataset.Dataset.get_id) – Get the ID of the dataset
+
+### `data` {#cmem_client.models.dataset.Dataset.data}
+
+```python
+data: DatasetData = Field(default_factory=DatasetData)
+```
+
+### `get_id` {#cmem_client.models.dataset.Dataset.get_id}
+
+```python
+get_id()
+```
+
+Get the ID of the dataset
+
+### `id` {#cmem_client.models.dataset.Dataset.id}
+
+```python
+id: str
+```
+
+### `item_links` {#cmem_client.models.dataset.Dataset.item_links}
+
+```python
+item_links: list[ItemLink] = Field(default_factory=list, alias='itemLinks')
+```
+
+### `metadata` {#cmem_client.models.dataset.Dataset.metadata}
+
+```python
+metadata: DatasetMetadata = Field(default_factory=DatasetMetadata)
+```
+
+### `model_config` {#cmem_client.models.dataset.Dataset.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `project_id` {#cmem_client.models.dataset.Dataset.project_id}
+
+```python
+project_id: str = Field(alias='project', default='')
+```
+
+### `tags` {#cmem_client.models.dataset.Dataset.tags}
+
+```python
+tags: list[Tag] = Field(default_factory=list)
+```
+
+## `DatasetData` {#cmem_client.models.dataset.DatasetData}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Plugin configuration as returned by the full dataset details endpoint.
+
+**Attributes:**
+
+- [**type**](#cmem_client.models.dataset.DatasetData.type) (str) – ID of the dataset plugin, e.g. ``csv`` or ``eccencaDataPlatform``. Use
+``DatasetsRepository.get_dataset_plugins()`` to see which ones a deployment
+offers.
+- [**parameters**](#cmem_client.models.dataset.DatasetData.parameters) (dict[str, Any]) – Parameters of that plugin, keyed by parameter name. Which ones
+apply is described by ``DatasetsRepository.get_plugin_schema()``.
+- [**read_only**](#cmem_client.models.dataset.DatasetData.read_only) (bool) – Whether the dataset may only be read.
+- [**uri_property**](#cmem_client.models.dataset.DatasetData.uri_property) (str) – Property holding the URI of an entity, for the dataset types
+which need one.
+
+### `model_config` {#cmem_client.models.dataset.DatasetData.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `parameters` {#cmem_client.models.dataset.DatasetData.parameters}
+
+```python
+parameters: dict[str, Any] = Field(default_factory=dict)
+```
+
+### `read_only` {#cmem_client.models.dataset.DatasetData.read_only}
+
+```python
+read_only: bool = Field(alias='readOnly', default=False)
+```
+
+### `type` {#cmem_client.models.dataset.DatasetData.type}
+
+```python
+type: str = ''
+```
+
+### `uri_property` {#cmem_client.models.dataset.DatasetData.uri_property}
+
+```python
+uri_property: str = Field(alias='uriProperty', default='')
+```
+
+## `DatasetMetadata` {#cmem_client.models.dataset.DatasetMetadata}
+
+Bases: TypedDict
+
+Metadata for a dataset with optional label and description.
+
+**Attributes:**
+
+- [**label**](#cmem_client.models.dataset.DatasetMetadata.label) (str) – Human readable name of the dataset.
+- [**description**](#cmem_client.models.dataset.DatasetMetadata.description) (str) – Description of the dataset.
+
+### `description` {#cmem_client.models.dataset.DatasetMetadata.description}
+
+```python
+description: str
+```
+
+### `label` {#cmem_client.models.dataset.DatasetMetadata.label}
+
+```python
+label: str
+```
+
+## `DatasetPlugin` {#cmem_client.models.dataset.DatasetPlugin}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A dataset plugin description as returned by the task plugins endpoint.
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.dataset.DatasetPlugin.title) (str) – Human readable name of the plugin.
+- [**description**](#cmem_client.models.dataset.DatasetPlugin.description) (str) – What the plugin connects to.
+- [**task_type**](#cmem_client.models.dataset.DatasetPlugin.task_type) (str) – Kind of task the plugin builds, ``Dataset`` for these.
+
+### `description` {#cmem_client.models.dataset.DatasetPlugin.description}
+
+```python
+description: str = ''
+```
+
+### `model_config` {#cmem_client.models.dataset.DatasetPlugin.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `task_type` {#cmem_client.models.dataset.DatasetPlugin.task_type}
+
+```python
+task_type: str = Field(alias='taskType', default='')
+```
+
+### `title` {#cmem_client.models.dataset.DatasetPlugin.title}
+
+```python
+title: str = ''
+```
+
+## `DatasetPluginSchema` {#cmem_client.models.dataset.DatasetPluginSchema}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Schema description of a dataset plugin as returned by the plugin schema endpoint.
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.dataset.DatasetPluginSchema.title) (str) – Human readable name of the plugin.
+- [**description**](#cmem_client.models.dataset.DatasetPluginSchema.description) (str) – What the plugin connects to.
+- [**properties**](#cmem_client.models.dataset.DatasetPluginSchema.properties) (dict[str, [PluginProperty](#cmem_client.models.dataset.PluginProperty)]) – Parameters the plugin accepts, keyed by parameter name. These are
+the keys of ``DatasetData.parameters``.
+- [**required**](#cmem_client.models.dataset.DatasetPluginSchema.required) (list[str]) – Names of the parameters which must be given.
+
+### `description` {#cmem_client.models.dataset.DatasetPluginSchema.description}
+
+```python
+description: str = ''
+```
+
+### `model_config` {#cmem_client.models.dataset.DatasetPluginSchema.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `properties` {#cmem_client.models.dataset.DatasetPluginSchema.properties}
+
+```python
+properties: dict[str, PluginProperty] = Field(default_factory=dict)
+```
+
+### `required` {#cmem_client.models.dataset.DatasetPluginSchema.required}
+
+```python
+required: list[str] = Field(default_factory=list)
+```
+
+### `title` {#cmem_client.models.dataset.DatasetPluginSchema.title}
+
+```python
+title: str = ''
+```
+
+## `DatasetSearchResultSet` {#cmem_client.models.dataset.DatasetSearchResultSet}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A dataset search result set
+
+**Attributes:**
+
+- [**results**](#cmem_client.models.dataset.DatasetSearchResultSet.results) (list[[Dataset](#cmem_client.models.dataset.Dataset)]) – The datasets the search returned.
+
+### `model_config` {#cmem_client.models.dataset.DatasetSearchResultSet.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `results` {#cmem_client.models.dataset.DatasetSearchResultSet.results}
+
+```python
+results: list[Dataset]
+```
+
+## `ItemLink` {#cmem_client.models.dataset.ItemLink}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An item link pointing to a workspace resource.
+
+**Attributes:**
+
+- [**path**](#cmem_client.models.dataset.ItemLink.path) (str) – Path the link points at, relative to the DataIntegration user interface.
+- [**type**](#cmem_client.models.dataset.ItemLink.type) (str) – Kind of view the link opens, e.g. the dataset preview.
+
+### `model_config` {#cmem_client.models.dataset.ItemLink.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `path` {#cmem_client.models.dataset.ItemLink.path}
+
+```python
+path: str = ''
+```
+
+### `type` {#cmem_client.models.dataset.ItemLink.type}
+
+```python
+type: str = ''
+```
+
+## `PluginProperty` {#cmem_client.models.dataset.PluginProperty}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A single configuration property of a dataset plugin.
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.dataset.PluginProperty.title) (str) – Human readable name of the property.
+- [**description**](#cmem_client.models.dataset.PluginProperty.description) (str) – What the property configures.
+
+### `description` {#cmem_client.models.dataset.PluginProperty.description}
+
+```python
+description: str = ''
+```
+
+### `model_config` {#cmem_client.models.dataset.PluginProperty.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `title` {#cmem_client.models.dataset.PluginProperty.title}
+
+```python
+title: str = ''
+```
+
diff --git a/docs/develop/cmem-client-api/models/error.md b/docs/develop/cmem-client-api/models/error.md
new file mode 100644
index 000000000..073283576
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/error.md
@@ -0,0 +1,188 @@
+# `error` {#cmem_client.models.error}
+
+Error response models for Corporate Memory API error handling.
+
+This module defines models for parsing and handling error responses from
+both the DataIntegration (build) and DataPlatform (explore) APIs. Different
+API endpoints return different error response formats, and these models
+provide a unified way to handle them.
+
+The Problem model handles DataPlatform API errors, while ErrorResult handles
+DataIntegration API errors. Both include methods for generating human-readable
+error messages for debugging and user feedback.
+
+**Classes:**
+
+- [**ErrorResult**](#cmem_client.models.error.ErrorResult) – An error result, communicated by the server
+- [**ErrorResultIssue**](#cmem_client.models.error.ErrorResultIssue) – An issue listed with an ErrorResult
+- [**Problem**](#cmem_client.models.error.Problem) – A problem, communicated by the server
+- [**Violation**](#cmem_client.models.error.Violation) – A data violation, communicated with a problem
+
+## `ErrorResult` {#cmem_client.models.error.ErrorResult}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An error result, communicated by the server
+
+returned by the build APIs (DataIntegration)
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.error.ErrorResult.title) (str) – Short summary of the error.
+- [**detail**](#cmem_client.models.error.ErrorResult.detail) (str) – Longer explanation of this particular occurrence.
+- [**issues**](#cmem_client.models.error.ErrorResult.issues) (list[[ErrorResultIssue](#cmem_client.models.error.ErrorResultIssue)] | None) – The single issues behind the error, if the endpoint reports them. An
+import which failed on several tasks lists one issue per task.
+
+### `detail` {#cmem_client.models.error.ErrorResult.detail}
+
+```python
+detail: str
+```
+
+### `issues` {#cmem_client.models.error.ErrorResult.issues}
+
+```python
+issues: list[ErrorResultIssue] | None = None
+```
+
+### `model_config` {#cmem_client.models.error.ErrorResult.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `title` {#cmem_client.models.error.ErrorResult.title}
+
+```python
+title: str
+```
+
+## `ErrorResultIssue` {#cmem_client.models.error.ErrorResultIssue}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An issue listed with an ErrorResult
+
+**Attributes:**
+
+- [**type**](#cmem_client.models.error.ErrorResultIssue.type) (Literal['Error', 'Warning', 'Info']) – Severity of the issue. Only ``Error`` means the operation failed.
+- [**message**](#cmem_client.models.error.ErrorResultIssue.message) (str) – What the issue is.
+- [**id**](#cmem_client.models.error.ErrorResultIssue.id) (str) – ID of the task or item the issue belongs to.
+
+### `id` {#cmem_client.models.error.ErrorResultIssue.id}
+
+```python
+id: str
+```
+
+### `message` {#cmem_client.models.error.ErrorResultIssue.message}
+
+```python
+message: str
+```
+
+### `model_config` {#cmem_client.models.error.ErrorResultIssue.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `type` {#cmem_client.models.error.ErrorResultIssue.type}
+
+```python
+type: Literal['Error', 'Warning', 'Info']
+```
+
+## `Problem` {#cmem_client.models.error.Problem}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A problem, communicated by the server
+
+This type of response is returned by the explore APIs (DataPlatform)
+
+**Attributes:**
+
+- [**type**](#cmem_client.models.error.Problem.type) (str) – URI identifying the kind of problem.
+- [**title**](#cmem_client.models.error.Problem.title) (str) – Short summary of the problem.
+- [**status**](#cmem_client.models.error.Problem.status) (int) – HTTP status code the response carried.
+- [**details**](#cmem_client.models.error.Problem.details) (str) – Longer explanation of this particular occurrence.
+- [**violations**](#cmem_client.models.error.Problem.violations) (list[[Violation](#cmem_client.models.error.Violation)]) – The rejected fields, for a problem caused by invalid input.
+
+**Functions:**
+
+- [**get_exception_message**](#cmem_client.models.error.Problem.get_exception_message) – Get error message
+
+### `details` {#cmem_client.models.error.Problem.details}
+
+```python
+details: str = Field(default='')
+```
+
+### `get_exception_message` {#cmem_client.models.error.Problem.get_exception_message}
+
+```python
+get_exception_message()
+```
+
+Get error message
+
+### `model_config` {#cmem_client.models.error.Problem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `status` {#cmem_client.models.error.Problem.status}
+
+```python
+status: int
+```
+
+### `title` {#cmem_client.models.error.Problem.title}
+
+```python
+title: str
+```
+
+### `type` {#cmem_client.models.error.Problem.type}
+
+```python
+type: str
+```
+
+### `violations` {#cmem_client.models.error.Problem.violations}
+
+```python
+violations: list[Violation] = Field(default=[])
+```
+
+## `Violation` {#cmem_client.models.error.Violation}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A data violation, communicated with a problem
+
+**Attributes:**
+
+- [**field**](#cmem_client.models.error.Violation.field) (str) – Name of the field which was rejected.
+- [**message**](#cmem_client.models.error.Violation.message) (str) – What is wrong with it.
+
+### `field` {#cmem_client.models.error.Violation.field}
+
+```python
+field: str
+```
+
+### `message` {#cmem_client.models.error.Violation.message}
+
+```python
+message: str
+```
+
+### `model_config` {#cmem_client.models.error.Violation.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/graph.md b/docs/develop/cmem-client-api/models/graph.md
new file mode 100644
index 000000000..fe7f47ee3
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/graph.md
@@ -0,0 +1,104 @@
+# `graph` {#cmem_client.models.graph}
+
+RDF graph models for Corporate Memory knowledge graphs.
+
+This module defines models for representing RDF graphs in Corporate Memory's
+DataPlatform (explore) environment. Graphs contain semantic data and are
+the primary storage units for knowledge graphs.
+
+The Graph model includes metadata about graph permissions, assigned semantic
+classes, and access control, providing the foundation for graph-based
+operations in the explore APIs.
+
+**Classes:**
+
+- [**Graph**](#cmem_client.models.graph.Graph) – A graph
+- [**GraphLabel**](#cmem_client.models.graph.GraphLabel) – Label metadata for a graph returned by the /graphs/list endpoint.
+
+## `Graph` {#cmem_client.models.graph.Graph}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A graph
+
+**Attributes:**
+
+- [**iri**](#cmem_client.models.graph.Graph.iri) (str) – IRI of the graph. This is the key of the repository.
+- [**writeable**](#cmem_client.models.graph.Graph.writeable) (bool) – Whether the authenticated account may write to the graph. Access is
+decided by the access conditions of the deployment.
+- [**assigned_classes**](#cmem_client.models.graph.Graph.assigned_classes) (list[str]) – IRIs of the classes assigned to the graph, which is how
+Corporate Memory tells a vocabulary from a data graph or a shape graph.
+- [**label**](#cmem_client.models.graph.Graph.label) ([GraphLabel](#cmem_client.models.graph.GraphLabel) | None) – Label of the graph, or ``None`` if it carries none.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.graph.Graph.get_id) – Get the IRI of the graph
+
+### `assigned_classes` {#cmem_client.models.graph.Graph.assigned_classes}
+
+```python
+assigned_classes: list[str] = Field(alias='assignedClasses')
+```
+
+### `get_id` {#cmem_client.models.graph.Graph.get_id}
+
+```python
+get_id()
+```
+
+Get the IRI of the graph
+
+### `iri` {#cmem_client.models.graph.Graph.iri}
+
+```python
+iri: str
+```
+
+### `label` {#cmem_client.models.graph.Graph.label}
+
+```python
+label: GraphLabel | None = None
+```
+
+### `model_config` {#cmem_client.models.graph.Graph.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `writeable` {#cmem_client.models.graph.Graph.writeable}
+
+```python
+writeable: bool
+```
+
+## `GraphLabel` {#cmem_client.models.graph.GraphLabel}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Label metadata for a graph returned by the /graphs/list endpoint.
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.graph.GraphLabel.title) (str) – Text of the label.
+- [**lang**](#cmem_client.models.graph.GraphLabel.lang) (str | None) – Language tag of the label, e.g. ``en``, or ``None`` for a label without
+one.
+
+### `lang` {#cmem_client.models.graph.GraphLabel.lang}
+
+```python
+lang: str | None = None
+```
+
+### `model_config` {#cmem_client.models.graph.GraphLabel.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `title` {#cmem_client.models.graph.GraphLabel.title}
+
+```python
+title: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/graph_import.md b/docs/develop/cmem-client-api/models/graph_import.md
new file mode 100644
index 000000000..a0b4e0bb4
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/graph_import.md
@@ -0,0 +1,88 @@
+# `graph_import` {#cmem_client.models.graph_import}
+
+Graph import models for Corporate Memory.
+
+An import is an ``owl:imports`` statement, which makes the content of one graph visible
+in another. The single statements are the items of ``client.graph_imports``, keyed by
+``{from_graph}::::{to_graph}``, while the transitive closure of one graph is returned
+as a tree by that repository.
+
+**Classes:**
+
+- [**GraphImport**](#cmem_client.models.graph_import.GraphImport) – Graph Import model.
+- [**GraphImportTree**](#cmem_client.models.graph_import.GraphImportTree) – Import tree structure for a graph.
+
+## `GraphImport` {#cmem_client.models.graph_import.GraphImport}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+Graph Import model.
+
+**Attributes:**
+
+- [**from_graph**](#cmem_client.models.graph_import.GraphImport.from_graph) (str) – IRI of the importing graph, the one which carries the
+``owl:imports`` statement.
+- [**to_graph**](#cmem_client.models.graph_import.GraphImport.to_graph) (str) – IRI of the imported graph.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.graph_import.GraphImport.get_id) – Get the id of the item.
+
+### `from_graph` {#cmem_client.models.graph_import.GraphImport.from_graph}
+
+```python
+from_graph: str
+```
+
+### `get_id` {#cmem_client.models.graph_import.GraphImport.get_id}
+
+```python
+get_id()
+```
+
+Get the id of the item.
+
+### `model_config` {#cmem_client.models.graph_import.GraphImport.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `to_graph` {#cmem_client.models.graph_import.GraphImport.to_graph}
+
+```python
+to_graph: str
+```
+
+## `GraphImportTree` {#cmem_client.models.graph_import.GraphImportTree}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Import tree structure for a graph.
+
+**Attributes:**
+
+- [**tree**](#cmem_client.models.graph_import.GraphImportTree.tree) (dict[str, list[str]]) – Resolved imports, mapping the IRI of each graph to the IRIs of the graphs
+it imports.
+- [**ignored**](#cmem_client.models.graph_import.GraphImportTree.ignored) (dict[str, list[str]]) – Imports which were not resolved, mapping the IRI of each graph to the
+IRIs it points at in vain, for example because the target does not exist or
+would close a cycle.
+
+### `ignored` {#cmem_client.models.graph_import.GraphImportTree.ignored}
+
+```python
+ignored: dict[str, list[str]] = Field(default_factory=dict)
+```
+
+### `model_config` {#cmem_client.models.graph_import.GraphImportTree.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `tree` {#cmem_client.models.graph_import.GraphImportTree.tree}
+
+```python
+tree: dict[str, list[str]] = Field(default_factory=dict)
+```
+
diff --git a/docs/develop/cmem-client-api/models/graph_insight.md b/docs/develop/cmem-client-api/models/graph_insight.md
new file mode 100644
index 000000000..45a84cab4
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/graph_insight.md
@@ -0,0 +1,86 @@
+# `graph_insight` {#cmem_client.models.graph_insight}
+
+Graph Insight models for Corporate Memory.
+
+Graph Insight is the semspect extension, which keeps its own indexed snapshot of the
+graphs it explores. The snapshots are the items of ``client.graph_insights``, keyed by
+their database ID. That repository does not fetch on creation, so call ``fetch_data()``
+before iterating it.
+
+**Classes:**
+
+- [**GraphInsightSnapshot**](#cmem_client.models.graph_insight.GraphInsightSnapshot) – A single Graph Insight snapshot from the semspect extension.
+
+## `GraphInsightSnapshot` {#cmem_client.models.graph_insight.GraphInsightSnapshot}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A single Graph Insight snapshot from the semspect extension.
+
+**Attributes:**
+
+- [**database_id**](#cmem_client.models.graph_insight.GraphInsightSnapshot.database_id) (str) – Identifier of the snapshot database. This is the key of the
+repository.
+- [**main_graph_synced**](#cmem_client.models.graph_insight.GraphInsightSnapshot.main_graph_synced) (str) – IRI of the graph the snapshot was built from.
+- [**all_graphs_synced**](#cmem_client.models.graph_insight.GraphInsightSnapshot.all_graphs_synced) (list[str]) – IRIs of every graph included in the snapshot, which covers
+the main graph and the graphs it imports.
+- [**update_info_timestamp**](#cmem_client.models.graph_insight.GraphInsightSnapshot.update_info_timestamp) (str) – When the snapshot was last updated, as reported by the
+extension.
+- [**status**](#cmem_client.models.graph_insight.GraphInsightSnapshot.status) (str) – State of the snapshot, e.g. whether it is ready or still being built.
+- [**is_valid**](#cmem_client.models.graph_insight.GraphInsightSnapshot.is_valid) (bool) – Whether the snapshot is still in sync with the graphs it was built
+from. A stale snapshot needs to be rebuilt before it is queried again.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.graph_insight.GraphInsightSnapshot.get_id) – Get the snapshot ID.
+
+### `all_graphs_synced` {#cmem_client.models.graph_insight.GraphInsightSnapshot.all_graphs_synced}
+
+```python
+all_graphs_synced: list[str] = Field(alias='allGraphsSynced')
+```
+
+### `database_id` {#cmem_client.models.graph_insight.GraphInsightSnapshot.database_id}
+
+```python
+database_id: str = Field(alias='databaseId')
+```
+
+### `get_id` {#cmem_client.models.graph_insight.GraphInsightSnapshot.get_id}
+
+```python
+get_id()
+```
+
+Get the snapshot ID.
+
+### `is_valid` {#cmem_client.models.graph_insight.GraphInsightSnapshot.is_valid}
+
+```python
+is_valid: bool = Field(alias='isValid')
+```
+
+### `main_graph_synced` {#cmem_client.models.graph_insight.GraphInsightSnapshot.main_graph_synced}
+
+```python
+main_graph_synced: str = Field(alias='mainGraphSynced')
+```
+
+### `model_config` {#cmem_client.models.graph_insight.GraphInsightSnapshot.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `status` {#cmem_client.models.graph_insight.GraphInsightSnapshot.status}
+
+```python
+status: str
+```
+
+### `update_info_timestamp` {#cmem_client.models.graph_insight.GraphInsightSnapshot.update_info_timestamp}
+
+```python
+update_info_timestamp: str = Field(alias='updateInfoTimestamp')
+```
+
diff --git a/docs/develop/cmem-client-api/models/item.md b/docs/develop/cmem-client-api/models/item.md
new file mode 100644
index 000000000..3e7e893fc
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/item.md
@@ -0,0 +1,333 @@
+# `item` {#cmem_client.models.item}
+
+ImportItem base class and inherited classes
+
+A marketplace package can be installed from a directory, a single file or a zip
+archive. These classes hide that difference: ``create_import_item()`` picks the right
+one for a path, and using it as a context manager yields a directory the import can
+read from, extracting the archive first where that is needed and cleaning up after.
+
+**Classes:**
+
+- [**DirectoryImportItem**](#cmem_client.models.item.DirectoryImportItem) – Import from a directory - no transformation needed.
+- [**FileImportItem**](#cmem_client.models.item.FileImportItem) – Import from a single file, copy to temp directory.
+- [**ImportItem**](#cmem_client.models.item.ImportItem) – Abstract base class for different import source types.
+- [**ZipImportItem**](#cmem_client.models.item.ZipImportItem) – Import from a zip archive - extract to temp directory.
+
+**Functions:**
+
+- [**create_import_item**](#cmem_client.models.item.create_import_item) – Factory function to create appropriate ImportItem instance.
+
+## `DirectoryImportItem` {#cmem_client.models.item.DirectoryImportItem}
+
+Bases: [ImportItem](#cmem_client.models.item.ImportItem)
+
+Import from a directory - no transformation needed.
+
+**Functions:**
+
+- [**cleanup**](#cmem_client.models.item.DirectoryImportItem.cleanup) – No cleanup needed for directories.
+- [**detect**](#cmem_client.models.item.DirectoryImportItem.detect) – Detect the appropriate ImportItem type for the given source.
+- [**prepare**](#cmem_client.models.item.DirectoryImportItem.prepare) – Return directory path as-is.
+
+**Attributes:**
+
+- [**import_type**](#cmem_client.models.item.DirectoryImportItem.import_type) –
+- [**model_config**](#cmem_client.models.item.DirectoryImportItem.model_config) –
+- [**source**](#cmem_client.models.item.DirectoryImportItem.source) –
+
+### `cleanup` {#cmem_client.models.item.DirectoryImportItem.cleanup}
+
+```python
+cleanup()
+```
+
+No cleanup needed for directories.
+
+### `detect` {#cmem_client.models.item.DirectoryImportItem.detect}
+
+```python
+detect(source)
+```
+
+Detect the appropriate ImportItem type for the given source.
+
+**Parameters:**
+
+- **source** (Path) – Path to analyze
+
+**Returns:**
+
+- type[[ImportItem](#cmem_client.models.item.ImportItem)] – The appropriate ImportItem subclass
+
+### `import_type` {#cmem_client.models.item.DirectoryImportItem.import_type}
+
+```python
+import_type = 'directory'
+```
+
+### `model_config` {#cmem_client.models.item.DirectoryImportItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `prepare` {#cmem_client.models.item.DirectoryImportItem.prepare}
+
+```python
+prepare()
+```
+
+Return directory path as-is.
+
+### `source` {#cmem_client.models.item.DirectoryImportItem.source}
+
+```python
+source = Path(source) if isinstance(source, str) else source
+```
+
+## `FileImportItem` {#cmem_client.models.item.FileImportItem}
+
+Bases: [ImportItem](#cmem_client.models.item.ImportItem)
+
+Import from a single file, copy to temp directory.
+
+**Functions:**
+
+- [**cleanup**](#cmem_client.models.item.FileImportItem.cleanup) – Remove temporary directory.
+- [**detect**](#cmem_client.models.item.FileImportItem.detect) – Detect the appropriate ImportItem type for the given source.
+- [**prepare**](#cmem_client.models.item.FileImportItem.prepare) – Copy file to a temporary directory.
+
+**Attributes:**
+
+- [**import_type**](#cmem_client.models.item.FileImportItem.import_type) –
+- [**model_config**](#cmem_client.models.item.FileImportItem.model_config) –
+- [**source**](#cmem_client.models.item.FileImportItem.source) –
+
+### `cleanup` {#cmem_client.models.item.FileImportItem.cleanup}
+
+```python
+cleanup()
+```
+
+Remove temporary directory.
+
+### `detect` {#cmem_client.models.item.FileImportItem.detect}
+
+```python
+detect(source)
+```
+
+Detect the appropriate ImportItem type for the given source.
+
+**Parameters:**
+
+- **source** (Path) – Path to analyze
+
+**Returns:**
+
+- type[[ImportItem](#cmem_client.models.item.ImportItem)] – The appropriate ImportItem subclass
+
+### `import_type` {#cmem_client.models.item.FileImportItem.import_type}
+
+```python
+import_type = 'file'
+```
+
+### `model_config` {#cmem_client.models.item.FileImportItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `prepare` {#cmem_client.models.item.FileImportItem.prepare}
+
+```python
+prepare()
+```
+
+Copy file to a temporary directory.
+
+### `source` {#cmem_client.models.item.FileImportItem.source}
+
+```python
+source = Path(source) if isinstance(source, str) else source
+```
+
+## `ImportItem` {#cmem_client.models.item.ImportItem}
+
+```python
+ImportItem(source)
+```
+
+Bases: ABC, [Model](../models/base.md#cmem_client.models.base.Model)
+
+Abstract base class for different import source types.
+
+Each concrete implementation represents a different source type
+(file, directory, zip, etc.) and knows how to prepare itself
+for import by providing a Path to a directory or file.
+
+**Attributes:**
+
+- [**import_type**](#cmem_client.models.item.ImportItem.import_type) (str) – Name of the source type this class handles, one of ``directory``,
+``file`` or ``zip``.
+- [**source**](#cmem_client.models.item.ImportItem.source) – Path the import reads from, as passed to the constructor.
+
+**Functions:**
+
+- [**cleanup**](#cmem_client.models.item.ImportItem.cleanup) – Clean up any temporary resources created during preparation.
+- [**detect**](#cmem_client.models.item.ImportItem.detect) – Detect the appropriate ImportItem type for the given source.
+- [**prepare**](#cmem_client.models.item.ImportItem.prepare) – Prepare the import source and return a path to import from.
+
+**Parameters:**
+
+- **source** (Path | str) – Source path or identifier for the import
+
+### `cleanup` {#cmem_client.models.item.ImportItem.cleanup}
+
+```python
+cleanup()
+```
+
+Clean up any temporary resources created during preparation.
+
+### `detect` {#cmem_client.models.item.ImportItem.detect}
+
+```python
+detect(source)
+```
+
+Detect the appropriate ImportItem type for the given source.
+
+**Parameters:**
+
+- **source** (Path) – Path to analyze
+
+**Returns:**
+
+- type[[ImportItem](#cmem_client.models.item.ImportItem)] – The appropriate ImportItem subclass
+
+### `import_type` {#cmem_client.models.item.ImportItem.import_type}
+
+```python
+import_type: str
+```
+
+### `model_config` {#cmem_client.models.item.ImportItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `prepare` {#cmem_client.models.item.ImportItem.prepare}
+
+```python
+prepare()
+```
+
+Prepare the import source and return a path to import from.
+
+This method transforms the source into a format suitable for import.
+For example:
+- Zip files are extracted to a temp directory
+- Directories are returned as-is
+
+**Returns:**
+
+- Path – Path to directory or file ready for import
+
+### `source` {#cmem_client.models.item.ImportItem.source}
+
+```python
+source = Path(source) if isinstance(source, str) else source
+```
+
+## `ZipImportItem` {#cmem_client.models.item.ZipImportItem}
+
+```python
+ZipImportItem(source)
+```
+
+Bases: [ImportItem](#cmem_client.models.item.ImportItem)
+
+Import from a zip archive - extract to temp directory.
+
+**Functions:**
+
+- [**cleanup**](#cmem_client.models.item.ZipImportItem.cleanup) – Remove temporary directory.
+- [**detect**](#cmem_client.models.item.ZipImportItem.detect) – Detect the appropriate ImportItem type for the given source.
+- [**prepare**](#cmem_client.models.item.ZipImportItem.prepare) – Extract zip to temporary directory.
+
+**Attributes:**
+
+- [**import_type**](#cmem_client.models.item.ZipImportItem.import_type) –
+- [**model_config**](#cmem_client.models.item.ZipImportItem.model_config) –
+- [**source**](#cmem_client.models.item.ZipImportItem.source) –
+
+### `cleanup` {#cmem_client.models.item.ZipImportItem.cleanup}
+
+```python
+cleanup()
+```
+
+Remove temporary directory.
+
+### `detect` {#cmem_client.models.item.ZipImportItem.detect}
+
+```python
+detect(source)
+```
+
+Detect the appropriate ImportItem type for the given source.
+
+**Parameters:**
+
+- **source** (Path) – Path to analyze
+
+**Returns:**
+
+- type[[ImportItem](#cmem_client.models.item.ImportItem)] – The appropriate ImportItem subclass
+
+### `import_type` {#cmem_client.models.item.ZipImportItem.import_type}
+
+```python
+import_type = 'zip'
+```
+
+### `model_config` {#cmem_client.models.item.ZipImportItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `prepare` {#cmem_client.models.item.ZipImportItem.prepare}
+
+```python
+prepare()
+```
+
+Extract zip to temporary directory.
+
+### `source` {#cmem_client.models.item.ZipImportItem.source}
+
+```python
+source = Path(source) if isinstance(source, str) else source
+```
+
+## `create_import_item` {#cmem_client.models.item.create_import_item}
+
+```python
+create_import_item(source)
+```
+
+Factory function to create appropriate ImportItem instance.
+
+**Parameters:**
+
+- **source** (Path) – Path to the import source
+
+**Returns:**
+
+- [ImportItem](#cmem_client.models.item.ImportItem) – Appropriate ImportItem instance based on source type
+
diff --git a/docs/develop/cmem-client-api/models/keycloak_client.md b/docs/develop/cmem-client-api/models/keycloak_client.md
new file mode 100644
index 000000000..de6ccabc1
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/keycloak_client.md
@@ -0,0 +1,77 @@
+# `keycloak_client` {#cmem_client.models.keycloak_client}
+
+Keycloak client models.
+
+An OpenID Connect client is the service account a machine authenticates with. The
+clients of the configured realm are the items of ``client.client_accounts``, keyed by
+their ``client_id``.
+
+**Classes:**
+
+- [**KeycloakClient**](#cmem_client.models.keycloak_client.KeycloakClient) – A Keycloak OpenID Connect client in the Corporate Memory realm.
+
+## `KeycloakClient` {#cmem_client.models.keycloak_client.KeycloakClient}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A Keycloak OpenID Connect client in the Corporate Memory realm.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.keycloak_client.KeycloakClient.id) (str) – Internal Keycloak identifier of the client, a UUID. Needed by the Keycloak
+admin API, but not the key of the repository.
+- [**client_id**](#cmem_client.models.keycloak_client.KeycloakClient.client_id) (str) – Client identifier used when authenticating, e.g.
+``cmem-service-account``. This is the key of the repository.
+- [**description**](#cmem_client.models.keycloak_client.KeycloakClient.description) (str) – Description of the client as maintained in Keycloak.
+- [**protocol**](#cmem_client.models.keycloak_client.KeycloakClient.protocol) (str) – Authentication protocol of the client, e.g. ``openid-connect``.
+- [**secret**](#cmem_client.models.keycloak_client.KeycloakClient.secret) (str | None) – Client secret, only present if the deployment returns it and the
+requesting account is allowed to read it.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.keycloak_client.KeycloakClient.get_id) – Get the clientId as the unique identifier.
+
+### `client_id` {#cmem_client.models.keycloak_client.KeycloakClient.client_id}
+
+```python
+client_id: str = Field(alias='clientId')
+```
+
+### `description` {#cmem_client.models.keycloak_client.KeycloakClient.description}
+
+```python
+description: str = ''
+```
+
+### `get_id` {#cmem_client.models.keycloak_client.KeycloakClient.get_id}
+
+```python
+get_id()
+```
+
+Get the clientId as the unique identifier.
+
+### `id` {#cmem_client.models.keycloak_client.KeycloakClient.id}
+
+```python
+id: str
+```
+
+### `model_config` {#cmem_client.models.keycloak_client.KeycloakClient.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `protocol` {#cmem_client.models.keycloak_client.KeycloakClient.protocol}
+
+```python
+protocol: str = ''
+```
+
+### `secret` {#cmem_client.models.keycloak_client.KeycloakClient.secret}
+
+```python
+secret: str | None = None
+```
+
diff --git a/docs/develop/cmem-client-api/models/logging_config.md b/docs/develop/cmem-client-api/models/logging_config.md
new file mode 100644
index 000000000..25ef94018
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/logging_config.md
@@ -0,0 +1,186 @@
+# `logging_config` {#cmem_client.models.logging_config}
+
+Models for the configuration of the logging module
+
+``Client.configure_logging_from_dict()`` and ``configure_logging_from_json()`` validate
+their input against these models before handing it to ``logging.config.dictConfig()``,
+so a malformed logging configuration is rejected with a readable error instead of
+failing inside the standard library. The models mirror the dictConfig schema and allow
+extra keys, so anything dictConfig understands stays usable.
+
+**Classes:**
+
+- [**FormatterConfig**](#cmem_client.models.logging_config.FormatterConfig) – Formatter configuration.
+- [**HandlerConfig**](#cmem_client.models.logging_config.HandlerConfig) – Handler configuration.
+- [**LoggerConfig**](#cmem_client.models.logging_config.LoggerConfig) – Logger configuration.
+- [**LoggingConfig**](#cmem_client.models.logging_config.LoggingConfig) – Logging configuration. Allows for extra fields but validates the most common fields.
+
+**Attributes:**
+
+- [**LogLevel**](#cmem_client.models.logging_config.LogLevel) – Levels accepted in a logging configuration, including the client's own ``TRACE``.
+
+## `FormatterConfig` {#cmem_client.models.logging_config.FormatterConfig}
+
+Bases: BaseModel
+
+Formatter configuration.
+
+**Attributes:**
+
+- [**format**](#cmem_client.models.logging_config.FormatterConfig.format) (str) – Format string of the log records, e.g.
+``"%(asctime)s - %(name)s - %(levelname)s - %(message)s"``.
+- [**datefmt**](#cmem_client.models.logging_config.FormatterConfig.datefmt) (str | None) – Format string for the timestamp, or ``None`` for the default.
+
+### `datefmt` {#cmem_client.models.logging_config.FormatterConfig.datefmt}
+
+```python
+datefmt: str | None = None
+```
+
+### `format` {#cmem_client.models.logging_config.FormatterConfig.format}
+
+```python
+format: str
+```
+
+## `HandlerConfig` {#cmem_client.models.logging_config.HandlerConfig}
+
+Bases: BaseModel
+
+Handler configuration.
+
+**Attributes:**
+
+- [**class_**](#cmem_client.models.logging_config.HandlerConfig.class_) (str) – Dotted path of the handler class, e.g. ``logging.StreamHandler``.
+Written as ``class`` in the configuration itself.
+- [**level**](#cmem_client.models.logging_config.HandlerConfig.level) ([LogLevel](#cmem_client.models.logging_config.LogLevel) | None) – Lowest level this handler emits, or ``None`` to inherit from the logger.
+- [**formatter**](#cmem_client.models.logging_config.HandlerConfig.formatter) (str | None) – Name of the formatter to use, referring to a key of ``formatters``.
+- [**filename**](#cmem_client.models.logging_config.HandlerConfig.filename) (str | None) – File the handler writes to, for the file based handlers.
+
+### `class_` {#cmem_client.models.logging_config.HandlerConfig.class_}
+
+```python
+class_: str = Field(..., alias='class')
+```
+
+### `filename` {#cmem_client.models.logging_config.HandlerConfig.filename}
+
+```python
+filename: str | None
+```
+
+### `formatter` {#cmem_client.models.logging_config.HandlerConfig.formatter}
+
+```python
+formatter: str | None
+```
+
+### `level` {#cmem_client.models.logging_config.HandlerConfig.level}
+
+```python
+level: LogLevel | None
+```
+
+## `LogLevel` {#cmem_client.models.logging_config.LogLevel}
+
+```python
+LogLevel = Literal['TRACE', 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
+```
+
+Levels accepted in a logging configuration, including the client's own ``TRACE``.
+
+## `LoggerConfig` {#cmem_client.models.logging_config.LoggerConfig}
+
+Bases: BaseModel
+
+Logger configuration.
+
+**Attributes:**
+
+- [**level**](#cmem_client.models.logging_config.LoggerConfig.level) ([LogLevel](#cmem_client.models.logging_config.LogLevel) | None) – Lowest level this logger passes on, e.g. ``DEBUG``.
+- [**handlers**](#cmem_client.models.logging_config.LoggerConfig.handlers) (list[str] | None) – Names of the handlers to attach, referring to keys of ``handlers``.
+
+### `handlers` {#cmem_client.models.logging_config.LoggerConfig.handlers}
+
+```python
+handlers: list[str] | None
+```
+
+### `level` {#cmem_client.models.logging_config.LoggerConfig.level}
+
+```python
+level: LogLevel | None
+```
+
+## `LoggingConfig` {#cmem_client.models.logging_config.LoggingConfig}
+
+Bases: BaseModel
+
+Logging configuration. Allows for extra fields but validates the most common fields.
+
+**Attributes:**
+
+- [**version**](#cmem_client.models.logging_config.LoggingConfig.version) (int) – Schema version of the configuration. dictConfig only knows ``1``, and
+anything else is rejected.
+- [**disable_existing_loggers**](#cmem_client.models.logging_config.LoggingConfig.disable_existing_loggers) (bool) – Whether loggers which already exist are switched off.
+Setting this silences libraries that configured logging before the client.
+- [**formatters**](#cmem_client.models.logging_config.LoggingConfig.formatters) (dict[str, [FormatterConfig](#cmem_client.models.logging_config.FormatterConfig)] | None) – Formatters of the configuration, keyed by name.
+- [**handlers**](#cmem_client.models.logging_config.LoggingConfig.handlers) (dict[str, [HandlerConfig](#cmem_client.models.logging_config.HandlerConfig)] | None) – Handlers of the configuration, keyed by name.
+- [**loggers**](#cmem_client.models.logging_config.LoggingConfig.loggers) (dict[str, [LoggerConfig](#cmem_client.models.logging_config.LoggerConfig)] | None) – Loggers of the configuration, keyed by logger name. Configure
+``cmem_client.client`` to cover the whole library at once.
+- [**root**](#cmem_client.models.logging_config.LoggingConfig.root) ([LoggerConfig](#cmem_client.models.logging_config.LoggerConfig) | None) – Configuration of the root logger.
+
+**Functions:**
+
+- [**check_version**](#cmem_client.models.logging_config.LoggingConfig.check_version) – Ensure version is always 1.
+
+### `check_version` {#cmem_client.models.logging_config.LoggingConfig.check_version}
+
+```python
+check_version(v)
+```
+
+Ensure version is always 1.
+
+### `disable_existing_loggers` {#cmem_client.models.logging_config.LoggingConfig.disable_existing_loggers}
+
+```python
+disable_existing_loggers: bool
+```
+
+### `formatters` {#cmem_client.models.logging_config.LoggingConfig.formatters}
+
+```python
+formatters: dict[str, FormatterConfig] | None
+```
+
+### `handlers` {#cmem_client.models.logging_config.LoggingConfig.handlers}
+
+```python
+handlers: dict[str, HandlerConfig] | None
+```
+
+### `loggers` {#cmem_client.models.logging_config.LoggingConfig.loggers}
+
+```python
+loggers: dict[str, LoggerConfig] | None
+```
+
+### `model_config` {#cmem_client.models.logging_config.LoggingConfig.model_config}
+
+```python
+model_config = {'extra': 'allow'}
+```
+
+### `root` {#cmem_client.models.logging_config.LoggingConfig.root}
+
+```python
+root: LoggerConfig | None
+```
+
+### `version` {#cmem_client.models.logging_config.LoggingConfig.version}
+
+```python
+version: int = 1
+```
+
diff --git a/docs/develop/cmem-client-api/models/marshalling_plugins.md b/docs/develop/cmem-client-api/models/marshalling_plugins.md
new file mode 100644
index 000000000..09d0c2a86
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/marshalling_plugins.md
@@ -0,0 +1,64 @@
+# `marshalling_plugins` {#cmem_client.models.marshalling_plugins}
+
+Marshalling Plugin models
+
+A marshalling plugin defines the file format a DataIntegration workspace is written to
+and read from. The plugins a deployment offers are returned by
+``client.workspace.get_marshalling_plugins()``, and their ``id`` is what
+``client.workspace.export_to_zip()`` and ``import_from_zip()`` expect.
+
+**Classes:**
+
+- [**MarshallingPlugin**](#cmem_client.models.marshalling_plugins.MarshallingPlugin) – Marshalling Plugin Model
+
+## `MarshallingPlugin` {#cmem_client.models.marshalling_plugins.MarshallingPlugin}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Marshalling Plugin Model
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.marshalling_plugins.MarshallingPlugin.id) (str) – Identifier of the plugin, e.g. ``xmlZip``, as accepted by the workspace
+import and export operations.
+- [**label**](#cmem_client.models.marshalling_plugins.MarshallingPlugin.label) (str) – Human readable name of the plugin.
+- [**description**](#cmem_client.models.marshalling_plugins.MarshallingPlugin.description) (str) – What the plugin does and which format it produces.
+- [**file_extension**](#cmem_client.models.marshalling_plugins.MarshallingPlugin.file_extension) (str) – File extension of the produced files, without a leading dot.
+- [**media_type**](#cmem_client.models.marshalling_plugins.MarshallingPlugin.media_type) (str) – Media type of the produced files.
+
+### `description` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.description}
+
+```python
+description: str
+```
+
+### `file_extension` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.file_extension}
+
+```python
+file_extension: str = Field(alias='fileExtension')
+```
+
+### `id` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.id}
+
+```python
+id: str
+```
+
+### `label` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.label}
+
+```python
+label: str
+```
+
+### `media_type` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.media_type}
+
+```python
+media_type: str = Field(alias='mediaType')
+```
+
+### `model_config` {#cmem_client.models.marshalling_plugins.MarshallingPlugin.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/package.md b/docs/develop/cmem-client-api/models/package.md
new file mode 100644
index 000000000..080620415
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/package.md
@@ -0,0 +1,217 @@
+# `package` {#cmem_client.models.package}
+
+Marketplace package models.
+
+A marketplace package bundles graphs, projects and Python packages into one installable
+unit. The packages installed in a deployment are the items of
+``client.marketplace_packages``, keyed by their package ID, while the packages a
+marketplace server offers are browsed through ``client.marketplace``.
+
+**Classes:**
+
+- [**Package**](#cmem_client.models.package.Package) – Installed marketplace package.
+- [**PackageInstallationMetadata**](#cmem_client.models.package.PackageInstallationMetadata) – Metadata about how and when a marketplace package was installed.
+- [**PackageLock**](#cmem_client.models.package.PackageLock) – Package lock.
+- [**PackageMetadata**](#cmem_client.models.package.PackageMetadata) – Package metadata.
+
+## `Package` {#cmem_client.models.package.Package}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+Installed marketplace package.
+
+Represents a package installed in Corporate Memory with all its
+metadata, file specifications, and version information as stored
+in the marketplace catalog graph.
+
+**Attributes:**
+
+- [**package_version**](#cmem_client.models.package.Package.package_version) (PackageVersion) – Manifest and contents of the installed version. Its
+``manifest.package_id`` is the key of the repository.
+- [**installation_metadata**](#cmem_client.models.package.Package.installation_metadata) ([PackageInstallationMetadata](#cmem_client.models.package.PackageInstallationMetadata) | None) – How and when the package was installed, or ``None`` for
+a package installed before this was recorded.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.package.Package.get_id) – Get the package identifier.
+
+### `get_id` {#cmem_client.models.package.Package.get_id}
+
+```python
+get_id()
+```
+
+Get the package identifier.
+
+**Returns:**
+
+- str – The package_id which uniquely identifies this package.
+
+### `installation_metadata` {#cmem_client.models.package.Package.installation_metadata}
+
+```python
+installation_metadata: PackageInstallationMetadata | None = None
+```
+
+### `model_config` {#cmem_client.models.package.Package.model_config}
+
+```python
+model_config = ConfigDict(arbitrary_types_allowed=True, str_strip_whitespace=True, extra='forbid')
+```
+
+### `package_version` {#cmem_client.models.package.Package.package_version}
+
+```python
+package_version: PackageVersion
+```
+
+## `PackageInstallationMetadata` {#cmem_client.models.package.PackageInstallationMetadata}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Metadata about how and when a marketplace package was installed.
+
+This metadata is stored as JSON in the RDF graph and used to determine
+whether packages can be automatically removed when they are dependencies.
+
+**Attributes:**
+
+- [**dependency_level**](#cmem_client.models.package.PackageInstallationMetadata.dependency_level) (int) – Depth at which the package was pulled in. ``0`` means it was
+installed directly, anything above that means it came in as a dependency
+and may be removed again with the package which required it.
+- [**installed_at**](#cmem_client.models.package.PackageInstallationMetadata.installed_at) (datetime) – When the package was installed.
+- [**python_dependency_already_existed**](#cmem_client.models.package.PackageInstallationMetadata.python_dependency_already_existed) (list[str]) – Python dependencies of the package which
+were already installed beforehand, so uninstalling must leave them alone.
+- [**package_dependency_already_existed**](#cmem_client.models.package.PackageInstallationMetadata.package_dependency_already_existed) (list[str]) – Marketplace packages this one depends on
+which were already installed beforehand.
+- [**origin_type**](#cmem_client.models.package.PackageInstallationMetadata.origin_type) (Literal['file', 'marketplace'] | None) – Where the package came from, a ``marketplace`` server or a local
+``file``. ``None`` for packages installed before this was tracked.
+- [**origin_url**](#cmem_client.models.package.PackageInstallationMetadata.origin_url) (str | None) – URL of the marketplace server the package came from. Only set when
+``origin_type`` is ``marketplace``.
+
+### `dependency_level` {#cmem_client.models.package.PackageInstallationMetadata.dependency_level}
+
+```python
+dependency_level: int = Field(ge=0, default=0)
+```
+
+### `installed_at` {#cmem_client.models.package.PackageInstallationMetadata.installed_at}
+
+```python
+installed_at: datetime = Field(default=datetime.now(tz=UTC))
+```
+
+### `is_direct_installed` {#cmem_client.models.package.PackageInstallationMetadata.is_direct_installed}
+
+```python
+is_direct_installed: bool
+```
+
+Indicates whether this package was installed directly
+
+### `model_config` {#cmem_client.models.package.PackageInstallationMetadata.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `origin_type` {#cmem_client.models.package.PackageInstallationMetadata.origin_type}
+
+```python
+origin_type: Literal['file', 'marketplace'] | None = None
+```
+
+### `origin_url` {#cmem_client.models.package.PackageInstallationMetadata.origin_url}
+
+```python
+origin_url: str | None = None
+```
+
+### `package_dependency_already_existed` {#cmem_client.models.package.PackageInstallationMetadata.package_dependency_already_existed}
+
+```python
+package_dependency_already_existed: list[str] = Field(default=[])
+```
+
+### `python_dependency_already_existed` {#cmem_client.models.package.PackageInstallationMetadata.python_dependency_already_existed}
+
+```python
+python_dependency_already_existed: list[str] = Field(default=[])
+```
+
+## `PackageLock` {#cmem_client.models.package.PackageLock}
+
+Bases: BaseModel
+
+Package lock.
+
+A lock is written for the duration of an install or uninstall, so two clients do
+not work on the same package at once.
+
+**Attributes:**
+
+- [**package_id**](#cmem_client.models.package.PackageLock.package_id) (str) – ID of the locked package.
+- [**timestamp**](#cmem_client.models.package.PackageLock.timestamp) (datetime) – When the activity started.
+- [**user_account**](#cmem_client.models.package.PackageLock.user_account) (str) – Account which started the activity.
+- [**activity**](#cmem_client.models.package.PackageLock.activity) (Literal['Install', 'Uninstall']) – What is being done, ``Install`` or ``Uninstall``.
+
+### `activity` {#cmem_client.models.package.PackageLock.activity}
+
+```python
+activity: Literal['Install', 'Uninstall']
+```
+
+### `package_id` {#cmem_client.models.package.PackageLock.package_id}
+
+```python
+package_id: str
+```
+
+### `timestamp` {#cmem_client.models.package.PackageLock.timestamp}
+
+```python
+timestamp: datetime
+```
+
+### `user_account` {#cmem_client.models.package.PackageLock.user_account}
+
+```python
+user_account: str
+```
+
+## `PackageMetadata` {#cmem_client.models.package.PackageMetadata}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Package metadata.
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.package.PackageMetadata.name) (str) – Human readable name of the package.
+- [**description**](#cmem_client.models.package.PackageMetadata.description) (str) – What the package provides.
+- [**comment**](#cmem_client.models.package.PackageMetadata.comment) (str | None) – Additional remark about the package.
+
+### `comment` {#cmem_client.models.package.PackageMetadata.comment}
+
+```python
+comment: str | None = None
+```
+
+### `description` {#cmem_client.models.package.PackageMetadata.description}
+
+```python
+description: str
+```
+
+### `model_config` {#cmem_client.models.package.PackageMetadata.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `name` {#cmem_client.models.package.PackageMetadata.name}
+
+```python
+name: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/project.md b/docs/develop/cmem-client-api/models/project.md
new file mode 100644
index 000000000..036c5789f
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/project.md
@@ -0,0 +1,196 @@
+# `project` {#cmem_client.models.project}
+
+Corporate Memory project models and metadata.
+
+This module defines models for representing Corporate Memory DataIntegration
+projects, including their metadata such as labels, descriptions, and tags.
+
+Projects are the primary organizational unit in Corporate Memory's build
+environment, containing datasets, transformations, and other integration
+components. The Project model provides validation and serialization for
+project data exchanged with the DataIntegration API.
+
+**Classes:**
+
+- [**FailedTasksReport**](#cmem_client.models.project.FailedTasksReport) – The failed tasks report
+- [**Project**](#cmem_client.models.project.Project) – A Build (DataIntegration) Project
+- [**ProjectMetaData**](#cmem_client.models.project.ProjectMetaData) – Project Meta Data
+
+**Functions:**
+
+- [**default_metadata**](#cmem_client.models.project.default_metadata) – Get the current UTC datetime
+
+## `FailedTasksReport` {#cmem_client.models.project.FailedTasksReport}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+The failed tasks report
+
+**Attributes:**
+
+- [**task_id**](#cmem_client.models.project.FailedTasksReport.task_id) (str | None) – ID of the task which failed to load.
+- [**error_summary**](#cmem_client.models.project.FailedTasksReport.error_summary) (str | None) – Short summary of what went wrong.
+- [**task_label**](#cmem_client.models.project.FailedTasksReport.task_label) (str | None) – Human readable name of the task.
+- [**task_description**](#cmem_client.models.project.FailedTasksReport.task_description) (str | None) – Description of the task.
+- [**error_message**](#cmem_client.models.project.FailedTasksReport.error_message) (str | None) – Full error message.
+- [**project_id**](#cmem_client.models.project.FailedTasksReport.project_id) (str | None) – ID of the project holding the task.
+- [**stack_trace**](#cmem_client.models.project.FailedTasksReport.stack_trace) (dict[str, Any] | None) – Stack trace of the error, as reported by DataIntegration.
+
+### `error_message` {#cmem_client.models.project.FailedTasksReport.error_message}
+
+```python
+error_message: str | None = Field(alias='errorMessage', default=None)
+```
+
+### `error_summary` {#cmem_client.models.project.FailedTasksReport.error_summary}
+
+```python
+error_summary: str | None = Field(alias='errorSummary', default=None)
+```
+
+### `model_config` {#cmem_client.models.project.FailedTasksReport.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `project_id` {#cmem_client.models.project.FailedTasksReport.project_id}
+
+```python
+project_id: str | None = Field(alias='projectId', default=None)
+```
+
+### `stack_trace` {#cmem_client.models.project.FailedTasksReport.stack_trace}
+
+```python
+stack_trace: dict[str, Any] | None = Field(alias='stackTrace', default=None)
+```
+
+### `task_description` {#cmem_client.models.project.FailedTasksReport.task_description}
+
+```python
+task_description: str | None = Field(alias='taskDescription', default=None)
+```
+
+### `task_id` {#cmem_client.models.project.FailedTasksReport.task_id}
+
+```python
+task_id: str | None = Field(alias='taskId', default=None)
+```
+
+### `task_label` {#cmem_client.models.project.FailedTasksReport.task_label}
+
+```python
+task_label: str | None = Field(alias='taskLabel', default=None)
+```
+
+## `Project` {#cmem_client.models.project.Project}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A Build (DataIntegration) Project
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.project.Project.name) (str) – ID of the project, unique within the deployment. This is the key of the
+repository, and it is what the other repositories mean by ``project_id``.
+- [**meta_data**](#cmem_client.models.project.Project.meta_data) ([ProjectMetaData](#cmem_client.models.project.ProjectMetaData)) – Label, description and tags of the project.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.project.Project.get_id) – Get the ID of the project
+- [**model_post_init**](#cmem_client.models.project.Project.model_post_init) – Set the label to the name if needed
+
+### `get_id` {#cmem_client.models.project.Project.get_id}
+
+```python
+get_id()
+```
+
+Get the ID of the project
+
+### `meta_data` {#cmem_client.models.project.Project.meta_data}
+
+```python
+meta_data: ProjectMetaData = Field(alias='metaData', default_factory=default_metadata)
+```
+
+### `model_config` {#cmem_client.models.project.Project.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `model_post_init` {#cmem_client.models.project.Project.model_post_init}
+
+```python
+model_post_init(context)
+```
+
+Set the label to the name if needed
+
+### `name` {#cmem_client.models.project.Project.name}
+
+```python
+name: str
+```
+
+## `ProjectMetaData` {#cmem_client.models.project.ProjectMetaData}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Project Meta Data
+
+**Attributes:**
+
+- [**label**](#cmem_client.models.project.ProjectMetaData.label) (str | None) – Human readable name of the project. DataIntegration refuses an empty
+one, so a project created without a label gets its ID instead.
+- [**description**](#cmem_client.models.project.ProjectMetaData.description) (str | None) – Description of the project.
+- [**tags**](#cmem_client.models.project.ProjectMetaData.tags) (list[str] | None) – Tags attached to the project.
+- [**modified**](#cmem_client.models.project.ProjectMetaData.modified) (str | None) – When the project was last modified.
+- [**last_modified_by_user**](#cmem_client.models.project.ProjectMetaData.last_modified_by_user) (str | None) – IRI of the account which modified it last.
+
+### `description` {#cmem_client.models.project.ProjectMetaData.description}
+
+```python
+description: str | None = None
+```
+
+### `label` {#cmem_client.models.project.ProjectMetaData.label}
+
+```python
+label: str | None = None
+```
+
+### `last_modified_by_user` {#cmem_client.models.project.ProjectMetaData.last_modified_by_user}
+
+```python
+last_modified_by_user: str | None = Field(alias='lastModifiedByUser', default=None)
+```
+
+### `model_config` {#cmem_client.models.project.ProjectMetaData.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `modified` {#cmem_client.models.project.ProjectMetaData.modified}
+
+```python
+modified: str | None = None
+```
+
+### `tags` {#cmem_client.models.project.ProjectMetaData.tags}
+
+```python
+tags: list[str] | None = None
+```
+
+## `default_metadata` {#cmem_client.models.project.default_metadata}
+
+```python
+default_metadata()
+```
+
+Get the current UTC datetime
+
diff --git a/docs/develop/cmem-client-api/models/python_install.md b/docs/develop/cmem-client-api/models/python_install.md
new file mode 100644
index 000000000..8e332331f
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/python_install.md
@@ -0,0 +1,134 @@
+# `python_install` {#cmem_client.models.python_install}
+
+Result models for Python package installation and plugin management operations.
+
+Installing a Python package into DataIntegration runs pip inside the deployment and
+then registers the plugins the package ships. Both steps can fail on their own, so the
+operations of ``client.python_packages`` report the outcome with these models rather
+than raising: a package can install cleanly and still contribute a plugin which does
+not load.
+
+**Classes:**
+
+- [**PluginError**](#cmem_client.models.python_install.PluginError) – An error reported during plugin registration.
+- [**PluginReloadResult**](#cmem_client.models.python_install.PluginReloadResult) – Result of a plugin reload operation.
+- [**PythonInstallResult**](#cmem_client.models.python_install.PythonInstallResult) – Result of a Python package installation (by name or by file).
+
+## `PluginError` {#cmem_client.models.python_install.PluginError}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+An error reported during plugin registration.
+
+**Attributes:**
+
+- [**package_name**](#cmem_client.models.python_install.PluginError.package_name) (str) – Name of the package whose plugin failed to register.
+- [**error_message**](#cmem_client.models.python_install.PluginError.error_message) (str) – Message of the error.
+- [**error_type**](#cmem_client.models.python_install.PluginError.error_type) (str) – Type of the error, as named by DataIntegration.
+- [**stack_trace**](#cmem_client.models.python_install.PluginError.stack_trace) (str | None) – Stack trace of the error, if the deployment reports one.
+
+### `error_message` {#cmem_client.models.python_install.PluginError.error_message}
+
+```python
+error_message: str = Field(alias='errorMessage', default='')
+```
+
+### `error_type` {#cmem_client.models.python_install.PluginError.error_type}
+
+```python
+error_type: str = Field(alias='errorType', default='')
+```
+
+### `model_config` {#cmem_client.models.python_install.PluginError.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `package_name` {#cmem_client.models.python_install.PluginError.package_name}
+
+```python
+package_name: str = Field(alias='packageName', default='')
+```
+
+### `stack_trace` {#cmem_client.models.python_install.PluginError.stack_trace}
+
+```python
+stack_trace: str | None = Field(alias='stackTrace', default=None)
+```
+
+## `PluginReloadResult` {#cmem_client.models.python_install.PluginReloadResult}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Result of a plugin reload operation.
+
+**Attributes:**
+
+- [**errors**](#cmem_client.models.python_install.PluginReloadResult.errors) (list[[PluginError](#cmem_client.models.python_install.PluginError)]) – Plugins which failed to register during the reload. An empty list means
+every plugin loaded.
+
+### `errors` {#cmem_client.models.python_install.PluginReloadResult.errors}
+
+```python
+errors: list[PluginError] = Field(default_factory=list)
+```
+
+### `model_config` {#cmem_client.models.python_install.PluginReloadResult.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `PythonInstallResult` {#cmem_client.models.python_install.PythonInstallResult}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Result of a Python package installation (by name or by file).
+
+**Attributes:**
+
+- [**success**](#cmem_client.models.python_install.PythonInstallResult.success) (bool) – Whether the installation itself succeeded. Plugins which failed to
+register afterwards are reported in ``plugin_errors`` and do not clear this
+flag.
+- [**output**](#cmem_client.models.python_install.PythonInstallResult.output) (str) – Combined output of the installation.
+- [**standard_output**](#cmem_client.models.python_install.PythonInstallResult.standard_output) (str) – What the installation wrote to stdout.
+- [**error_output**](#cmem_client.models.python_install.PythonInstallResult.error_output) (str) – What the installation wrote to stderr.
+- [**plugin_errors**](#cmem_client.models.python_install.PythonInstallResult.plugin_errors) (list[[PluginError](#cmem_client.models.python_install.PluginError)]) – Plugins of the installed package which failed to register.
+
+### `error_output` {#cmem_client.models.python_install.PythonInstallResult.error_output}
+
+```python
+error_output: str = Field(alias='errorOutput', default='')
+```
+
+### `model_config` {#cmem_client.models.python_install.PythonInstallResult.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `output` {#cmem_client.models.python_install.PythonInstallResult.output}
+
+```python
+output: str = ''
+```
+
+### `plugin_errors` {#cmem_client.models.python_install.PythonInstallResult.plugin_errors}
+
+```python
+plugin_errors: list[PluginError] = Field(default_factory=list)
+```
+
+### `standard_output` {#cmem_client.models.python_install.PythonInstallResult.standard_output}
+
+```python
+standard_output: str = Field(alias='standardOutput', default='')
+```
+
+### `success` {#cmem_client.models.python_install.PythonInstallResult.success}
+
+```python
+success: bool = False
+```
+
diff --git a/docs/develop/cmem-client-api/models/python_package.md b/docs/develop/cmem-client-api/models/python_package.md
new file mode 100644
index 000000000..401e7b626
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/python_package.md
@@ -0,0 +1,69 @@
+# `python_package` {#cmem_client.models.python_package}
+
+Python package models.
+
+DataIntegration can be extended with Python packages, which ship the plugins a
+workflow uses. The installed packages are the items of ``client.python_packages``,
+keyed by their PyPI name.
+
+**Classes:**
+
+- [**PythonPackage**](#cmem_client.models.python_package.PythonPackage) – Installed python package.
+
+**Attributes:**
+
+- [**PipRequirementSpecifier**](#cmem_client.models.python_package.PipRequirementSpecifier) –
+
+## `PipRequirementSpecifier` {#cmem_client.models.python_package.PipRequirementSpecifier}
+
+```python
+PipRequirementSpecifier = Annotated[str, Field(title='Pip Requirement Specifier', description="A pip requirement specifier as defined in PEP 440/508: a package name optionally followed by one or more comma-separated version constraints (e.g. 'requests', 'requests==2.27.1', 'requests>=2.0,<3.0').", pattern=_PIP_REQUIREMENT_PATTERN)]
+```
+
+## `PythonPackage` {#cmem_client.models.python_package.PythonPackage}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+Installed python package.
+
+Represents a python package installed in Corporate Memory
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.python_package.PythonPackage.name) (PyPiIdentifier) – PyPI name of the package. This is the key of the repository.
+- [**version**](#cmem_client.models.python_package.PythonPackage.version) (str | None) – Installed version, or ``None`` if the deployment does not report one.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.python_package.PythonPackage.get_id) – Get the package identifier.
+
+### `get_id` {#cmem_client.models.python_package.PythonPackage.get_id}
+
+```python
+get_id()
+```
+
+Get the package identifier.
+
+**Returns:**
+
+- str – The python pypi name which uniquely identifies this package.
+
+### `model_config` {#cmem_client.models.python_package.PythonPackage.model_config}
+
+```python
+model_config = ConfigDict(arbitrary_types_allowed=True, str_strip_whitespace=True, extra='forbid')
+```
+
+### `name` {#cmem_client.models.python_package.PythonPackage.name}
+
+```python
+name: PyPiIdentifier
+```
+
+### `version` {#cmem_client.models.python_package.PythonPackage.version}
+
+```python
+version: str | None = None
+```
+
diff --git a/docs/develop/cmem-client-api/models/query_catalog.md b/docs/develop/cmem-client-api/models/query_catalog.md
new file mode 100644
index 000000000..54b697af5
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/query_catalog.md
@@ -0,0 +1,572 @@
+# `query_catalog` {#cmem_client.models.query_catalog}
+
+Models for query catalog operations.
+
+This module provides data models for query catalog operations including
+query explanation, execution, status tracking, and catalog management.
+
+The queries stored in the catalog are the items of ``client.queries``, keyed by their
+URL. A query carries its own text, so it knows its type and its ``{{placeholder}}``
+parameters without asking the server, and the same model is used for a query which was
+never in the catalog at all, read from a file or built from a string.
+
+**Classes:**
+
+- [**LogicalPlan**](#cmem_client.models.query_catalog.LogicalPlan) – Logical plan explanation for a SPARQL query.
+- [**Query**](#cmem_client.models.query_catalog.Query) – A SPARQL query with metadata and placeholder support.
+- [**QueryOrigin**](#cmem_client.models.query_catalog.QueryOrigin) – Origin of a query.
+- [**QueryStatus**](#cmem_client.models.query_catalog.QueryStatus) – Status information for a running or completed query.
+- [**QueryType**](#cmem_client.models.query_catalog.QueryType) – SPARQL query type enumeration.
+
+## `LogicalPlan` {#cmem_client.models.query_catalog.LogicalPlan}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Logical plan explanation for a SPARQL query.
+
+Represents the query execution plan returned by the query catalog API,
+which provides information about query optimization, execution order,
+and estimated complexity.
+
+**Attributes:**
+
+- [**plan**](#cmem_client.models.query_catalog.LogicalPlan.plan) (str) – The formatted query execution plan showing optimization groups,
+collection sizes, complexity estimates, and iteration counts.
+
+### `model_config` {#cmem_client.models.query_catalog.LogicalPlan.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `plan` {#cmem_client.models.query_catalog.LogicalPlan.plan}
+
+```python
+plan: str
+```
+
+The formatted query execution plan as a string.
+
+## `Query` {#cmem_client.models.query_catalog.Query}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A SPARQL query with metadata and placeholder support.
+
+Represents a SPARQL query with support for parameterization using
+mustache-like syntax ({{placeholder}}). Includes query type detection,
+placeholder management, and execution configuration.
+
+**Attributes:**
+
+- [**text**](#cmem_client.models.query_catalog.Query.text) (str) – The SPARQL query text, potentially containing placeholders.
+- [**url**](#cmem_client.models.query_catalog.Query.url) (str) – URI identifying this query in the query catalog (auto-generated if not provided).
+- [**label**](#cmem_client.models.query_catalog.Query.label) (str | None) – Optional human-readable label for the query.
+- [**query_type**](#cmem_client.models.query_catalog.Query.query_type) ([QueryType](#cmem_client.models.query_catalog.QueryType)) – The detected or specified query type (SELECT, UPDATE, etc.).
+- [**description**](#cmem_client.models.query_catalog.Query.description) (str | None) – Optional description of the query's purpose.
+- [**origin**](#cmem_client.models.query_catalog.Query.origin) ([QueryOrigin](#cmem_client.models.query_catalog.QueryOrigin)) – Where the query came from (remote, file, text).
+- [**short_url**](#cmem_client.models.query_catalog.Query.short_url) (str | None) – Shortened URL with default namespace prefix (e.g., :uuid).
+
+**Functions:**
+
+- [**detect_query_type**](#cmem_client.models.query_catalog.Query.detect_query_type) – Detect the query type by parsing the query text.
+- [**fill_placeholders**](#cmem_client.models.query_catalog.Query.fill_placeholders) – Replace placeholders with provided values.
+- [**generate_url_if_missing**](#cmem_client.models.query_catalog.Query.generate_url_if_missing) – Generate a URL if none provided.
+- [**get_default_accept_header**](#cmem_client.models.query_catalog.Query.get_default_accept_header) – Get the default Accept header for this query type.
+- [**get_editor_url**](#cmem_client.models.query_catalog.Query.get_editor_url) – Get the Corporate Memory query editor URL for this query.
+- [**get_id**](#cmem_client.models.query_catalog.Query.get_id) – Get the query URL as its identifier.
+- [**get_placeholder_keys**](#cmem_client.models.query_catalog.Query.get_placeholder_keys) – Get all placeholder keys from the query text.
+
+### `DEFAULT_NS` {#cmem_client.models.query_catalog.Query.DEFAULT_NS}
+
+```python
+DEFAULT_NS: str = 'https://ns.eccenca.com/data/queries/'
+```
+
+### `description` {#cmem_client.models.query_catalog.Query.description}
+
+```python
+description: str | None = None
+```
+
+### `detect_query_type` {#cmem_client.models.query_catalog.Query.detect_query_type}
+
+```python
+detect_query_type(text=None)
+```
+
+Detect the query type by parsing the query text.
+
+Uses rdflib's SPARQL parser to determine if this is a SELECT, ASK,
+DESCRIBE, CONSTRUCT, or UPDATE query.
+
+**Parameters:**
+
+- **text** (str | None) – Optional query text to parse. If None, uses self.text.
+
+**Returns:**
+
+- [QueryType](#cmem_client.models.query_catalog.QueryType) – Detected QueryType, or QueryType.UNKNOWN if detection fails.
+
+**Examples:**
+
+```pycon
+>>> query = Query(text="SELECT * { ?s ?p ?o }")
+>>> query.detect_query_type()
+
+```
+
+### `fill_placeholders` {#cmem_client.models.query_catalog.Query.fill_placeholders}
+
+```python
+fill_placeholders(placeholders)
+```
+
+Replace placeholders with provided values.
+
+**Parameters:**
+
+- **placeholders** (dict[str, str]) – Dictionary mapping placeholder keys to values.
+
+**Returns:**
+
+- str – Query text with all placeholders replaced.
+
+**Raises:**
+
+- ValueError – If not all placeholders are filled.
+
+**Examples:**
+
+```pycon
+>>> query = Query(text="SELECT * { ?s ?p {{value}} }")
+>>> query.fill_placeholders({"value": '"test"'})
+'SELECT * { ?s ?p "test" }'
+```
+
+### `generate_url_if_missing` {#cmem_client.models.query_catalog.Query.generate_url_if_missing}
+
+```python
+generate_url_if_missing(v)
+```
+
+Generate a URL if none provided.
+
+### `get_default_accept_header` {#cmem_client.models.query_catalog.Query.get_default_accept_header}
+
+```python
+get_default_accept_header()
+```
+
+Get the default Accept header for this query type.
+
+Returns appropriate MIME type based on query type, biased towards
+formats suitable for command-line display.
+
+**Returns:**
+
+- str – Accept header string (e.g., "text/csv", "text/turtle").
+
+**Examples:**
+
+```pycon
+>>> query = Query(text="SELECT * { ?s ?p ?o }", query_type=QueryType.SELECT)
+>>> query.get_default_accept_header()
+'text/csv'
+```
+
+### `get_editor_url` {#cmem_client.models.query_catalog.Query.get_editor_url}
+
+```python
+get_editor_url(base_url, graph=None)
+```
+
+Get the Corporate Memory query editor URL for this query.
+
+Generates a URL to open the query in Corporate Memory's web-based
+SPARQL query editor.
+
+**Parameters:**
+
+- **base_url** (str) – Base URL of Corporate Memory instance (required).
+- **graph** (str | None) – Catalog graph URI for remote queries (default: DEFAULT_NS).
+
+**Returns:**
+
+- str – URL string to open query in the web editor.
+
+**Examples:**
+
+```pycon
+>>> query = Query(text="SELECT * { ?s ?p ?o }", origin=QueryOrigin.TEXT)
+>>> url = query.get_editor_url(base_url="https://cmem.example.com")
+>>> "queryString" in url
+True
+```
+
+### `get_id` {#cmem_client.models.query_catalog.Query.get_id}
+
+```python
+get_id()
+```
+
+Get the query URL as its identifier.
+
+**Returns:**
+
+- str – The query URL (IRI) that uniquely identifies this query in the catalog.
+
+### `get_placeholder_keys` {#cmem_client.models.query_catalog.Query.get_placeholder_keys}
+
+```python
+get_placeholder_keys(text=None)
+```
+
+Get all placeholder keys from the query text.
+
+Placeholders use mustache-like syntax: {{placeholder_name}}
+
+**Parameters:**
+
+- **text** (str | None) – Optional text to scan. If None, uses self.text.
+
+**Returns:**
+
+- set[str] – Set of placeholder key names found in the text.
+
+**Examples:**
+
+```pycon
+>>> query = Query(text="SELECT * { ?s ?p {{value}} }")
+>>> query.get_placeholder_keys()
+{'value'}
+```
+
+### `label` {#cmem_client.models.query_catalog.Query.label}
+
+```python
+label: str | None = None
+```
+
+### `model_config` {#cmem_client.models.query_catalog.Query.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `origin` {#cmem_client.models.query_catalog.Query.origin}
+
+```python
+origin: QueryOrigin = QueryOrigin.UNKNOWN
+```
+
+### `query_type` {#cmem_client.models.query_catalog.Query.query_type}
+
+```python
+query_type: QueryType = QueryType.UNKNOWN
+```
+
+### `short_url` {#cmem_client.models.query_catalog.Query.short_url}
+
+```python
+short_url: str | None = None
+```
+
+### `text` {#cmem_client.models.query_catalog.Query.text}
+
+```python
+text: str
+```
+
+### `url` {#cmem_client.models.query_catalog.Query.url}
+
+```python
+url: str = ''
+```
+
+## `QueryOrigin` {#cmem_client.models.query_catalog.QueryOrigin}
+
+Bases: StrEnum
+
+Origin of a query.
+
+Indicates where the query came from for tracking and editor URL generation.
+
+**Attributes:**
+
+- [**FILE**](#cmem_client.models.query_catalog.QueryOrigin.FILE) –
+- [**REMOTE**](#cmem_client.models.query_catalog.QueryOrigin.REMOTE) –
+- [**TEXT**](#cmem_client.models.query_catalog.QueryOrigin.TEXT) –
+- [**UNKNOWN**](#cmem_client.models.query_catalog.QueryOrigin.UNKNOWN) –
+
+### `FILE` {#cmem_client.models.query_catalog.QueryOrigin.FILE}
+
+```python
+FILE = 'file'
+```
+
+### `REMOTE` {#cmem_client.models.query_catalog.QueryOrigin.REMOTE}
+
+```python
+REMOTE = 'remote'
+```
+
+### `TEXT` {#cmem_client.models.query_catalog.QueryOrigin.TEXT}
+
+```python
+TEXT = 'text'
+```
+
+### `UNKNOWN` {#cmem_client.models.query_catalog.QueryOrigin.UNKNOWN}
+
+```python
+UNKNOWN = 'unknown'
+```
+
+## `QueryStatus` {#cmem_client.models.query_catalog.QueryStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Status information for a running or completed query.
+
+Represents the execution status of a query including timing information,
+user context, and trace identifiers for debugging.
+
+The API returns camelCase field names which are automatically converted to
+snake_case Python attributes using Pydantic field aliases.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.query_catalog.QueryStatus.id) (str | None) – Unique identifier for this query execution.
+- [**query_string**](#cmem_client.models.query_catalog.QueryStatus.query_string) (str | None) – The query text that was executed.
+- [**graph**](#cmem_client.models.query_catalog.QueryStatus.graph) (str | None) – Graph URI the query was executed against.
+- [**user**](#cmem_client.models.query_catalog.QueryStatus.user) (str | None) – User who executed the query.
+- [**trace_id**](#cmem_client.models.query_catalog.QueryStatus.trace_id) (str | None) – Trace identifier for debugging.
+- [**start_time**](#cmem_client.models.query_catalog.QueryStatus.start_time) (int | None) – When the query started execution (milliseconds).
+- [**execution_time**](#cmem_client.models.query_catalog.QueryStatus.execution_time) (int | None) – How long the query took to execute (milliseconds).
+- [**affected_graphs**](#cmem_client.models.query_catalog.QueryStatus.affected_graphs) (list[str] | None) – Graph URIs an update query wrote to. Empty for a read query.
+- [**status**](#cmem_client.models.query_catalog.QueryStatus.status) (str | None) – Current status (e.g., "running", "completed").
+
+### `affected_graphs` {#cmem_client.models.query_catalog.QueryStatus.affected_graphs}
+
+```python
+affected_graphs: list[str] | None = Field(default=None, alias='affectedGraphs')
+```
+
+### `execution_time` {#cmem_client.models.query_catalog.QueryStatus.execution_time}
+
+```python
+execution_time: int | None = Field(default=None, alias='executionTime')
+```
+
+### `graph` {#cmem_client.models.query_catalog.QueryStatus.graph}
+
+```python
+graph: str | None = None
+```
+
+### `id` {#cmem_client.models.query_catalog.QueryStatus.id}
+
+```python
+id: str | None = None
+```
+
+### `model_config` {#cmem_client.models.query_catalog.QueryStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `query_string` {#cmem_client.models.query_catalog.QueryStatus.query_string}
+
+```python
+query_string: str | None = Field(default=None, alias='queryString')
+```
+
+### `start_time` {#cmem_client.models.query_catalog.QueryStatus.start_time}
+
+```python
+start_time: int | None = Field(default=None, alias='startTime')
+```
+
+### `status` {#cmem_client.models.query_catalog.QueryStatus.status}
+
+```python
+status: str | None = None
+```
+
+### `trace_id` {#cmem_client.models.query_catalog.QueryStatus.trace_id}
+
+```python
+trace_id: str | None = Field(default=None, alias='traceId')
+```
+
+### `user` {#cmem_client.models.query_catalog.QueryStatus.user}
+
+```python
+user: str | None = None
+```
+
+## `QueryType` {#cmem_client.models.query_catalog.QueryType}
+
+Bases: StrEnum
+
+SPARQL query type enumeration.
+
+Categorizes queries into read operations (SELECT, ASK, DESCRIBE, CONSTRUCT)
+and update operations (UPDATE, DELETE, INSERT, etc.).
+
+**Functions:**
+
+- [**is_read_query**](#cmem_client.models.query_catalog.QueryType.is_read_query) – Check if this is a read query type.
+- [**is_update_query**](#cmem_client.models.query_catalog.QueryType.is_update_query) – Check if this is an update query type.
+- [**read_types**](#cmem_client.models.query_catalog.QueryType.read_types) – Get all read query types (SELECT, ASK, DESCRIBE, CONSTRUCT).
+- [**update_types**](#cmem_client.models.query_catalog.QueryType.update_types) – Get all update query types.
+
+**Attributes:**
+
+- [**ADD**](#cmem_client.models.query_catalog.QueryType.ADD) –
+- [**ASK**](#cmem_client.models.query_catalog.QueryType.ASK) –
+- [**CLEAR**](#cmem_client.models.query_catalog.QueryType.CLEAR) –
+- [**CONSTRUCT**](#cmem_client.models.query_catalog.QueryType.CONSTRUCT) –
+- [**COPY**](#cmem_client.models.query_catalog.QueryType.COPY) –
+- [**CREATE**](#cmem_client.models.query_catalog.QueryType.CREATE) –
+- [**DELETE**](#cmem_client.models.query_catalog.QueryType.DELETE) –
+- [**DESCRIBE**](#cmem_client.models.query_catalog.QueryType.DESCRIBE) –
+- [**DROP**](#cmem_client.models.query_catalog.QueryType.DROP) –
+- [**FAULTY**](#cmem_client.models.query_catalog.QueryType.FAULTY) –
+- [**INSERT**](#cmem_client.models.query_catalog.QueryType.INSERT) –
+- [**LOAD**](#cmem_client.models.query_catalog.QueryType.LOAD) –
+- [**MOVE**](#cmem_client.models.query_catalog.QueryType.MOVE) –
+- [**SELECT**](#cmem_client.models.query_catalog.QueryType.SELECT) –
+- [**UNKNOWN**](#cmem_client.models.query_catalog.QueryType.UNKNOWN) –
+- [**UPDATE**](#cmem_client.models.query_catalog.QueryType.UPDATE) –
+
+### `ADD` {#cmem_client.models.query_catalog.QueryType.ADD}
+
+```python
+ADD = 'ADD'
+```
+
+### `ASK` {#cmem_client.models.query_catalog.QueryType.ASK}
+
+```python
+ASK = 'ASK'
+```
+
+### `CLEAR` {#cmem_client.models.query_catalog.QueryType.CLEAR}
+
+```python
+CLEAR = 'CLEAR'
+```
+
+### `CONSTRUCT` {#cmem_client.models.query_catalog.QueryType.CONSTRUCT}
+
+```python
+CONSTRUCT = 'CONSTRUCT'
+```
+
+### `COPY` {#cmem_client.models.query_catalog.QueryType.COPY}
+
+```python
+COPY = 'COPY'
+```
+
+### `CREATE` {#cmem_client.models.query_catalog.QueryType.CREATE}
+
+```python
+CREATE = 'CREATE'
+```
+
+### `DELETE` {#cmem_client.models.query_catalog.QueryType.DELETE}
+
+```python
+DELETE = 'DELETE'
+```
+
+### `DESCRIBE` {#cmem_client.models.query_catalog.QueryType.DESCRIBE}
+
+```python
+DESCRIBE = 'DESCRIBE'
+```
+
+### `DROP` {#cmem_client.models.query_catalog.QueryType.DROP}
+
+```python
+DROP = 'DROP'
+```
+
+### `FAULTY` {#cmem_client.models.query_catalog.QueryType.FAULTY}
+
+```python
+FAULTY = 'FAULTY'
+```
+
+### `INSERT` {#cmem_client.models.query_catalog.QueryType.INSERT}
+
+```python
+INSERT = 'INSERT'
+```
+
+### `LOAD` {#cmem_client.models.query_catalog.QueryType.LOAD}
+
+```python
+LOAD = 'LOAD'
+```
+
+### `MOVE` {#cmem_client.models.query_catalog.QueryType.MOVE}
+
+```python
+MOVE = 'MOVE'
+```
+
+### `SELECT` {#cmem_client.models.query_catalog.QueryType.SELECT}
+
+```python
+SELECT = 'SELECT'
+```
+
+### `UNKNOWN` {#cmem_client.models.query_catalog.QueryType.UNKNOWN}
+
+```python
+UNKNOWN = 'UNKNOWN'
+```
+
+### `UPDATE` {#cmem_client.models.query_catalog.QueryType.UPDATE}
+
+```python
+UPDATE = 'UPDATE'
+```
+
+### `is_read_query` {#cmem_client.models.query_catalog.QueryType.is_read_query}
+
+```python
+is_read_query()
+```
+
+Check if this is a read query type.
+
+### `is_update_query` {#cmem_client.models.query_catalog.QueryType.is_update_query}
+
+```python
+is_update_query()
+```
+
+Check if this is an update query type.
+
+### `read_types` {#cmem_client.models.query_catalog.QueryType.read_types}
+
+```python
+read_types()
+```
+
+Get all read query types (SELECT, ASK, DESCRIBE, CONSTRUCT).
+
+### `update_types` {#cmem_client.models.query_catalog.QueryType.update_types}
+
+```python
+update_types()
+```
+
+Get all update query types.
+
diff --git a/docs/develop/cmem-client-api/models/resource.md b/docs/develop/cmem-client-api/models/resource.md
new file mode 100644
index 000000000..1ed09352a
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/resource.md
@@ -0,0 +1,213 @@
+# `resource` {#cmem_client.models.resource}
+
+A file resource model
+
+A resource is a file inside a DataIntegration project, such as the CSV a dataset reads
+from. The files of all projects are the items of ``client.files``, keyed by
+``{project_id}:{file_id}``.
+
+**Classes:**
+
+- [**Resource**](#cmem_client.models.resource.Resource) – A file resource.
+- [**ResourceMetadata**](#cmem_client.models.resource.ResourceMetadata) – Resource metadata
+- [**ResourceResponse**](#cmem_client.models.resource.ResourceResponse) – API response model for a file resource
+- [**ResourceUsage**](#cmem_client.models.resource.ResourceUsage) – Resource usage
+
+## `Resource` {#cmem_client.models.resource.Resource}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A file resource.
+
+**Attributes:**
+
+- [**file_id**](#cmem_client.models.resource.Resource.file_id) (str) – ID of the file, unique within its project.
+- [**project_id**](#cmem_client.models.resource.Resource.project_id) (str) – ID of the project holding the file.
+- [**name**](#cmem_client.models.resource.Resource.name) (str | None) – Name of the file, or ``None`` if the deployment did not report it.
+- [**full_path**](#cmem_client.models.resource.Resource.full_path) (str | None) – Path of the file inside the project.
+- [**modified**](#cmem_client.models.resource.Resource.modified) (str | None) – When the file was last modified.
+- [**size**](#cmem_client.models.resource.Resource.size) (int | None) – Size of the file in bytes.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.resource.Resource.get_id) – Get the resource ID in format 'project_id:file_id'
+
+### `file_id` {#cmem_client.models.resource.Resource.file_id}
+
+```python
+file_id: str
+```
+
+### `full_path` {#cmem_client.models.resource.Resource.full_path}
+
+```python
+full_path: str | None = Field(alias='fullPath', default=None)
+```
+
+### `get_id` {#cmem_client.models.resource.Resource.get_id}
+
+```python
+get_id()
+```
+
+Get the resource ID in format 'project_id:file_id'
+
+### `model_config` {#cmem_client.models.resource.Resource.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `modified` {#cmem_client.models.resource.Resource.modified}
+
+```python
+modified: str | None = None
+```
+
+### `name` {#cmem_client.models.resource.Resource.name}
+
+```python
+name: str | None = None
+```
+
+### `project_id` {#cmem_client.models.resource.Resource.project_id}
+
+```python
+project_id: str
+```
+
+### `size` {#cmem_client.models.resource.Resource.size}
+
+```python
+size: int | None = None
+```
+
+## `ResourceMetadata` {#cmem_client.models.resource.ResourceMetadata}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Resource metadata
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.resource.ResourceMetadata.name) (str) – Name of the file.
+- [**relative_path**](#cmem_client.models.resource.ResourceMetadata.relative_path) (str) – Path of the file relative to the project.
+- [**absolute_path**](#cmem_client.models.resource.ResourceMetadata.absolute_path) (str) – Path of the file on the deployment.
+- [**size**](#cmem_client.models.resource.ResourceMetadata.size) (int) – Size of the file in bytes.
+- [**modified**](#cmem_client.models.resource.ResourceMetadata.modified) (str) – When the file was last modified.
+
+### `absolute_path` {#cmem_client.models.resource.ResourceMetadata.absolute_path}
+
+```python
+absolute_path: str = Field(alias='absolutePath')
+```
+
+### `model_config` {#cmem_client.models.resource.ResourceMetadata.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `modified` {#cmem_client.models.resource.ResourceMetadata.modified}
+
+```python
+modified: str
+```
+
+### `name` {#cmem_client.models.resource.ResourceMetadata.name}
+
+```python
+name: str
+```
+
+### `relative_path` {#cmem_client.models.resource.ResourceMetadata.relative_path}
+
+```python
+relative_path: str = Field(alias='relativePath')
+```
+
+### `size` {#cmem_client.models.resource.ResourceMetadata.size}
+
+```python
+size: int
+```
+
+## `ResourceResponse` {#cmem_client.models.resource.ResourceResponse}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+API response model for a file resource
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.resource.ResourceResponse.name) (str) – Name of the file.
+- [**full_path**](#cmem_client.models.resource.ResourceResponse.full_path) (str) – Path of the file inside the project.
+- [**modified**](#cmem_client.models.resource.ResourceResponse.modified) (str) – When the file was last modified.
+- [**size**](#cmem_client.models.resource.ResourceResponse.size) (int) – Size of the file in bytes.
+
+### `full_path` {#cmem_client.models.resource.ResourceResponse.full_path}
+
+```python
+full_path: str = Field(alias='fullPath')
+```
+
+### `model_config` {#cmem_client.models.resource.ResourceResponse.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `modified` {#cmem_client.models.resource.ResourceResponse.modified}
+
+```python
+modified: str
+```
+
+### `name` {#cmem_client.models.resource.ResourceResponse.name}
+
+```python
+name: str
+```
+
+### `size` {#cmem_client.models.resource.ResourceResponse.size}
+
+```python
+size: int
+```
+
+## `ResourceUsage` {#cmem_client.models.resource.ResourceUsage}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Resource usage
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.resource.ResourceUsage.id) (str) – ID of the task using the file.
+- [**label**](#cmem_client.models.resource.ResourceUsage.label) (str) – Human readable name of that task.
+- [**task_type**](#cmem_client.models.resource.ResourceUsage.task_type) (str) – Kind of task using the file, e.g. ``Dataset``.
+
+### `id` {#cmem_client.models.resource.ResourceUsage.id}
+
+```python
+id: str
+```
+
+### `label` {#cmem_client.models.resource.ResourceUsage.label}
+
+```python
+label: str
+```
+
+### `model_config` {#cmem_client.models.resource.ResourceUsage.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `task_type` {#cmem_client.models.resource.ResourceUsage.task_type}
+
+```python
+task_type: str = Field(alias='taskType')
+```
+
diff --git a/docs/develop/cmem-client-api/models/scheduler.md b/docs/develop/cmem-client-api/models/scheduler.md
new file mode 100644
index 000000000..a759ba8e6
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/scheduler.md
@@ -0,0 +1,196 @@
+# `scheduler` {#cmem_client.models.scheduler}
+
+Scheduler models
+
+A scheduler is the DataIntegration task which starts a workflow on a fixed interval.
+The schedulers of all projects are the items of ``client.schedulers``, keyed by
+``{project_id}:{scheduler_id}``.
+
+**Classes:**
+
+- [**Scheduler**](#cmem_client.models.scheduler.Scheduler) – A workflow scheduler task.
+- [**SchedulerItemLink**](#cmem_client.models.scheduler.SchedulerItemLink) – A link associated with a scheduler.
+- [**SchedulerParameters**](#cmem_client.models.scheduler.SchedulerParameters) – Parameters of a scheduler task.
+- [**SchedulerSearchResults**](#cmem_client.models.scheduler.SchedulerSearchResults) – Wrapper for the task search API response containing schedulers.
+
+## `Scheduler` {#cmem_client.models.scheduler.Scheduler}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A workflow scheduler task.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.scheduler.Scheduler.id) (str) – ID of the scheduler, unique within its project.
+- [**project_id**](#cmem_client.models.scheduler.Scheduler.project_id) (str) – ID of the project holding the scheduler.
+- [**label**](#cmem_client.models.scheduler.Scheduler.label) (str) – Human readable name of the scheduler.
+- [**parameters**](#cmem_client.models.scheduler.Scheduler.parameters) ([SchedulerParameters](#cmem_client.models.scheduler.SchedulerParameters)) – Interval, enabled state and scheduled workflow.
+- [**item_links**](#cmem_client.models.scheduler.Scheduler.item_links) (list[[SchedulerItemLink](#cmem_client.models.scheduler.SchedulerItemLink)]) – Links into the user interface for this scheduler.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.scheduler.Scheduler.get_id) – Get the scheduler ID in the form 'project_id:scheduler_id'.
+
+### `get_id` {#cmem_client.models.scheduler.Scheduler.get_id}
+
+```python
+get_id()
+```
+
+Get the scheduler ID in the form 'project_id:scheduler_id'.
+
+### `id` {#cmem_client.models.scheduler.Scheduler.id}
+
+```python
+id: str
+```
+
+### `item_links` {#cmem_client.models.scheduler.Scheduler.item_links}
+
+```python
+item_links: list[SchedulerItemLink] = Field(default_factory=list, alias='itemLinks')
+```
+
+### `label` {#cmem_client.models.scheduler.Scheduler.label}
+
+```python
+label: str
+```
+
+### `model_config` {#cmem_client.models.scheduler.Scheduler.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `parameters` {#cmem_client.models.scheduler.Scheduler.parameters}
+
+```python
+parameters: SchedulerParameters
+```
+
+### `project_id` {#cmem_client.models.scheduler.Scheduler.project_id}
+
+```python
+project_id: str = Field(alias='projectId')
+```
+
+## `SchedulerItemLink` {#cmem_client.models.scheduler.SchedulerItemLink}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A link associated with a scheduler.
+
+**Attributes:**
+
+- [**path**](#cmem_client.models.scheduler.SchedulerItemLink.path) (str) – Path the link points at, relative to the DataIntegration user interface.
+- [**label**](#cmem_client.models.scheduler.SchedulerItemLink.label) (str | None) – Text shown for the link.
+
+### `label` {#cmem_client.models.scheduler.SchedulerItemLink.label}
+
+```python
+label: str | None = None
+```
+
+### `model_config` {#cmem_client.models.scheduler.SchedulerItemLink.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `path` {#cmem_client.models.scheduler.SchedulerItemLink.path}
+
+```python
+path: str
+```
+
+## `SchedulerParameters` {#cmem_client.models.scheduler.SchedulerParameters}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Parameters of a scheduler task.
+
+**Attributes:**
+
+- [**interval**](#cmem_client.models.scheduler.SchedulerParameters.interval) (str) – How often the workflow is started, as an ISO 8601 duration such as
+``PT1H``.
+- [**enabled**](#cmem_client.models.scheduler.SchedulerParameters.enabled) (bool) – Whether the scheduler currently runs. A disabled scheduler keeps its
+interval but does not start anything.
+- [**task**](#cmem_client.models.scheduler.SchedulerParameters.task) (str) – ID of the workflow the scheduler starts.
+
+**Functions:**
+
+- [**extract_task_id**](#cmem_client.models.scheduler.SchedulerParameters.extract_task_id) – Extract task ID from either a plain string or a dict with a 'value' key.
+- [**parse_enabled**](#cmem_client.models.scheduler.SchedulerParameters.parse_enabled) – Convert API string 'true'/'false' to bool.
+- [**serialize_enabled**](#cmem_client.models.scheduler.SchedulerParameters.serialize_enabled) – Serialize bool back to API string format.
+
+### `enabled` {#cmem_client.models.scheduler.SchedulerParameters.enabled}
+
+```python
+enabled: bool
+```
+
+### `extract_task_id` {#cmem_client.models.scheduler.SchedulerParameters.extract_task_id}
+
+```python
+extract_task_id(v)
+```
+
+Extract task ID from either a plain string or a dict with a 'value' key.
+
+### `interval` {#cmem_client.models.scheduler.SchedulerParameters.interval}
+
+```python
+interval: str
+```
+
+### `model_config` {#cmem_client.models.scheduler.SchedulerParameters.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `parse_enabled` {#cmem_client.models.scheduler.SchedulerParameters.parse_enabled}
+
+```python
+parse_enabled(v)
+```
+
+Convert API string 'true'/'false' to bool.
+
+### `serialize_enabled` {#cmem_client.models.scheduler.SchedulerParameters.serialize_enabled}
+
+```python
+serialize_enabled(v)
+```
+
+Serialize bool back to API string format.
+
+### `task` {#cmem_client.models.scheduler.SchedulerParameters.task}
+
+```python
+task: str
+```
+
+## `SchedulerSearchResults` {#cmem_client.models.scheduler.SchedulerSearchResults}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Wrapper for the task search API response containing schedulers.
+
+**Attributes:**
+
+- [**results**](#cmem_client.models.scheduler.SchedulerSearchResults.results) (list[[Scheduler](#cmem_client.models.scheduler.Scheduler)]) – The schedulers the search returned.
+
+### `model_config` {#cmem_client.models.scheduler.SchedulerSearchResults.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `results` {#cmem_client.models.scheduler.SchedulerSearchResults.results}
+
+```python
+results: list[Scheduler]
+```
+
diff --git a/docs/develop/cmem-client-api/models/status.md b/docs/develop/cmem-client-api/models/status.md
new file mode 100644
index 000000000..b207d9f52
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/status.md
@@ -0,0 +1,486 @@
+# `status` {#cmem_client.models.status}
+
+Models for Corporate Memory aggregated status information.
+
+Aggregates version and health metadata across the build (DataIntegration),
+explore (DataPlatform), shapes catalog, and graph store components.
+
+**Classes:**
+
+- [**CmemLicense**](#cmem_client.models.status.CmemLicense) – Corporate Memory license metadata from the DataPlatform info payload.
+- [**ComponentStatus**](#cmem_client.models.status.ComponentStatus) – Version and health of a single Corporate Memory component.
+- [**ExploreStatus**](#cmem_client.models.status.ExploreStatus) – Status of the explore (DataPlatform) component, including raw actuator payload.
+- [**HealthState**](#cmem_client.models.status.HealthState) – Health state of a Corporate Memory component.
+- [**StatusInfo**](#cmem_client.models.status.StatusInfo) – Aggregated status across all Corporate Memory components.
+- [**StoreInfo**](#cmem_client.models.status.StoreInfo) – Graph store metadata embedded in the DataPlatform info payload.
+- [**StoreStatus**](#cmem_client.models.status.StoreStatus) – Status of the graph store backing the DataPlatform.
+- [**WorkspaceConfiguration**](#cmem_client.models.status.WorkspaceConfiguration) – Workspace configuration metadata from the DataPlatform info payload.
+
+**Attributes:**
+
+- [**SHAPES_CATALOG_VERSION_QUERY**](#cmem_client.models.status.SHAPES_CATALOG_VERSION_QUERY) – SPARQL query used to read the shapes catalog version from the explore store.
+
+## `CmemLicense` {#cmem_client.models.status.CmemLicense}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Corporate Memory license metadata from the DataPlatform info payload.
+
+**Attributes:**
+
+- [**edition**](#cmem_client.models.status.CmemLicense.edition) (str | None) – License edition (e.g. 'PEDAL').
+- [**grace_date**](#cmem_client.models.status.CmemLicense.grace_date) (str | None) – Date until which the license keeps working in grace period (ISO date string).
+- [**in_grace_period**](#cmem_client.models.status.CmemLicense.in_grace_period) (bool) – Whether the CMEM license is currently within its grace period.
+- [**model_config**](#cmem_client.models.status.CmemLicense.model_config) –
+- [**valid_date**](#cmem_client.models.status.CmemLicense.valid_date) (str | None) – Date until which the license is valid (ISO date string).
+
+### `edition` {#cmem_client.models.status.CmemLicense.edition}
+
+```python
+edition: str | None = None
+```
+
+License edition (e.g. 'PEDAL').
+
+### `grace_date` {#cmem_client.models.status.CmemLicense.grace_date}
+
+```python
+grace_date: str | None = Field(default=None, alias='graceDate')
+```
+
+Date until which the license keeps working in grace period (ISO date string).
+
+### `in_grace_period` {#cmem_client.models.status.CmemLicense.in_grace_period}
+
+```python
+in_grace_period: bool = Field(default=False, alias='inGracePeriod')
+```
+
+Whether the CMEM license is currently within its grace period.
+
+### `model_config` {#cmem_client.models.status.CmemLicense.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `valid_date` {#cmem_client.models.status.CmemLicense.valid_date}
+
+```python
+valid_date: str | None = Field(default=None, alias='validDate')
+```
+
+Date until which the license is valid (ISO date string).
+
+## `ComponentStatus` {#cmem_client.models.status.ComponentStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Version and health of a single Corporate Memory component.
+
+**Attributes:**
+
+- [**error**](#cmem_client.models.status.ComponentStatus.error) (str | None) – Captured error message if status retrieval failed; None otherwise.
+- [**health**](#cmem_client.models.status.ComponentStatus.health) ([HealthState](#cmem_client.models.status.HealthState)) – Health state of the component.
+- [**model_config**](#cmem_client.models.status.ComponentStatus.model_config) –
+- [**version**](#cmem_client.models.status.ComponentStatus.version) (str) – Component version string as reported by its version/info endpoint.
+
+### `error` {#cmem_client.models.status.ComponentStatus.error}
+
+```python
+error: str | None = None
+```
+
+Captured error message if status retrieval failed; None otherwise.
+
+### `health` {#cmem_client.models.status.ComponentStatus.health}
+
+```python
+health: HealthState = HealthState.UNKNOWN
+```
+
+Health state of the component.
+
+### `model_config` {#cmem_client.models.status.ComponentStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `version` {#cmem_client.models.status.ComponentStatus.version}
+
+```python
+version: str = 'UNKNOWN'
+```
+
+Component version string as reported by its version/info endpoint.
+
+## `ExploreStatus` {#cmem_client.models.status.ExploreStatus}
+
+Bases: [ComponentStatus](#cmem_client.models.status.ComponentStatus)
+
+Status of the explore (DataPlatform) component, including raw actuator payload.
+
+**Attributes:**
+
+- [**error**](#cmem_client.models.status.ExploreStatus.error) (str | None) – Captured error message if status retrieval failed; None otherwise.
+- [**health**](#cmem_client.models.status.ExploreStatus.health) ([HealthState](#cmem_client.models.status.HealthState)) – Health state of the component.
+- [**health_details**](#cmem_client.models.status.ExploreStatus.health_details) (dict[str, Any] | None) – Raw payload of the DataPlatform /actuator/health endpoint (component breakdown).
+- [**info**](#cmem_client.models.status.ExploreStatus.info) (dict[str, Any] | None) – Raw payload of the DataPlatform /actuator/info endpoint.
+- [**license**](#cmem_client.models.status.ExploreStatus.license) ([CmemLicense](#cmem_client.models.status.CmemLicense) | None) – Typed CMEM license info, or None if not reported (DataPlatform < 24.1).
+- [**model_config**](#cmem_client.models.status.ExploreStatus.model_config) –
+- [**store_info**](#cmem_client.models.status.ExploreStatus.store_info) ([StoreInfo](#cmem_client.models.status.StoreInfo) | None) – Typed graph store info from the actuator payload, or None if absent.
+- [**version**](#cmem_client.models.status.ExploreStatus.version) (str) – Component version string as reported by its version/info endpoint.
+- [**workspace_configuration**](#cmem_client.models.status.ExploreStatus.workspace_configuration) ([WorkspaceConfiguration](#cmem_client.models.status.WorkspaceConfiguration) | None) – Typed workspace configuration info, or None if absent.
+- [**workspaces_to_migrate**](#cmem_client.models.status.ExploreStatus.workspaces_to_migrate) (list[Any]) – Workspace IDs flagged by the DataPlatform as requiring configuration migration.
+
+### `error` {#cmem_client.models.status.ExploreStatus.error}
+
+```python
+error: str | None = None
+```
+
+Captured error message if status retrieval failed; None otherwise.
+
+### `health` {#cmem_client.models.status.ExploreStatus.health}
+
+```python
+health: HealthState = HealthState.UNKNOWN
+```
+
+Health state of the component.
+
+### `health_details` {#cmem_client.models.status.ExploreStatus.health_details}
+
+```python
+health_details: dict[str, Any] | None = None
+```
+
+Raw payload of the DataPlatform /actuator/health endpoint (component breakdown).
+
+### `info` {#cmem_client.models.status.ExploreStatus.info}
+
+```python
+info: dict[str, Any] | None = None
+```
+
+Raw payload of the DataPlatform /actuator/info endpoint.
+
+### `license` {#cmem_client.models.status.ExploreStatus.license}
+
+```python
+license: CmemLicense | None
+```
+
+Typed CMEM license info, or None if not reported (DataPlatform < 24.1).
+
+### `model_config` {#cmem_client.models.status.ExploreStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `store_info` {#cmem_client.models.status.ExploreStatus.store_info}
+
+```python
+store_info: StoreInfo | None
+```
+
+Typed graph store info from the actuator payload, or None if absent.
+
+### `version` {#cmem_client.models.status.ExploreStatus.version}
+
+```python
+version: str = 'UNKNOWN'
+```
+
+Component version string as reported by its version/info endpoint.
+
+### `workspace_configuration` {#cmem_client.models.status.ExploreStatus.workspace_configuration}
+
+```python
+workspace_configuration: WorkspaceConfiguration | None
+```
+
+Typed workspace configuration info, or None if absent.
+
+### `workspaces_to_migrate` {#cmem_client.models.status.ExploreStatus.workspaces_to_migrate}
+
+```python
+workspaces_to_migrate: list[Any]
+```
+
+Workspace IDs flagged by the DataPlatform as requiring configuration migration.
+
+## `HealthState` {#cmem_client.models.status.HealthState}
+
+Bases: StrEnum
+
+Health state of a Corporate Memory component.
+
+**Functions:**
+
+- [**parse**](#cmem_client.models.status.HealthState.parse) – Map a raw health string to a HealthState.
+
+**Attributes:**
+
+- [**DOWN**](#cmem_client.models.status.HealthState.DOWN) –
+- [**UNKNOWN**](#cmem_client.models.status.HealthState.UNKNOWN) –
+- [**UP**](#cmem_client.models.status.HealthState.UP) –
+
+### `DOWN` {#cmem_client.models.status.HealthState.DOWN}
+
+```python
+DOWN = 'DOWN'
+```
+
+### `UNKNOWN` {#cmem_client.models.status.HealthState.UNKNOWN}
+
+```python
+UNKNOWN = 'UNKNOWN'
+```
+
+### `UP` {#cmem_client.models.status.HealthState.UP}
+
+```python
+UP = 'UP'
+```
+
+### `parse` {#cmem_client.models.status.HealthState.parse}
+
+```python
+parse(value)
+```
+
+Map a raw health string to a HealthState.
+
+Treats only the literal "UP" as up; any other non-empty value is
+considered DOWN. Missing/empty values become UNKNOWN.
+
+**Returns:**
+
+- [HealthState](#cmem_client.models.status.HealthState) – The matching HealthState.
+
+## `SHAPES_CATALOG_VERSION_QUERY` {#cmem_client.models.status.SHAPES_CATALOG_VERSION_QUERY}
+
+```python
+SHAPES_CATALOG_VERSION_QUERY = 'PREFIX owl: \nPREFIX : \nSELECT ?version\nFROM :\nWHERE {\n : owl:versionInfo ?version\n}\nORDER BY ASC(?version)\n'
+```
+
+SPARQL query used to read the shapes catalog version from the explore store.
+
+## `StatusInfo` {#cmem_client.models.status.StatusInfo}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Aggregated status across all Corporate Memory components.
+
+**Functions:**
+
+- [**to_summary_dict**](#cmem_client.models.status.StatusInfo.to_summary_dict) – Render the documented `admin status` output contract as a plain dict.
+
+**Attributes:**
+
+- [**build**](#cmem_client.models.status.StatusInfo.build) ([ComponentStatus](#cmem_client.models.status.ComponentStatus)) – Status of the build (DataIntegration) component.
+- [**explore**](#cmem_client.models.status.StatusInfo.explore) ([ExploreStatus](#cmem_client.models.status.ExploreStatus)) – Status of the explore (DataPlatform) component.
+- [**health**](#cmem_client.models.status.StatusInfo.health) ([HealthState](#cmem_client.models.status.HealthState)) – Overall health: UP only if every component is UP, DOWN otherwise.
+- [**model_config**](#cmem_client.models.status.StatusInfo.model_config) –
+- [**shapes**](#cmem_client.models.status.StatusInfo.shapes) ([ComponentStatus](#cmem_client.models.status.ComponentStatus)) – Status of the shapes catalog (queried from the explore store).
+- [**store**](#cmem_client.models.status.StatusInfo.store) ([StoreStatus](#cmem_client.models.status.StoreStatus)) – Status of the graph store backing the DataPlatform.
+
+### `build` {#cmem_client.models.status.StatusInfo.build}
+
+```python
+build: ComponentStatus = Field(default_factory=ComponentStatus)
+```
+
+Status of the build (DataIntegration) component.
+
+### `explore` {#cmem_client.models.status.StatusInfo.explore}
+
+```python
+explore: ExploreStatus = Field(default_factory=ExploreStatus)
+```
+
+Status of the explore (DataPlatform) component.
+
+### `health` {#cmem_client.models.status.StatusInfo.health}
+
+```python
+health: HealthState
+```
+
+Overall health: UP only if every component is UP, DOWN otherwise.
+
+### `model_config` {#cmem_client.models.status.StatusInfo.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `shapes` {#cmem_client.models.status.StatusInfo.shapes}
+
+```python
+shapes: ComponentStatus = Field(default_factory=ComponentStatus)
+```
+
+Status of the shapes catalog (queried from the explore store).
+
+### `store` {#cmem_client.models.status.StatusInfo.store}
+
+```python
+store: StoreStatus = Field(default_factory=StoreStatus)
+```
+
+Status of the graph store backing the DataPlatform.
+
+### `to_summary_dict` {#cmem_client.models.status.StatusInfo.to_summary_dict}
+
+```python
+to_summary_dict()
+```
+
+Render the documented `admin status` output contract as a plain dict.
+
+Reproduces the structure historically consumed by cmemc's `admin status`
+command (`--raw`, `--key`, `overall.healthy`) and its shell completion of
+status keys, sourced from this typed status model.
+
+**Returns:**
+
+- dict – A dict with a ``build``, ``explore``, ``shapes``, ``store`` and ``overall``
+- dict – key, each holding the version and health of that component where available.
+
+## `StoreInfo` {#cmem_client.models.status.StoreInfo}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Graph store metadata embedded in the DataPlatform info payload.
+
+**Attributes:**
+
+- [**license_expiration**](#cmem_client.models.status.StoreInfo.license_expiration) (str | None) – Graph store license expiration date (ISO date string), if reported.
+- [**model_config**](#cmem_client.models.status.StoreInfo.model_config) –
+- [**type**](#cmem_client.models.status.StoreInfo.type) (str) – Store implementation (e.g. 'GRAPHDB', 'TENTRIS').
+- [**version**](#cmem_client.models.status.StoreInfo.version) (str) – Store version string.
+
+### `license_expiration` {#cmem_client.models.status.StoreInfo.license_expiration}
+
+```python
+license_expiration: str | None = Field(default=None, alias='licenseExpiration')
+```
+
+Graph store license expiration date (ISO date string), if reported.
+
+### `model_config` {#cmem_client.models.status.StoreInfo.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `type` {#cmem_client.models.status.StoreInfo.type}
+
+```python
+type: str = 'STORE'
+```
+
+Store implementation (e.g. 'GRAPHDB', 'TENTRIS').
+
+### `version` {#cmem_client.models.status.StoreInfo.version}
+
+```python
+version: str = 'UNKNOWN'
+```
+
+Store version string.
+
+## `StoreStatus` {#cmem_client.models.status.StoreStatus}
+
+Bases: [ComponentStatus](#cmem_client.models.status.ComponentStatus)
+
+Status of the graph store backing the DataPlatform.
+
+**Attributes:**
+
+- [**error**](#cmem_client.models.status.StoreStatus.error) (str | None) – Captured error message if status retrieval failed; None otherwise.
+- [**health**](#cmem_client.models.status.StoreStatus.health) ([HealthState](#cmem_client.models.status.HealthState)) – Health state of the component.
+- [**model_config**](#cmem_client.models.status.StoreStatus.model_config) –
+- [**type**](#cmem_client.models.status.StoreStatus.type) (str) – Store implementation (e.g. 'GRAPHDB', 'TENTRIS').
+- [**version**](#cmem_client.models.status.StoreStatus.version) (str) – Component version string as reported by its version/info endpoint.
+
+### `error` {#cmem_client.models.status.StoreStatus.error}
+
+```python
+error: str | None = None
+```
+
+Captured error message if status retrieval failed; None otherwise.
+
+### `health` {#cmem_client.models.status.StoreStatus.health}
+
+```python
+health: HealthState = HealthState.UNKNOWN
+```
+
+Health state of the component.
+
+### `model_config` {#cmem_client.models.status.StoreStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `type` {#cmem_client.models.status.StoreStatus.type}
+
+```python
+type: str = 'STORE'
+```
+
+Store implementation (e.g. 'GRAPHDB', 'TENTRIS').
+
+### `version` {#cmem_client.models.status.StoreStatus.version}
+
+```python
+version: str = 'UNKNOWN'
+```
+
+Component version string as reported by its version/info endpoint.
+
+## `WorkspaceConfiguration` {#cmem_client.models.status.WorkspaceConfiguration}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Workspace configuration metadata from the DataPlatform info payload.
+
+**Attributes:**
+
+- [**model_config**](#cmem_client.models.status.WorkspaceConfiguration.model_config) –
+- [**version**](#cmem_client.models.status.WorkspaceConfiguration.version) (int | None) – Workspace configuration version.
+- [**workspaces_to_migrate**](#cmem_client.models.status.WorkspaceConfiguration.workspaces_to_migrate) (list[Any]) – Workspaces flagged as requiring configuration migration.
+
+### `model_config` {#cmem_client.models.status.WorkspaceConfiguration.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `version` {#cmem_client.models.status.WorkspaceConfiguration.version}
+
+```python
+version: int | None = None
+```
+
+Workspace configuration version.
+
+### `workspaces_to_migrate` {#cmem_client.models.status.WorkspaceConfiguration.workspaces_to_migrate}
+
+```python
+workspaces_to_migrate: list[Any] = Field(default_factory=list, alias='workspacesToMigrate')
+```
+
+Workspaces flagged as requiring configuration migration.
+
+The DataPlatform reports each entry as an object (e.g. with iri/label/version);
+the items are kept untyped because they are only used to detect whether a
+migration is pending.
+
diff --git a/docs/develop/cmem-client-api/models/task.md b/docs/develop/cmem-client-api/models/task.md
new file mode 100644
index 000000000..904e15397
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/task.md
@@ -0,0 +1,80 @@
+# `task` {#cmem_client.models.task}
+
+Task models for the DataIntegration task endpoint.
+
+A task is what DataIntegration calls the items of a project: a dataset, a workflow, a
+transformation and so on. These models carry the full detail of a single one, as
+returned by ``TaskSearchRepository.get_task()``, which is more than the search result
+the repositories list.
+
+**Classes:**
+
+- [**TaskData**](#cmem_client.models.task.TaskData) – The data section of a task endpoint response.
+- [**TaskResponse**](#cmem_client.models.task.TaskResponse) – Response model for GET /workspace/projects/{project}/tasks/{task}.
+
+## `TaskData` {#cmem_client.models.task.TaskData}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+The data section of a task endpoint response.
+
+**Attributes:**
+
+- [**task_type**](#cmem_client.models.task.TaskData.task_type) (str | None) – Kind of task, e.g. ``Dataset`` or ``Workflow``.
+- [**parameters**](#cmem_client.models.task.TaskData.parameters) (dict[str, Any]) – Parameters of the task, keyed by parameter name. Which ones are
+present depends on the plugin behind the task.
+
+### `model_config` {#cmem_client.models.task.TaskData.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `parameters` {#cmem_client.models.task.TaskData.parameters}
+
+```python
+parameters: dict[str, Any] = Field(default_factory=dict)
+```
+
+### `task_type` {#cmem_client.models.task.TaskData.task_type}
+
+```python
+task_type: str | None = Field(default=None, alias='taskType')
+```
+
+## `TaskResponse` {#cmem_client.models.task.TaskResponse}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Response model for GET /workspace/projects/{project}/tasks/{task}.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.task.TaskResponse.id) (str) – Identifier of the task, unique within its project.
+- [**label**](#cmem_client.models.task.TaskResponse.label) (str | None) – Human readable name of the task, if one is set.
+- [**data**](#cmem_client.models.task.TaskResponse.data) ([TaskData](#cmem_client.models.task.TaskData)) – Type and parameters of the task.
+
+### `data` {#cmem_client.models.task.TaskResponse.data}
+
+```python
+data: TaskData
+```
+
+### `id` {#cmem_client.models.task.TaskResponse.id}
+
+```python
+id: str
+```
+
+### `label` {#cmem_client.models.task.TaskResponse.label}
+
+```python
+label: str | None = None
+```
+
+### `model_config` {#cmem_client.models.task.TaskResponse.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/token.md b/docs/develop/cmem-client-api/models/token.md
new file mode 100644
index 000000000..649bb9f08
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/token.md
@@ -0,0 +1,96 @@
+# `token` {#cmem_client.models.token}
+
+Authentication token models for OAuth 2.0 flows.
+
+This module provides models for handling OAuth 2.0 tokens, particularly
+Keycloak tokens used in Corporate Memory authentication. It includes
+automatic JWT parsing and expiration checking functionality.
+
+The KeycloakToken model handles token lifecycle management, including
+automatically parsing JWT contents and providing expiration checking
+to support token refresh logic in authentication providers.
+
+**Classes:**
+
+- [**KeycloakToken**](#cmem_client.models.token.KeycloakToken) – A Keycloak token
+
+**Functions:**
+
+- [**default_factory_now**](#cmem_client.models.token.default_factory_now) – Get the current UTC datetime
+
+## `KeycloakToken` {#cmem_client.models.token.KeycloakToken}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A Keycloak token
+
+**Attributes:**
+
+- [**access_token**](#cmem_client.models.token.KeycloakToken.access_token) (str) – The encoded bearer token, as sent in the ``Authorization``
+header.
+- [**expires_in**](#cmem_client.models.token.KeycloakToken.expires_in) (int) – Lifetime of the token in seconds, counted from when Keycloak
+issued it.
+- [**expires**](#cmem_client.models.token.KeycloakToken.expires) (datetime) – When the token expires. Taken from the ``exp`` claim of the decoded
+token on creation, so the default is never what a caller sees.
+- [**jwt**](#cmem_client.models.token.KeycloakToken.jwt) (dict) – Claims of the decoded token. The signature is not verified here, because
+the token comes straight from the token endpoint over TLS.
+
+**Functions:**
+
+- [**is_expired**](#cmem_client.models.token.KeycloakToken.is_expired) – Check if token is expired
+- [**model_post_init**](#cmem_client.models.token.KeycloakToken.model_post_init) – Do the post init
+
+### `access_token` {#cmem_client.models.token.KeycloakToken.access_token}
+
+```python
+access_token: str
+```
+
+### `expires` {#cmem_client.models.token.KeycloakToken.expires}
+
+```python
+expires: datetime = Field(default_factory=default_factory_now)
+```
+
+### `expires_in` {#cmem_client.models.token.KeycloakToken.expires_in}
+
+```python
+expires_in: int
+```
+
+### `is_expired` {#cmem_client.models.token.KeycloakToken.is_expired}
+
+```python
+is_expired()
+```
+
+Check if token is expired
+
+### `jwt` {#cmem_client.models.token.KeycloakToken.jwt}
+
+```python
+jwt: dict = Field(default_factory=dict)
+```
+
+### `model_config` {#cmem_client.models.token.KeycloakToken.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `model_post_init` {#cmem_client.models.token.KeycloakToken.model_post_init}
+
+```python
+model_post_init(context)
+```
+
+Do the post init
+
+## `default_factory_now` {#cmem_client.models.token.default_factory_now}
+
+```python
+default_factory_now()
+```
+
+Get the current UTC datetime
+
diff --git a/docs/develop/cmem-client-api/models/url.md b/docs/develop/cmem-client-api/models/url.md
new file mode 100644
index 000000000..502f3a151
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/url.md
@@ -0,0 +1,25 @@
+# `url` {#cmem_client.models.url}
+
+HTTP URL validation and manipulation utilities.
+
+This module provides the HttpUrl class, which extends httpx.URL with additional
+validation and path manipulation capabilities. It ensures URLs are well-formed
+and provides convenient methods for building API endpoints.
+
+The HttpUrl class is used throughout the configuration system to construct
+various Corporate Memory API endpoints from base URLs.
+
+**Classes:**
+
+- [**HttpUrl**](#cmem_client.models.url.HttpUrl) – A http(s) URL.
+
+## `HttpUrl` {#cmem_client.models.url.HttpUrl}
+
+```python
+HttpUrl(url)
+```
+
+Bases: URL
+
+A http(s) URL.
+
diff --git a/docs/develop/cmem-client-api/models/user.md b/docs/develop/cmem-client-api/models/user.md
new file mode 100644
index 000000000..161f92f67
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/user.md
@@ -0,0 +1,128 @@
+# `user` {#cmem_client.models.user}
+
+Keycloak user and group models.
+
+Corporate Memory keeps its accounts in Keycloak. The user accounts of the configured
+realm are the items of ``client.user_accounts``, keyed by their username, and the
+groups a user belongs to decide which access conditions apply to them.
+
+**Classes:**
+
+- [**Group**](#cmem_client.models.user.Group) – A Keycloak group in the Corporate Memory realm.
+- [**User**](#cmem_client.models.user.User) – A Keycloak user account in the Corporate Memory realm.
+
+## `Group` {#cmem_client.models.user.Group}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A Keycloak group in the Corporate Memory realm.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.user.Group.id) (str) – Internal Keycloak identifier of the group, a UUID.
+- [**name**](#cmem_client.models.user.Group.name) (str) – Name of the group.
+- [**path**](#cmem_client.models.user.Group.path) (str) – Full path of the group, which spells out its parents for a nested group,
+e.g. ``/department/team``.
+
+### `id` {#cmem_client.models.user.Group.id}
+
+```python
+id: str
+```
+
+### `model_config` {#cmem_client.models.user.Group.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `name` {#cmem_client.models.user.Group.name}
+
+```python
+name: str
+```
+
+### `path` {#cmem_client.models.user.Group.path}
+
+```python
+path: str = ''
+```
+
+## `User` {#cmem_client.models.user.User}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A Keycloak user account in the Corporate Memory realm.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.user.User.id) (str) – Internal Keycloak identifier of the account, a UUID. Empty on an account
+which was built locally and not yet created.
+- [**username**](#cmem_client.models.user.User.username) (str) – Login name of the account. This is the key of the repository.
+- [**email**](#cmem_client.models.user.User.email) (str) – Mail address of the account.
+- [**first_name**](#cmem_client.models.user.User.first_name) (str) – Given name of the account holder.
+- [**last_name**](#cmem_client.models.user.User.last_name) (str) – Family name of the account holder.
+- [**enabled**](#cmem_client.models.user.User.enabled) (bool) – Whether the account may log in. A disabled account is kept but
+refused.
+- [**email_verified**](#cmem_client.models.user.User.email_verified) (bool) – Whether the mail address was confirmed by the account holder.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.user.User.get_id) – Get the username as the unique identifier.
+
+### `email` {#cmem_client.models.user.User.email}
+
+```python
+email: str = ''
+```
+
+### `email_verified` {#cmem_client.models.user.User.email_verified}
+
+```python
+email_verified: bool = Field(alias='emailVerified', default=False)
+```
+
+### `enabled` {#cmem_client.models.user.User.enabled}
+
+```python
+enabled: bool = True
+```
+
+### `first_name` {#cmem_client.models.user.User.first_name}
+
+```python
+first_name: str = Field(alias='firstName', default='')
+```
+
+### `get_id` {#cmem_client.models.user.User.get_id}
+
+```python
+get_id()
+```
+
+Get the username as the unique identifier.
+
+### `id` {#cmem_client.models.user.User.id}
+
+```python
+id: str = ''
+```
+
+### `last_name` {#cmem_client.models.user.User.last_name}
+
+```python
+last_name: str = Field(alias='lastName', default='')
+```
+
+### `model_config` {#cmem_client.models.user.User.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `username` {#cmem_client.models.user.User.username}
+
+```python
+username: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/validation.md b/docs/develop/cmem-client-api/models/validation.md
new file mode 100644
index 000000000..3f1c2e86a
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/validation.md
@@ -0,0 +1,373 @@
+# `validation` {#cmem_client.models.validation}
+
+Validation models for SHACL batch validation processes.
+
+A batch validation checks the resources of a context graph against the shapes of a
+shape graph and reports where they violate them. ``client.validations`` starts such a
+process and holds the running and finished ones, keyed by their batch ID. The
+aggregation is the summary a repository lists, while the result carries every single
+violation; note that ``client.validations`` does not fetch on creation, so call
+``fetch_data()`` before iterating it.
+
+**Classes:**
+
+- [**ValidationAggregation**](#cmem_client.models.validation.ValidationAggregation) – Summary view of a batch validation process.
+- [**ValidationConstraintTemplate**](#cmem_client.models.validation.ValidationConstraintTemplate) – Constraint message template from a validation violation.
+- [**ValidationResourceResult**](#cmem_client.models.validation.ValidationResourceResult) – Violations found for a single validated resource.
+- [**ValidationResult**](#cmem_client.models.validation.ValidationResult) – Full result of a completed batch validation process.
+- [**ValidationViolation**](#cmem_client.models.validation.ValidationViolation) – A single SHACL violation found during validation.
+- [**ValidationViolationMessage**](#cmem_client.models.validation.ValidationViolationMessage) – A single message attached to a validation violation.
+
+**Attributes:**
+
+- [**STATUS_CANCELLED**](#cmem_client.models.validation.STATUS_CANCELLED) –
+- [**STATUS_ERROR**](#cmem_client.models.validation.STATUS_ERROR) –
+- [**STATUS_FINISHED**](#cmem_client.models.validation.STATUS_FINISHED) –
+- [**STATUS_RUNNING**](#cmem_client.models.validation.STATUS_RUNNING) –
+- [**STATUS_SCHEDULED**](#cmem_client.models.validation.STATUS_SCHEDULED) –
+
+## `STATUS_CANCELLED` {#cmem_client.models.validation.STATUS_CANCELLED}
+
+```python
+STATUS_CANCELLED = 'CANCELLED'
+```
+
+## `STATUS_ERROR` {#cmem_client.models.validation.STATUS_ERROR}
+
+```python
+STATUS_ERROR = 'ERROR'
+```
+
+## `STATUS_FINISHED` {#cmem_client.models.validation.STATUS_FINISHED}
+
+```python
+STATUS_FINISHED = 'FINISHED'
+```
+
+## `STATUS_RUNNING` {#cmem_client.models.validation.STATUS_RUNNING}
+
+```python
+STATUS_RUNNING = 'RUNNING'
+```
+
+## `STATUS_SCHEDULED` {#cmem_client.models.validation.STATUS_SCHEDULED}
+
+```python
+STATUS_SCHEDULED = 'SCHEDULED'
+```
+
+## `ValidationAggregation` {#cmem_client.models.validation.ValidationAggregation}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+Summary view of a batch validation process.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.validation.ValidationAggregation.id) (str) – ID of the batch. This is the key of the repository.
+- [**state**](#cmem_client.models.validation.ValidationAggregation.state) (str) – What the batch is doing, one of ``SCHEDULED``, ``RUNNING``,
+``FINISHED``, ``CANCELLED`` or ``ERROR``.
+- [**context_graph_iri**](#cmem_client.models.validation.ValidationAggregation.context_graph_iri) (str) – IRI of the graph whose resources are validated.
+- [**shape_graph_iri**](#cmem_client.models.validation.ValidationAggregation.shape_graph_iri) (str) – IRI of the graph holding the shapes.
+- [**execution_started**](#cmem_client.models.validation.ValidationAggregation.execution_started) (int | None) – When the validation started, as a Unix timestamp in
+milliseconds, or ``None`` while it is still scheduled.
+- [**execution_finished**](#cmem_client.models.validation.ValidationAggregation.execution_finished) (int | None) – When it finished, or ``None`` while it is still running.
+- [**resource_count**](#cmem_client.models.validation.ValidationAggregation.resource_count) (int) – How many resources the batch covers.
+- [**resource_processed_count**](#cmem_client.models.validation.ValidationAggregation.resource_processed_count) (int) – How many of them are done. Compare with
+``resource_count`` to follow the progress of a running batch.
+- [**resources_with_violations_count**](#cmem_client.models.validation.ValidationAggregation.resources_with_violations_count) (int) – How many resources violated at least one
+shape.
+- [**violations_count**](#cmem_client.models.validation.ValidationAggregation.violations_count) (int) – How many violations were found in total.
+- [**error**](#cmem_client.models.validation.ValidationAggregation.error) (str | None) – Why the batch failed, set only in state ``ERROR``.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.validation.ValidationAggregation.get_id) – Get the batch validation process ID.
+
+### `context_graph_iri` {#cmem_client.models.validation.ValidationAggregation.context_graph_iri}
+
+```python
+context_graph_iri: str = Field(alias='contextGraphIri')
+```
+
+### `error` {#cmem_client.models.validation.ValidationAggregation.error}
+
+```python
+error: str | None = Field(default=None)
+```
+
+### `execution_finished` {#cmem_client.models.validation.ValidationAggregation.execution_finished}
+
+```python
+execution_finished: int | None = Field(alias='executionFinished', default=None)
+```
+
+### `execution_started` {#cmem_client.models.validation.ValidationAggregation.execution_started}
+
+```python
+execution_started: int | None = Field(alias='executionStarted', default=None)
+```
+
+### `get_id` {#cmem_client.models.validation.ValidationAggregation.get_id}
+
+```python
+get_id()
+```
+
+Get the batch validation process ID.
+
+### `id` {#cmem_client.models.validation.ValidationAggregation.id}
+
+```python
+id: str
+```
+
+### `model_config` {#cmem_client.models.validation.ValidationAggregation.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `resource_count` {#cmem_client.models.validation.ValidationAggregation.resource_count}
+
+```python
+resource_count: int = Field(alias='resourceCount', default=0)
+```
+
+### `resource_processed_count` {#cmem_client.models.validation.ValidationAggregation.resource_processed_count}
+
+```python
+resource_processed_count: int = Field(alias='resourceProcessedCount', default=0)
+```
+
+### `resources_with_violations_count` {#cmem_client.models.validation.ValidationAggregation.resources_with_violations_count}
+
+```python
+resources_with_violations_count: int = Field(alias='resourcesWithViolationsCount', default=0)
+```
+
+### `shape_graph_iri` {#cmem_client.models.validation.ValidationAggregation.shape_graph_iri}
+
+```python
+shape_graph_iri: str = Field(alias='shapeGraphIri', default='')
+```
+
+### `state` {#cmem_client.models.validation.ValidationAggregation.state}
+
+```python
+state: str
+```
+
+### `violations_count` {#cmem_client.models.validation.ValidationAggregation.violations_count}
+
+```python
+violations_count: int = Field(alias='violationsCount', default=0)
+```
+
+## `ValidationConstraintTemplate` {#cmem_client.models.validation.ValidationConstraintTemplate}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Constraint message template from a validation violation.
+
+**Attributes:**
+
+- [**constraint_name**](#cmem_client.models.validation.ValidationConstraintTemplate.constraint_name) (str) – Name of the SHACL constraint which was violated, e.g.
+``MinCountConstraintComponent``.
+
+### `constraint_name` {#cmem_client.models.validation.ValidationConstraintTemplate.constraint_name}
+
+```python
+constraint_name: str = Field(alias='constraintName')
+```
+
+### `model_config` {#cmem_client.models.validation.ValidationConstraintTemplate.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `ValidationResourceResult` {#cmem_client.models.validation.ValidationResourceResult}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Violations found for a single validated resource.
+
+**Attributes:**
+
+- [**resource_iri**](#cmem_client.models.validation.ValidationResourceResult.resource_iri) (str) – IRI of the validated resource.
+- [**node_shapes**](#cmem_client.models.validation.ValidationResourceResult.node_shapes) (list[str]) – IRIs of the node shapes the resource was checked against.
+- [**violations**](#cmem_client.models.validation.ValidationResourceResult.violations) (list[[ValidationViolation](#cmem_client.models.validation.ValidationViolation)]) – The violations found on this resource.
+
+### `model_config` {#cmem_client.models.validation.ValidationResourceResult.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `node_shapes` {#cmem_client.models.validation.ValidationResourceResult.node_shapes}
+
+```python
+node_shapes: list[str] = Field(alias='nodeShapes', default_factory=list)
+```
+
+### `resource_iri` {#cmem_client.models.validation.ValidationResourceResult.resource_iri}
+
+```python
+resource_iri: str = Field(alias='resourceIri')
+```
+
+### `violations` {#cmem_client.models.validation.ValidationResourceResult.violations}
+
+```python
+violations: list[ValidationViolation] = Field(default_factory=list)
+```
+
+## `ValidationResult` {#cmem_client.models.validation.ValidationResult}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Full result of a completed batch validation process.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.validation.ValidationResult.id) (str) – ID of the batch this result belongs to.
+- [**context_graph_iri**](#cmem_client.models.validation.ValidationResult.context_graph_iri) (str) – IRI of the graph whose resources were validated.
+- [**shape_graph_iri**](#cmem_client.models.validation.ValidationResult.shape_graph_iri) (str) – IRI of the graph holding the shapes they were checked against.
+- [**execution_started**](#cmem_client.models.validation.ValidationResult.execution_started) (int | None) – When the validation started, as a Unix timestamp in
+milliseconds, or ``None`` while it is still scheduled.
+- [**execution_finished**](#cmem_client.models.validation.ValidationResult.execution_finished) (int | None) – When it finished, as a Unix timestamp in milliseconds, or
+``None`` while it is still running. The endpoint returns a result for a
+batch which has not finished yet, and leaves the field out then.
+- [**resources**](#cmem_client.models.validation.ValidationResult.resources) (list[str]) – IRIs of every validated resource, including those without a
+violation.
+- [**results**](#cmem_client.models.validation.ValidationResult.results) (list[[ValidationResourceResult](#cmem_client.models.validation.ValidationResourceResult)]) – The per-resource violations. Resources which passed are not listed.
+
+### `context_graph_iri` {#cmem_client.models.validation.ValidationResult.context_graph_iri}
+
+```python
+context_graph_iri: str = Field(alias='contextGraphIri')
+```
+
+### `execution_finished` {#cmem_client.models.validation.ValidationResult.execution_finished}
+
+```python
+execution_finished: int | None = Field(alias='executionFinished', default=None)
+```
+
+### `execution_started` {#cmem_client.models.validation.ValidationResult.execution_started}
+
+```python
+execution_started: int | None = Field(alias='executionStarted', default=None)
+```
+
+### `id` {#cmem_client.models.validation.ValidationResult.id}
+
+```python
+id: str
+```
+
+### `model_config` {#cmem_client.models.validation.ValidationResult.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `resources` {#cmem_client.models.validation.ValidationResult.resources}
+
+```python
+resources: list[str] = Field(default_factory=list)
+```
+
+### `results` {#cmem_client.models.validation.ValidationResult.results}
+
+```python
+results: list[ValidationResourceResult] = Field(default_factory=list)
+```
+
+### `shape_graph_iri` {#cmem_client.models.validation.ValidationResult.shape_graph_iri}
+
+```python
+shape_graph_iri: str = Field(alias='shapeGraphIri')
+```
+
+## `ValidationViolation` {#cmem_client.models.validation.ValidationViolation}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A single SHACL violation found during validation.
+
+**Attributes:**
+
+- [**report_entry_constraint_message_template**](#cmem_client.models.validation.ValidationViolation.report_entry_constraint_message_template) ([ValidationConstraintTemplate](#cmem_client.models.validation.ValidationConstraintTemplate)) – The violated constraint.
+- [**path**](#cmem_client.models.validation.ValidationViolation.path) (str | None) – IRI of the property the violation was found on, or ``None`` for a
+violation which concerns the resource as a whole.
+- [**source**](#cmem_client.models.validation.ValidationViolation.source) (str | None) – IRI of the shape which raised the violation.
+- [**messages**](#cmem_client.models.validation.ValidationViolation.messages) (list[[ValidationViolationMessage](#cmem_client.models.validation.ValidationViolationMessage)]) – Human readable messages of the violation, one per language.
+- [**severity**](#cmem_client.models.validation.ValidationViolation.severity) (str | None) – Severity declared by the shape, e.g. ``Violation`` or ``Warning``.
+
+### `messages` {#cmem_client.models.validation.ValidationViolation.messages}
+
+```python
+messages: list[ValidationViolationMessage] = Field(default_factory=list)
+```
+
+### `model_config` {#cmem_client.models.validation.ValidationViolation.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `path` {#cmem_client.models.validation.ValidationViolation.path}
+
+```python
+path: str | None = None
+```
+
+### `report_entry_constraint_message_template` {#cmem_client.models.validation.ValidationViolation.report_entry_constraint_message_template}
+
+```python
+report_entry_constraint_message_template: ValidationConstraintTemplate = Field(alias='reportEntryConstraintMessageTemplate')
+```
+
+### `severity` {#cmem_client.models.validation.ValidationViolation.severity}
+
+```python
+severity: str | None = None
+```
+
+### `source` {#cmem_client.models.validation.ValidationViolation.source}
+
+```python
+source: str | None = None
+```
+
+## `ValidationViolationMessage` {#cmem_client.models.validation.ValidationViolationMessage}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A single message attached to a validation violation.
+
+**Attributes:**
+
+- [**value**](#cmem_client.models.validation.ValidationViolationMessage.value) (str) – Text of the message.
+- [**lang**](#cmem_client.models.validation.ValidationViolationMessage.lang) (str) – Language tag of the message, empty if it carries none.
+
+### `lang` {#cmem_client.models.validation.ValidationViolationMessage.lang}
+
+```python
+lang: str = ''
+```
+
+### `model_config` {#cmem_client.models.validation.ValidationViolationMessage.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `value` {#cmem_client.models.validation.ValidationViolationMessage.value}
+
+```python
+value: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/variable.md b/docs/develop/cmem-client-api/models/variable.md
new file mode 100644
index 000000000..0d74d8140
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/variable.md
@@ -0,0 +1,92 @@
+# `variable` {#cmem_client.models.variable}
+
+Corporate Memory project variable models for data integration.
+
+This module defines models for representing project variables within Corporate Memory
+DataIntegration projects. Variables can hold static values or Jinja2 template strings
+that reference other variables, and are used to parameterize datasets and tasks.
+
+**Classes:**
+
+- [**Variable**](#cmem_client.models.variable.Variable) – A project variable in Corporate Memory DataIntegration.
+
+## `Variable` {#cmem_client.models.variable.Variable}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A project variable in Corporate Memory DataIntegration.
+
+**Attributes:**
+
+- [**name**](#cmem_client.models.variable.Variable.name) (str) – Name of the variable, unique within its project. This is what a template
+refers to.
+- [**project_id**](#cmem_client.models.variable.Variable.project_id) (str) – ID of the project the variable belongs to.
+- [**value**](#cmem_client.models.variable.Variable.value) (str) – Resolved value of the variable. For a templated variable this is the
+rendered result, so it is read-only.
+- [**template**](#cmem_client.models.variable.Variable.template) (str) – Jinja2 template the value is rendered from. Empty for a variable
+which holds a static value.
+- [**description**](#cmem_client.models.variable.Variable.description) (str) – Description of the variable as maintained in the project.
+- [**is_sensitive**](#cmem_client.models.variable.Variable.is_sensitive) (bool) – Whether the value is treated as a secret. Sensitive values are
+masked by the user interface.
+- [**scope**](#cmem_client.models.variable.Variable.scope) (str) – Scope the variable is defined in, ``project`` for a project variable.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.variable.Variable.get_id) – Get the combined ID of the variable in the form ``project_id:name``.
+
+### `description` {#cmem_client.models.variable.Variable.description}
+
+```python
+description: str = ''
+```
+
+### `get_id` {#cmem_client.models.variable.Variable.get_id}
+
+```python
+get_id()
+```
+
+Get the combined ID of the variable in the form ``project_id:name``.
+
+### `is_sensitive` {#cmem_client.models.variable.Variable.is_sensitive}
+
+```python
+is_sensitive: bool = Field(alias='isSensitive', default=False)
+```
+
+### `model_config` {#cmem_client.models.variable.Variable.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `name` {#cmem_client.models.variable.Variable.name}
+
+```python
+name: str
+```
+
+### `project_id` {#cmem_client.models.variable.Variable.project_id}
+
+```python
+project_id: str = Field(alias='project')
+```
+
+### `scope` {#cmem_client.models.variable.Variable.scope}
+
+```python
+scope: str = 'project'
+```
+
+### `template` {#cmem_client.models.variable.Variable.template}
+
+```python
+template: str = ''
+```
+
+### `value` {#cmem_client.models.variable.Variable.value}
+
+```python
+value: str = ''
+```
+
diff --git a/docs/develop/cmem-client-api/models/vocabulary.md b/docs/develop/cmem-client-api/models/vocabulary.md
new file mode 100644
index 000000000..90bb54427
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/vocabulary.md
@@ -0,0 +1,224 @@
+# `vocabulary` {#cmem_client.models.vocabulary}
+
+Vocabulary models for Corporate Memory vocabulary catalog.
+
+Provides Pydantic models for vocabulary catalog entries returned by the
+DataPlatform vocabularies API.
+
+The catalog lists both the vocabularies a deployment has installed and those it offers
+for installation; they are the items of ``client.vocabularies``, keyed by their IRI.
+The cache models describe something else: the classes and properties DataIntegration
+extracted from the installed vocabularies, which is what drives autocompletion in the
+user interface.
+
+**Classes:**
+
+- [**VocabCacheEntry**](#cmem_client.models.vocabulary.VocabCacheEntry) – Cache data for one vocabulary, containing its classes and properties.
+- [**VocabCacheItem**](#cmem_client.models.vocabulary.VocabCacheItem) – A single class or property in the vocabulary cache.
+- [**VocabCacheItemInfo**](#cmem_client.models.vocabulary.VocabCacheItemInfo) – Generic info for a vocabulary cache term.
+- [**Vocabulary**](#cmem_client.models.vocabulary.Vocabulary) – A vocabulary catalog entry.
+- [**VocabularyCache**](#cmem_client.models.vocabulary.VocabularyCache) – Global vocabulary cache response from DataIntegration.
+- [**VocabularyLabel**](#cmem_client.models.vocabulary.VocabularyLabel) – Label metadata for a vocabulary.
+
+## `VocabCacheEntry` {#cmem_client.models.vocabulary.VocabCacheEntry}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Cache data for one vocabulary, containing its classes and properties.
+
+**Attributes:**
+
+- [**classes**](#cmem_client.models.vocabulary.VocabCacheEntry.classes) (list[[VocabCacheItem](#cmem_client.models.vocabulary.VocabCacheItem)]) – Classes the vocabulary defines.
+- [**properties**](#cmem_client.models.vocabulary.VocabCacheEntry.properties) (list[[VocabCacheItem](#cmem_client.models.vocabulary.VocabCacheItem)]) – Properties the vocabulary defines.
+
+### `classes` {#cmem_client.models.vocabulary.VocabCacheEntry.classes}
+
+```python
+classes: list[VocabCacheItem] = Field(default_factory=list)
+```
+
+### `model_config` {#cmem_client.models.vocabulary.VocabCacheEntry.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `properties` {#cmem_client.models.vocabulary.VocabCacheEntry.properties}
+
+```python
+properties: list[VocabCacheItem] = Field(default_factory=list)
+```
+
+## `VocabCacheItem` {#cmem_client.models.vocabulary.VocabCacheItem}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A single class or property in the vocabulary cache.
+
+**Attributes:**
+
+- [**generic_info**](#cmem_client.models.vocabulary.VocabCacheItem.generic_info) ([VocabCacheItemInfo](#cmem_client.models.vocabulary.VocabCacheItemInfo)) – URI and label of the term.
+
+### `generic_info` {#cmem_client.models.vocabulary.VocabCacheItem.generic_info}
+
+```python
+generic_info: VocabCacheItemInfo = Field(alias='genericInfo')
+```
+
+### `model_config` {#cmem_client.models.vocabulary.VocabCacheItem.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `VocabCacheItemInfo` {#cmem_client.models.vocabulary.VocabCacheItemInfo}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Generic info for a vocabulary cache term.
+
+**Attributes:**
+
+- [**uri**](#cmem_client.models.vocabulary.VocabCacheItemInfo.uri) (str) – URI of the class or property.
+- [**label**](#cmem_client.models.vocabulary.VocabCacheItemInfo.label) (str | None) – Human readable name of the term, if the vocabulary defines one.
+
+### `label` {#cmem_client.models.vocabulary.VocabCacheItemInfo.label}
+
+```python
+label: str | None = None
+```
+
+### `model_config` {#cmem_client.models.vocabulary.VocabCacheItemInfo.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `uri` {#cmem_client.models.vocabulary.VocabCacheItemInfo.uri}
+
+```python
+uri: str
+```
+
+## `Vocabulary` {#cmem_client.models.vocabulary.Vocabulary}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A vocabulary catalog entry.
+
+**Attributes:**
+
+- [**iri**](#cmem_client.models.vocabulary.Vocabulary.iri) (str) – IRI of the vocabulary. This is the key of the repository.
+- [**installed**](#cmem_client.models.vocabulary.Vocabulary.installed) (bool) – Whether the vocabulary is installed in the deployment.
+- [**download_url**](#cmem_client.models.vocabulary.Vocabulary.download_url) (str | None) – Where an uninstalled vocabulary can be fetched from, or ``None``
+if the catalog offers no source for it.
+- [**vocabulary_label**](#cmem_client.models.vocabulary.Vocabulary.vocabulary_label) (str | None) – Name of the vocabulary as given by the catalog.
+- [**label**](#cmem_client.models.vocabulary.Vocabulary.label) ([VocabularyLabel](#cmem_client.models.vocabulary.VocabularyLabel) | None) – Label of the graph holding the vocabulary, once it is installed.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.vocabulary.Vocabulary.get_id) – Get the IRI of the vocabulary.
+
+### `download_url` {#cmem_client.models.vocabulary.Vocabulary.download_url}
+
+```python
+download_url: str | None = Field(default=None, alias='downloadUrl')
+```
+
+### `get_id` {#cmem_client.models.vocabulary.Vocabulary.get_id}
+
+```python
+get_id()
+```
+
+Get the IRI of the vocabulary.
+
+### `installed` {#cmem_client.models.vocabulary.Vocabulary.installed}
+
+```python
+installed: bool
+```
+
+### `iri` {#cmem_client.models.vocabulary.Vocabulary.iri}
+
+```python
+iri: str
+```
+
+### `is_installable` {#cmem_client.models.vocabulary.Vocabulary.is_installable}
+
+```python
+is_installable: bool
+```
+
+Return True if the vocabulary can be installed from catalog.
+
+### `label` {#cmem_client.models.vocabulary.Vocabulary.label}
+
+```python
+label: VocabularyLabel | None = None
+```
+
+### `model_config` {#cmem_client.models.vocabulary.Vocabulary.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `vocabulary_label` {#cmem_client.models.vocabulary.Vocabulary.vocabulary_label}
+
+```python
+vocabulary_label: str | None = Field(default=None, alias='vocabularyLabel')
+```
+
+## `VocabularyCache` {#cmem_client.models.vocabulary.VocabularyCache}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Global vocabulary cache response from DataIntegration.
+
+**Attributes:**
+
+- [**vocabularies**](#cmem_client.models.vocabulary.VocabularyCache.vocabularies) (list[[VocabCacheEntry](#cmem_client.models.vocabulary.VocabCacheEntry)]) – Cache entry of each vocabulary DataIntegration knows.
+
+### `model_config` {#cmem_client.models.vocabulary.VocabularyCache.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `vocabularies` {#cmem_client.models.vocabulary.VocabularyCache.vocabularies}
+
+```python
+vocabularies: list[VocabCacheEntry] = Field(default_factory=list)
+```
+
+## `VocabularyLabel` {#cmem_client.models.vocabulary.VocabularyLabel}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Label metadata for a vocabulary.
+
+**Attributes:**
+
+- [**title**](#cmem_client.models.vocabulary.VocabularyLabel.title) (str) – Text of the label.
+- [**lang**](#cmem_client.models.vocabulary.VocabularyLabel.lang) (str | None) – Language tag of the label, e.g. ``en``.
+
+### `lang` {#cmem_client.models.vocabulary.VocabularyLabel.lang}
+
+```python
+lang: str | None = None
+```
+
+### `model_config` {#cmem_client.models.vocabulary.VocabularyLabel.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `title` {#cmem_client.models.vocabulary.VocabularyLabel.title}
+
+```python
+title: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/workflow.md b/docs/develop/cmem-client-api/models/workflow.md
new file mode 100644
index 000000000..1ea5b574e
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/workflow.md
@@ -0,0 +1,344 @@
+# `workflow` {#cmem_client.models.workflow}
+
+Workflow models
+
+A workflow is the DataIntegration task which moves data between datasets. The workflows
+of all projects are the items of ``client.workflows``, keyed by
+``{project_id}:{workflow_id}``.
+
+A workflow which came out of the repository carries a client, so it can start itself
+and report its own status instead of going back through the repository:
+
+ >>> workflow = client.workflows["my-project:my-workflow"]
+ >>> workflow.execute_wait_for_completion()
+ >>> workflow.get_status().concrete_status
+
+**Classes:**
+
+- [**Workflow**](#cmem_client.models.workflow.Workflow) – A workflow
+- [**WorkflowSearchResultSet**](#cmem_client.models.workflow.WorkflowSearchResultSet) – Wrapper for the search API response envelope.
+- [**WorkflowStatus**](#cmem_client.models.workflow.WorkflowStatus) – Workflow execution status
+
+**Attributes:**
+
+- [**ACTIVITY_NAME**](#cmem_client.models.workflow.ACTIVITY_NAME) –
+- [**ACTIVITY_TYPE_EXECUTE_DEFAULTWORKFLOW**](#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_DEFAULTWORKFLOW) –
+- [**ACTIVITY_TYPE_EXECUTE_LOCALWORKFLOW**](#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_LOCALWORKFLOW) –
+- [**ACTIVITY_TYPE_EXECUTE_WITH_PAYLOAD**](#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_WITH_PAYLOAD) –
+- [**VALID_WORKFLOW_STATUSES**](#cmem_client.models.workflow.VALID_WORKFLOW_STATUSES) –
+
+## `ACTIVITY_NAME` {#cmem_client.models.workflow.ACTIVITY_NAME}
+
+```python
+ACTIVITY_NAME = Literal['ExecuteDefaultWorkflow', 'ExecuteLocalWorkflow', 'ExecuteWorkflowWithPayload']
+```
+
+## `ACTIVITY_TYPE_EXECUTE_DEFAULTWORKFLOW` {#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_DEFAULTWORKFLOW}
+
+```python
+ACTIVITY_TYPE_EXECUTE_DEFAULTWORKFLOW = 'ExecuteDefaultWorkflow'
+```
+
+## `ACTIVITY_TYPE_EXECUTE_LOCALWORKFLOW` {#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_LOCALWORKFLOW}
+
+```python
+ACTIVITY_TYPE_EXECUTE_LOCALWORKFLOW = 'ExecuteLocalWorkflow'
+```
+
+## `ACTIVITY_TYPE_EXECUTE_WITH_PAYLOAD` {#cmem_client.models.workflow.ACTIVITY_TYPE_EXECUTE_WITH_PAYLOAD}
+
+```python
+ACTIVITY_TYPE_EXECUTE_WITH_PAYLOAD = 'ExecuteWorkflowWithPayload'
+```
+
+## `VALID_WORKFLOW_STATUSES` {#cmem_client.models.workflow.VALID_WORKFLOW_STATUSES}
+
+```python
+VALID_WORKFLOW_STATUSES = ['Idle', 'Not executed', 'Finished', 'Cancelled', 'Failed', 'Successful', 'Canceling', 'Running', 'Waiting']
+```
+
+## `Workflow` {#cmem_client.models.workflow.Workflow}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model), [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A workflow
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.workflow.Workflow.id) (str) – ID of the workflow, unique within its project.
+- [**label**](#cmem_client.models.workflow.Workflow.label) (str) – Human readable name of the workflow.
+- [**project_id**](#cmem_client.models.workflow.Workflow.project_id) (str) – ID of the project holding the workflow. Together with ``id`` it
+forms the ``{project_id}:{id}`` key of the repository.
+- [**project_label**](#cmem_client.models.workflow.Workflow.project_label) (str) – Human readable name of that project.
+- [**variable_inputs**](#cmem_client.models.workflow.Workflow.variable_inputs) (list[str]) – IDs of the inputs which can be replaced at execution time,
+which is what ``execute_io()`` writes its payload into.
+- [**variable_outputs**](#cmem_client.models.workflow.Workflow.variable_outputs) (list[str]) – IDs of the outputs which can be replaced at execution time,
+which is what ``execute_io()`` reads its result from.
+- [**warnings**](#cmem_client.models.workflow.Workflow.warnings) (list[str]) – Warnings DataIntegration reported for the workflow.
+- [**tags**](#cmem_client.models.workflow.Workflow.tags) (list[[Tag](../models/common.md#cmem_client.models.common.Tag)]) – Tags attached to the workflow.
+- [**parameters**](#cmem_client.models.workflow.Workflow.parameters) (dict) – Raw parameters as returned by the search endpoint. Excluded from
+serialization; the variable inputs and outputs are read out of it.
+
+**Functions:**
+
+- [**execute**](#cmem_client.models.workflow.Workflow.execute) – Execute the workflow
+- [**execute_wait_for_completion**](#cmem_client.models.workflow.Workflow.execute_wait_for_completion) – Execute the workflow waiting for completion
+- [**get_id**](#cmem_client.models.workflow.Workflow.get_id) – Get the workflow ID
+- [**get_status**](#cmem_client.models.workflow.Workflow.get_status) – Get the status of the workflow execution.
+- [**set_client**](#cmem_client.models.workflow.Workflow.set_client) – Set the client for this workflow
+
+### `execute` {#cmem_client.models.workflow.Workflow.execute}
+
+```python
+execute(activity_name='ExecuteDefaultWorkflow')
+```
+
+Execute the workflow
+
+### `execute_wait_for_completion` {#cmem_client.models.workflow.Workflow.execute_wait_for_completion}
+
+```python
+execute_wait_for_completion(activity_name='ExecuteDefaultWorkflow', sleep_time=1)
+```
+
+Execute the workflow waiting for completion
+
+### `get_id` {#cmem_client.models.workflow.Workflow.get_id}
+
+```python
+get_id()
+```
+
+Get the workflow ID
+
+### `get_status` {#cmem_client.models.workflow.Workflow.get_status}
+
+```python
+get_status(activity_name='ExecuteDefaultWorkflow')
+```
+
+Get the status of the workflow execution.
+
+### `id` {#cmem_client.models.workflow.Workflow.id}
+
+```python
+id: str
+```
+
+### `label` {#cmem_client.models.workflow.Workflow.label}
+
+```python
+label: str
+```
+
+### `model_config` {#cmem_client.models.workflow.Workflow.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `parameters` {#cmem_client.models.workflow.Workflow.parameters}
+
+```python
+parameters: dict = Field(default_factory=dict, exclude=True)
+```
+
+### `project_id` {#cmem_client.models.workflow.Workflow.project_id}
+
+```python
+project_id: str = Field(alias='projectId')
+```
+
+### `project_label` {#cmem_client.models.workflow.Workflow.project_label}
+
+```python
+project_label: str = Field(alias='projectLabel', default='')
+```
+
+### `set_client` {#cmem_client.models.workflow.Workflow.set_client}
+
+```python
+set_client(client)
+```
+
+Set the client for this workflow
+
+### `tags` {#cmem_client.models.workflow.Workflow.tags}
+
+```python
+tags: list[Tag] = Field(default_factory=list)
+```
+
+### `variable_inputs` {#cmem_client.models.workflow.Workflow.variable_inputs}
+
+```python
+variable_inputs: list[str] = Field(alias='variableInputs', default_factory=list)
+```
+
+### `variable_outputs` {#cmem_client.models.workflow.Workflow.variable_outputs}
+
+```python
+variable_outputs: list[str] = Field(alias='variableOutputs', default_factory=list)
+```
+
+### `warnings` {#cmem_client.models.workflow.Workflow.warnings}
+
+```python
+warnings: list[str] = Field(default_factory=list)
+```
+
+## `WorkflowSearchResultSet` {#cmem_client.models.workflow.WorkflowSearchResultSet}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Wrapper for the search API response envelope.
+
+**Attributes:**
+
+- [**results**](#cmem_client.models.workflow.WorkflowSearchResultSet.results) (list[[Workflow](#cmem_client.models.workflow.Workflow)]) – The workflows the search returned.
+
+### `model_config` {#cmem_client.models.workflow.WorkflowSearchResultSet.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `results` {#cmem_client.models.workflow.WorkflowSearchResultSet.results}
+
+```python
+results: list[Workflow]
+```
+
+## `WorkflowStatus` {#cmem_client.models.workflow.WorkflowStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Workflow execution status
+
+**Attributes:**
+
+- [**status_name**](#cmem_client.models.workflow.WorkflowStatus.status_name) (str) – Coarse state of the execution, e.g. ``Idle``, ``Running`` or
+``Finished``.
+- [**concrete_status**](#cmem_client.models.workflow.WorkflowStatus.concrete_status) (str) – What the state amounts to, e.g. ``Successful``, ``Failed`` or
+``Cancelled``. This is the field to check once an execution finished.
+- [**progress**](#cmem_client.models.workflow.WorkflowStatus.progress) (float | None) – How far the execution got, in percent, or ``None`` if the workflow
+does not report progress.
+- [**failed**](#cmem_client.models.workflow.WorkflowStatus.failed) (bool) – Whether the execution failed.
+- [**message**](#cmem_client.models.workflow.WorkflowStatus.message) (str) – Human readable status message.
+- [**last_update_time**](#cmem_client.models.workflow.WorkflowStatus.last_update_time) (int) – When the status was last updated, as a Unix timestamp in
+milliseconds.
+- [**project**](#cmem_client.models.workflow.WorkflowStatus.project) (str) – ID of the project holding the workflow.
+- [**task**](#cmem_client.models.workflow.WorkflowStatus.task) (str) – ID of the workflow task.
+- [**activity**](#cmem_client.models.workflow.WorkflowStatus.activity) (str) – Name of the activity which runs the workflow.
+- [**activity_label**](#cmem_client.models.workflow.WorkflowStatus.activity_label) (str) – Human readable name of that activity.
+- [**queue_time**](#cmem_client.models.workflow.WorkflowStatus.queue_time) (datetime | None) – When the execution was queued.
+- [**start_time**](#cmem_client.models.workflow.WorkflowStatus.start_time) (datetime | None) – When the execution actually started.
+- [**is_running**](#cmem_client.models.workflow.WorkflowStatus.is_running) (bool) – Whether the execution is still going. Poll this to wait for a
+workflow, or let ``execute_wait_for_completion()`` do it.
+- [**runtime**](#cmem_client.models.workflow.WorkflowStatus.runtime) (int | None) – How long the execution took, in milliseconds.
+- [**cancelled**](#cmem_client.models.workflow.WorkflowStatus.cancelled) (bool | None) – Whether the execution was cancelled.
+- [**exception_message**](#cmem_client.models.workflow.WorkflowStatus.exception_message) (str | None) – Message of the exception which ended the execution, if one
+did.
+
+### `activity` {#cmem_client.models.workflow.WorkflowStatus.activity}
+
+```python
+activity: str
+```
+
+### `activity_label` {#cmem_client.models.workflow.WorkflowStatus.activity_label}
+
+```python
+activity_label: str = Field(alias='activityLabel')
+```
+
+### `cancelled` {#cmem_client.models.workflow.WorkflowStatus.cancelled}
+
+```python
+cancelled: bool | None = None
+```
+
+### `concrete_status` {#cmem_client.models.workflow.WorkflowStatus.concrete_status}
+
+```python
+concrete_status: str = Field(alias='concreteStatus')
+```
+
+### `exception_message` {#cmem_client.models.workflow.WorkflowStatus.exception_message}
+
+```python
+exception_message: str | None = Field(default=None, alias='exceptionMessage')
+```
+
+### `failed` {#cmem_client.models.workflow.WorkflowStatus.failed}
+
+```python
+failed: bool
+```
+
+### `is_running` {#cmem_client.models.workflow.WorkflowStatus.is_running}
+
+```python
+is_running: bool = Field(alias='isRunning')
+```
+
+### `last_update_time` {#cmem_client.models.workflow.WorkflowStatus.last_update_time}
+
+```python
+last_update_time: int = Field(alias='lastUpdateTime')
+```
+
+### `message` {#cmem_client.models.workflow.WorkflowStatus.message}
+
+```python
+message: str
+```
+
+### `model_config` {#cmem_client.models.workflow.WorkflowStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `progress` {#cmem_client.models.workflow.WorkflowStatus.progress}
+
+```python
+progress: float | None
+```
+
+### `project` {#cmem_client.models.workflow.WorkflowStatus.project}
+
+```python
+project: str
+```
+
+### `queue_time` {#cmem_client.models.workflow.WorkflowStatus.queue_time}
+
+```python
+queue_time: datetime | None = Field(default=None, alias='queueTime')
+```
+
+### `runtime` {#cmem_client.models.workflow.WorkflowStatus.runtime}
+
+```python
+runtime: int | None = None
+```
+
+### `start_time` {#cmem_client.models.workflow.WorkflowStatus.start_time}
+
+```python
+start_time: datetime | None = Field(default=None, alias='startTime')
+```
+
+### `status_name` {#cmem_client.models.workflow.WorkflowStatus.status_name}
+
+```python
+status_name: str = Field(alias='statusName')
+```
+
+### `task` {#cmem_client.models.workflow.WorkflowStatus.task}
+
+```python
+task: str
+```
+
diff --git a/docs/develop/cmem-client-api/models/workspace_config.md b/docs/develop/cmem-client-api/models/workspace_config.md
new file mode 100644
index 000000000..90cd945d7
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/workspace_config.md
@@ -0,0 +1,107 @@
+# `workspace_config` {#cmem_client.models.workspace_config}
+
+Corporate Memory Explore workspace configuration models.
+
+This module defines models for representing workspace configurations
+managed by the DataPlatform (explore) Workspace Config Controller API.
+
+**Classes:**
+
+- [**LocalizedString**](#cmem_client.models.workspace_config.LocalizedString) – A language-tagged string value.
+- [**WorkspaceConfig**](#cmem_client.models.workspace_config.WorkspaceConfig) – An Explore (DataPlatform) workspace configuration.
+
+## `LocalizedString` {#cmem_client.models.workspace_config.LocalizedString}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+A language-tagged string value.
+
+**Attributes:**
+
+- [**value**](#cmem_client.models.workspace_config.LocalizedString.value) (str) – Text of the string.
+- [**lang**](#cmem_client.models.workspace_config.LocalizedString.lang) (str) – Language tag the text is written in, e.g. ``en``.
+
+### `lang` {#cmem_client.models.workspace_config.LocalizedString.lang}
+
+```python
+lang: str
+```
+
+### `model_config` {#cmem_client.models.workspace_config.LocalizedString.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `value` {#cmem_client.models.workspace_config.LocalizedString.value}
+
+```python
+value: str
+```
+
+## `WorkspaceConfig` {#cmem_client.models.workspace_config.WorkspaceConfig}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+An Explore (DataPlatform) workspace configuration.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.workspace_config.WorkspaceConfig.id) (str) – ID of the configuration. This is the key of the repository.
+- [**labels**](#cmem_client.models.workspace_config.WorkspaceConfig.labels) (list[[LocalizedString](#cmem_client.models.workspace_config.LocalizedString)]) – Names of the workspace, one per language. Use the ``label`` property to
+pick one without handling the list yourself.
+- [**enable_companion**](#cmem_client.models.workspace_config.WorkspaceConfig.enable_companion) (bool | None) – Whether the companion is enabled, or ``None`` if the
+configuration does not decide it and the deployment default applies.
+- [**enable_graph_insights**](#cmem_client.models.workspace_config.WorkspaceConfig.enable_graph_insights) (bool | None) – Whether Graph Insights is enabled, or ``None`` if the
+configuration does not decide it.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.workspace_config.WorkspaceConfig.get_id) – Get the ID of the workspace configuration.
+
+### `enable_companion` {#cmem_client.models.workspace_config.WorkspaceConfig.enable_companion}
+
+```python
+enable_companion: bool | None = Field(alias='enableCompanion', default=None)
+```
+
+### `enable_graph_insights` {#cmem_client.models.workspace_config.WorkspaceConfig.enable_graph_insights}
+
+```python
+enable_graph_insights: bool | None = Field(alias='enableGraphInsights', default=None)
+```
+
+### `get_id` {#cmem_client.models.workspace_config.WorkspaceConfig.get_id}
+
+```python
+get_id()
+```
+
+Get the ID of the workspace configuration.
+
+### `id` {#cmem_client.models.workspace_config.WorkspaceConfig.id}
+
+```python
+id: str
+```
+
+### `label` {#cmem_client.models.workspace_config.WorkspaceConfig.label}
+
+```python
+label: str
+```
+
+Get the English label, falling back to first available or the ID.
+
+### `labels` {#cmem_client.models.workspace_config.WorkspaceConfig.labels}
+
+```python
+labels: list[LocalizedString] = Field(default=[LocalizedString(value='This is a default workspace label', lang='en')])
+```
+
+### `model_config` {#cmem_client.models.workspace_config.WorkspaceConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/models/workspace_plugin.md b/docs/develop/cmem-client-api/models/workspace_plugin.md
new file mode 100644
index 000000000..cc4142998
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/workspace_plugin.md
@@ -0,0 +1,75 @@
+# `workspace_plugin` {#cmem_client.models.workspace_plugin}
+
+Workspace plugin model.
+
+A workspace plugin is a single plugin class DataIntegration discovered, as opposed to
+the Python package shipping it. ``client.python_packages.list_plugins()`` returns the
+plugins of all installed packages.
+
+**Classes:**
+
+- [**WorkspacePlugin**](#cmem_client.models.workspace_plugin.WorkspacePlugin) – A plugin installed in the Corporate Memory DataIntegration workspace.
+
+## `WorkspacePlugin` {#cmem_client.models.workspace_plugin.WorkspacePlugin}
+
+Bases: [ReadRepositoryItem](../models/base.md#cmem_client.models.base.ReadRepositoryItem)
+
+A plugin installed in the Corporate Memory DataIntegration workspace.
+
+**Attributes:**
+
+- [**id**](#cmem_client.models.workspace_plugin.WorkspacePlugin.id) (str) – Identifier of the plugin, unique within the deployment.
+- [**module_name**](#cmem_client.models.workspace_plugin.WorkspacePlugin.module_name) (str) – Python module the plugin class was loaded from.
+- [**plugin_type**](#cmem_client.models.workspace_plugin.WorkspacePlugin.plugin_type) (str) – Kind of plugin, e.g. ``WorkflowPlugin`` or ``TransformPlugin``.
+- [**label**](#cmem_client.models.workspace_plugin.WorkspacePlugin.label) (str) – Human readable name shown in the user interface.
+- [**is_registered**](#cmem_client.models.workspace_plugin.WorkspacePlugin.is_registered) (bool) – Whether DataIntegration registered the plugin successfully. A
+plugin which failed to load is reported with ``False``.
+
+**Functions:**
+
+- [**get_id**](#cmem_client.models.workspace_plugin.WorkspacePlugin.get_id) – Get the plugin identifier.
+
+### `get_id` {#cmem_client.models.workspace_plugin.WorkspacePlugin.get_id}
+
+```python
+get_id()
+```
+
+Get the plugin identifier.
+
+### `id` {#cmem_client.models.workspace_plugin.WorkspacePlugin.id}
+
+```python
+id: str
+```
+
+### `is_registered` {#cmem_client.models.workspace_plugin.WorkspacePlugin.is_registered}
+
+```python
+is_registered: bool = Field(alias='isRegistered', default=True)
+```
+
+### `label` {#cmem_client.models.workspace_plugin.WorkspacePlugin.label}
+
+```python
+label: str
+```
+
+### `model_config` {#cmem_client.models.workspace_plugin.WorkspacePlugin.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `module_name` {#cmem_client.models.workspace_plugin.WorkspacePlugin.module_name}
+
+```python
+module_name: str = Field(alias='moduleName')
+```
+
+### `plugin_type` {#cmem_client.models.workspace_plugin.WorkspacePlugin.plugin_type}
+
+```python
+plugin_type: str = Field(alias='pluginType')
+```
+
diff --git a/docs/develop/cmem-client-api/models/workspace_status.md b/docs/develop/cmem-client-api/models/workspace_status.md
new file mode 100644
index 000000000..11568c338
--- /dev/null
+++ b/docs/develop/cmem-client-api/models/workspace_status.md
@@ -0,0 +1,104 @@
+# `workspace_status` {#cmem_client.models.workspace_status}
+
+Corporate Memory DataIntegration workspace status models.
+
+Models for the aggregated workspace status endpoint
+(`GET /dataintegration/api/workspace/status`), which reports task loading
+errors for all projects of the build (DataIntegration) workspace in a single
+response. Only projects that have at least one failed task are listed.
+
+**Classes:**
+
+- [**ProjectStatus**](#cmem_client.models.workspace_status.ProjectStatus) – Loading status of a single project with failed tasks.
+- [**WorkspaceStatus**](#cmem_client.models.workspace_status.WorkspaceStatus) – Aggregated loading status of the whole build (DataIntegration) workspace.
+
+## `ProjectStatus` {#cmem_client.models.workspace_status.ProjectStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Loading status of a single project with failed tasks.
+
+The per-task objects share the shape of the per-project
+``failedTasksReport`` endpoint, so the same model is reused.
+
+**Attributes:**
+
+- [**project_id**](#cmem_client.models.workspace_status.ProjectStatus.project_id) (str) – ID of the project.
+- [**project_label**](#cmem_client.models.workspace_status.ProjectStatus.project_label) (str | None) – Human readable name of the project, if one is set.
+- [**failed_task_count**](#cmem_client.models.workspace_status.ProjectStatus.failed_task_count) (int) – How many tasks of the project failed to load.
+- [**failed_tasks**](#cmem_client.models.workspace_status.ProjectStatus.failed_tasks) (list[[FailedTasksReport](../models/project.md#cmem_client.models.project.FailedTasksReport)]) – The failed tasks themselves, with the error of each.
+
+### `failed_task_count` {#cmem_client.models.workspace_status.ProjectStatus.failed_task_count}
+
+```python
+failed_task_count: int = Field(alias='failedTaskCount', default=0)
+```
+
+### `failed_tasks` {#cmem_client.models.workspace_status.ProjectStatus.failed_tasks}
+
+```python
+failed_tasks: list[FailedTasksReport] = Field(alias='failedTasks', default_factory=list)
+```
+
+### `model_config` {#cmem_client.models.workspace_status.ProjectStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `project_id` {#cmem_client.models.workspace_status.ProjectStatus.project_id}
+
+```python
+project_id: str = Field(alias='projectId')
+```
+
+### `project_label` {#cmem_client.models.workspace_status.ProjectStatus.project_label}
+
+```python
+project_label: str | None = Field(alias='projectLabel', default=None)
+```
+
+## `WorkspaceStatus` {#cmem_client.models.workspace_status.WorkspaceStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Aggregated loading status of the whole build (DataIntegration) workspace.
+
+**Attributes:**
+
+- [**project_count**](#cmem_client.models.workspace_status.WorkspaceStatus.project_count) (int) – How many projects the workspace holds in total.
+- [**failed_project_count**](#cmem_client.models.workspace_status.WorkspaceStatus.failed_project_count) (int) – How many of them have at least one failed task.
+- [**failed_task_count**](#cmem_client.models.workspace_status.WorkspaceStatus.failed_task_count) (int) – How many tasks failed to load across all projects.
+- [**projects**](#cmem_client.models.workspace_status.WorkspaceStatus.projects) (list[[ProjectStatus](#cmem_client.models.workspace_status.ProjectStatus)]) – The projects with failed tasks. Projects which loaded cleanly are not
+listed, so this is empty on a healthy workspace.
+
+### `failed_project_count` {#cmem_client.models.workspace_status.WorkspaceStatus.failed_project_count}
+
+```python
+failed_project_count: int = Field(alias='failedProjectCount', default=0)
+```
+
+### `failed_task_count` {#cmem_client.models.workspace_status.WorkspaceStatus.failed_task_count}
+
+```python
+failed_task_count: int = Field(alias='failedTaskCount', default=0)
+```
+
+### `model_config` {#cmem_client.models.workspace_status.WorkspaceStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `project_count` {#cmem_client.models.workspace_status.WorkspaceStatus.project_count}
+
+```python
+project_count: int = Field(alias='projectCount', default=0)
+```
+
+### `projects` {#cmem_client.models.workspace_status.WorkspaceStatus.projects}
+
+```python
+projects: list[ProjectStatus] = Field(default_factory=list)
+```
+
diff --git a/docs/develop/cmem-client-api/repositories/.pages b/docs/develop/cmem-client-api/repositories/.pages
new file mode 100644
index 000000000..72decfa23
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/.pages
@@ -0,0 +1 @@
+title: Repositories
diff --git a/docs/develop/cmem-client-api/repositories/access_conditions.md b/docs/develop/cmem-client-api/repositories/access_conditions.md
new file mode 100644
index 000000000..31148a236
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/access_conditions.md
@@ -0,0 +1,275 @@
+# `access_conditions` {#cmem_client.repositories.access_conditions}
+
+Repository for the access conditions of Corporate Memory.
+
+Provides AccessConditionsRepository for creating, updating and deleting access
+conditions, and for inspecting the accounts, groups and actions they can refer to.
+
+**Examples:**
+
+Inspect what access conditions can be granted to whom:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> client.access_conditions.get_users()
+>>> client.access_conditions.get_groups()
+>>> for action in client.access_conditions.get_actions():
+... print(action.iri)
+```
+
+List the configured access conditions:
+
+```pycon
+>>> for iri in client.access_conditions:
+... print(iri, client.access_conditions[iri])
+```
+
+Reload the access conditions after a change:
+
+```pycon
+>>> client.access_conditions.refresh()
+```
+
+**Classes:**
+
+- [**AccessConditionsCreateConfig**](#cmem_client.repositories.access_conditions.AccessConditionsCreateConfig) – Access condition creation config.
+- [**AccessConditionsDeleteConfig**](#cmem_client.repositories.access_conditions.AccessConditionsDeleteConfig) – Access conditions delete config.
+- [**AccessConditionsRepository**](#cmem_client.repositories.access_conditions.AccessConditionsRepository) – Repository for managing authorization access conditions.
+- [**AccessConditionsUpdateConfig**](#cmem_client.repositories.access_conditions.AccessConditionsUpdateConfig) – Access condition update config.
+
+## `AccessConditionsCreateConfig` {#cmem_client.repositories.access_conditions.AccessConditionsCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Access condition creation config.
+
+**Attributes:**
+
+- **model_config** –
+
+## `AccessConditionsDeleteConfig` {#cmem_client.repositories.access_conditions.AccessConditionsDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Access conditions delete config.
+
+**Attributes:**
+
+- **model_config** –
+
+## `AccessConditionsRepository` {#cmem_client.repositories.access_conditions.AccessConditionsRepository}
+
+Bases: [PagedListRepository](../repositories/base/paged_list.md#cmem_client.repositories.base.paged_list.PagedListRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for managing authorization access conditions.
+
+This repository manages access conditions that control authorization for resources
+in Corporate Memory. Access conditions are described with the
+[AccessCondition model][cmem_client.models.access_condition.AccessCondition].
+
+The repository extends PagedListRepository and implements protocols for creating
+and deleting access conditions.
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.fetch_data) – Fetch a paged list from a JSON endpoint via a type adapter.
+- [**get_actions**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_actions) – Return the list of actions that can be granted by access conditions.
+- [**get_groups**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_groups) – Return the list of group IRIs known to the authorization system.
+- [**get_users**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_users) – Return the list of user IRIs known to the authorization system.
+- [**items**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.keys) – Get the keys of the repository
+- [**raise_modification_error**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.raise_modification_error) – Raise an exception if needed
+- [**refresh**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.refresh) – Refresh the DataPlatform access-condition cache.
+- [**review**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.review) – Review access rights for a given account and groups.
+- [**update_item**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.access_conditions.AccessConditionsRepository.logger) (Logger) – Gets the client logger
+
+### `create_item` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a paged list from a JSON endpoint via a type adapter.
+
+Use this method to fetch data if your result set is a pageable spring endpoint.
+
+### `get_actions` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_actions}
+
+```python
+get_actions()
+```
+
+Return the list of actions that can be granted by access conditions.
+
+### `get_groups` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_groups}
+
+```python
+get_groups()
+```
+
+Return the list of group IRIs known to the authorization system.
+
+### `get_users` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.get_users}
+
+```python
+get_users()
+```
+
+Return the list of user IRIs known to the authorization system.
+
+### `items` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `refresh` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.refresh}
+
+```python
+refresh()
+```
+
+Refresh the DataPlatform access-condition cache.
+
+Instructs the DataPlatform to reload its in-memory authorization rules
+from the ACL graphs. Must be called after bulk SPARQL changes to ACL
+graphs so the DataPlatform picks up the new rules without a restart.
+
+**Raises:**
+
+- HTTPStatusError – If the refresh request fails.
+
+### `review` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.review}
+
+```python
+review(account_iri=None, group_iris=None)
+```
+
+Review access rights for a given account and groups.
+
+**Parameters:**
+
+- **account_iri** (str | None) – The IRI of the account to review.
+- **group_iris** (list[str] | None) – Optional list of group IRIs to include in the review.
+
+**Returns:**
+
+- [AccessConditionReview](../models/access_condition.md#cmem_client.models.access_condition.AccessConditionReview) – An AccessConditionReview model containing the review results.
+
+### `update_item` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.access_conditions.AccessConditionsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `AccessConditionsUpdateConfig` {#cmem_client.repositories.access_conditions.AccessConditionsUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Access condition update config.
+
+**Attributes:**
+
+- **model_config** –
+
diff --git a/docs/develop/cmem-client-api/repositories/base/.pages b/docs/develop/cmem-client-api/repositories/base/.pages
new file mode 100644
index 000000000..b6ee5eb29
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/base/.pages
@@ -0,0 +1 @@
+title: Base
diff --git a/docs/develop/cmem-client-api/repositories/base/abc.md b/docs/develop/cmem-client-api/repositories/base/abc.md
new file mode 100644
index 000000000..7e54f4340
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/base/abc.md
@@ -0,0 +1,133 @@
+# `abc` {#cmem_client.repositories.base.abc}
+
+Abstract base classes and configuration for CMEM repositories.
+
+This module provides the foundational classes for building repositories in the CMEM client:
+
+- RepositoryConfig: Configuration class that defines component type, fetch paths, and data adapters
+- Repository: Abstract base class implementing a lazy-loading, read-only, dictionary-like interface
+ for accessing CMEM resources with automatic data fetching and caching capabilities
+
+**Classes:**
+
+- [**Repository**](#cmem_client.repositories.base.abc.Repository) – ABC of a lazy loading, read-only, dictionary-mimicking repository
+- [**RepositoryConfig**](#cmem_client.repositories.base.abc.RepositoryConfig) – Configuration class for a read repository.
+
+**Attributes:**
+
+- [**ItemType**](#cmem_client.repositories.base.abc.ItemType) –
+- [**KeysViewType**](#cmem_client.repositories.base.abc.KeysViewType) –
+
+## `ItemType` {#cmem_client.repositories.base.abc.ItemType}
+
+```python
+ItemType = TypeVar('ItemType', bound=ReadRepositoryItem)
+```
+
+## `KeysViewType` {#cmem_client.repositories.base.abc.KeysViewType}
+
+```python
+KeysViewType = KeysView[str]
+```
+
+## `Repository` {#cmem_client.repositories.base.abc.Repository}
+
+```python
+Repository(client)
+```
+
+Bases: ABC, Mapping
+
+ABC of a lazy loading, read-only, dictionary-mimicking repository
+
+**Attributes:**
+
+- **_dict** (dict[str, [Repository[ItemType]](#cmem_client.repositories.base.abc.Repository[ItemType])]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_config** ([RepositoryConfig](#cmem_client.repositories.base.abc.RepositoryConfig)) – Describes which endpoint the repository fetches its data from.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.base.abc.Repository.fetch_data) – Fetch new data and update the repository
+- [**items**](#cmem_client.repositories.base.abc.Repository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.base.abc.Repository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.base.abc.Repository.values) – Get the values of the repository
+
+### `fetch_data` {#cmem_client.repositories.base.abc.Repository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch new data and update the repository
+
+### `items` {#cmem_client.repositories.base.abc.Repository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.base.abc.Repository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.base.abc.Repository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.base.abc.Repository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `RepositoryConfig` {#cmem_client.repositories.base.abc.RepositoryConfig}
+
+```python
+RepositoryConfig(component, fetch_data_path, fetch_data_adapter)
+```
+
+Configuration class for a read repository.
+
+This class defines the essential configuration parameters needed to set up
+a repository that can fetch data from CMEM components.
+
+**Attributes:**
+
+- [**component**](#cmem_client.repositories.base.abc.RepositoryConfig.component) (Literal['build', 'explore', 'keycloak']) – Which Corporate Memory API endpoint to address: ``build``, ``explore`` or ``keycloak``.
+- [**fetch_data_path**](#cmem_client.repositories.base.abc.RepositoryConfig.fetch_data_path) (str) – API path used to retrieve the repository data.
+- [**fetch_data_adapter**](#cmem_client.repositories.base.abc.RepositoryConfig.fetch_data_adapter) (TypeAdapter) – Pydantic TypeAdapter used to deserialize the API response.
+
+### `component` {#cmem_client.repositories.base.abc.RepositoryConfig.component}
+
+```python
+component: Literal['build', 'explore', 'keycloak'] = component
+```
+
+### `fetch_data_adapter` {#cmem_client.repositories.base.abc.RepositoryConfig.fetch_data_adapter}
+
+```python
+fetch_data_adapter: TypeAdapter = fetch_data_adapter
+```
+
+### `fetch_data_path` {#cmem_client.repositories.base.abc.RepositoryConfig.fetch_data_path}
+
+```python
+fetch_data_path: str = fetch_data_path
+```
+
diff --git a/docs/develop/cmem-client-api/repositories/base/paged_list.md b/docs/develop/cmem-client-api/repositories/base/paged_list.md
new file mode 100644
index 000000000..c97bed595
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/base/paged_list.md
@@ -0,0 +1,123 @@
+# `paged_list` {#cmem_client.repositories.base.paged_list}
+
+Repository implementation for paginated API endpoints.
+
+This module provides PagedListRepository, a repository implementation that
+handles paginated API responses commonly used in Corporate Memory's DataPlatform
+(explore) APIs. It automatically fetches all pages of results and provides
+a unified dictionary-like interface.
+
+The PagedListRepository is typically used for endpoints that return results
+in a paginated format with metadata about page size, number, and totals.
+
+**Classes:**
+
+- [**PageDescription**](#cmem_client.repositories.base.paged_list.PageDescription) – A description of a paged list.
+- [**PagedListRepository**](#cmem_client.repositories.base.paged_list.PagedListRepository) – Repository that uses a paged list endpoint.
+
+## `PageDescription` {#cmem_client.repositories.base.paged_list.PageDescription}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model)
+
+A description of a paged list.
+
+**Attributes:**
+
+- [**size**](#cmem_client.repositories.base.paged_list.PageDescription.size) (int) – Number of items requested per page. ``fetch_data()`` stops paging as soon as a page
+returns fewer items than this.
+- [**number**](#cmem_client.repositories.base.paged_list.PageDescription.number) (int) – Zero based index of this page.
+- [**total_elements**](#cmem_client.repositories.base.paged_list.PageDescription.total_elements) (int) – Total number of items across all pages, sent as ``totalElements``.
+- [**total_pages**](#cmem_client.repositories.base.paged_list.PageDescription.total_pages) (int) – Total number of pages, sent as ``totalPages``.
+
+### `model_config` {#cmem_client.repositories.base.paged_list.PageDescription.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `number` {#cmem_client.repositories.base.paged_list.PageDescription.number}
+
+```python
+number: int
+```
+
+### `size` {#cmem_client.repositories.base.paged_list.PageDescription.size}
+
+```python
+size: int
+```
+
+### `total_elements` {#cmem_client.repositories.base.paged_list.PageDescription.total_elements}
+
+```python
+total_elements: int = Field(alias='totalElements')
+```
+
+### `total_pages` {#cmem_client.repositories.base.paged_list.PageDescription.total_pages}
+
+```python
+total_pages: int = Field(alias='totalPages')
+```
+
+## `PagedListRepository` {#cmem_client.repositories.base.paged_list.PagedListRepository}
+
+Bases: [Repository](../../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository)
+
+Repository that uses a paged list endpoint.
+
+**Attributes:**
+
+- **_dict** (dict[str, [PagedListRepository[ItemType]](#cmem_client.repositories.base.paged_list.PagedListRepository[ItemType])]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_config** ([RepositoryConfig](../../repositories/base/abc.md#cmem_client.repositories.base.abc.RepositoryConfig)) – Describes which paged endpoint the repository fetches its data from.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.base.paged_list.PagedListRepository.fetch_data) – Fetch a paged list from a JSON endpoint via a type adapter.
+- [**items**](#cmem_client.repositories.base.paged_list.PagedListRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.base.paged_list.PagedListRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.base.paged_list.PagedListRepository.values) – Get the values of the repository
+
+### `fetch_data` {#cmem_client.repositories.base.paged_list.PagedListRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a paged list from a JSON endpoint via a type adapter.
+
+Use this method to fetch data if your result set is a pageable spring endpoint.
+
+### `items` {#cmem_client.repositories.base.paged_list.PagedListRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.base.paged_list.PagedListRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.base.paged_list.PagedListRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.base.paged_list.PagedListRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/base/plain_list.md b/docs/develop/cmem-client-api/repositories/base/plain_list.md
new file mode 100644
index 000000000..af623b6f3
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/base/plain_list.md
@@ -0,0 +1,78 @@
+# `plain_list` {#cmem_client.repositories.base.plain_list}
+
+Repository implementation for simple list API endpoints.
+
+This module provides PlainListRepository, a repository implementation for
+API endpoints that return a simple array of objects without pagination.
+It's commonly used with Corporate Memory's DataIntegration (build) APIs
+that provide straightforward list responses.
+
+The PlainListRepository fetches the entire list in a single request and
+provides dictionary-like access to the items by their ID.
+
+**Classes:**
+
+- [**PlainListRepository**](#cmem_client.repositories.base.plain_list.PlainListRepository) – Subclass of a ReadRepository that uses a plain list endpoint.
+
+## `PlainListRepository` {#cmem_client.repositories.base.plain_list.PlainListRepository}
+
+Bases: [Repository](../../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository)
+
+Subclass of a ReadRepository that uses a plain list endpoint.
+
+**Attributes:**
+
+- **_dict** (dict[str, [PlainListRepository[ItemType]](#cmem_client.repositories.base.plain_list.PlainListRepository[ItemType])]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_config** ([RepositoryConfig](../../repositories/base/abc.md#cmem_client.repositories.base.abc.RepositoryConfig)) – Describes which endpoint the repository fetches its data from.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.base.plain_list.PlainListRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**items**](#cmem_client.repositories.base.plain_list.PlainListRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.base.plain_list.PlainListRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.base.plain_list.PlainListRepository.values) – Get the values of the repository
+
+### `fetch_data` {#cmem_client.repositories.base.plain_list.PlainListRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `items` {#cmem_client.repositories.base.plain_list.PlainListRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.base.plain_list.PlainListRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.base.plain_list.PlainListRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.base.plain_list.PlainListRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/base/task_search.md b/docs/develop/cmem-client-api/repositories/base/task_search.md
new file mode 100644
index 000000000..46695eb89
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/base/task_search.md
@@ -0,0 +1,144 @@
+# `task_search` {#cmem_client.repositories.base.task_search}
+
+Repository implementation for Corporate Memory task search endpoints.
+
+This module provides TaskSearchRepository, a specialized repository that uses
+Corporate Memory's DataIntegration task search API to find and retrieve items.
+The search functionality allows for flexible querying with filters, facets,
+and text search capabilities.
+
+**Classes:**
+
+- [**TaskSearchRepository**](#cmem_client.repositories.base.task_search.TaskSearchRepository) – Subclass of a ReadRepository that uses the task search endpoint.
+- [**TaskSearchRepositoryConfig**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig) – Configuration class for a Task Search read repository
+
+## `TaskSearchRepository` {#cmem_client.repositories.base.task_search.TaskSearchRepository}
+
+Bases: [Repository](../../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository)
+
+Subclass of a ReadRepository that uses the task search endpoint.
+
+**Attributes:**
+
+- **_dict** (dict[str, [TaskSearchRepository[ItemType]](#cmem_client.repositories.base.task_search.TaskSearchRepository[ItemType])]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_config** ([TaskSearchRepositoryConfig](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig)) – Describes which task search endpoint to query and which task type to
+search for.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.base.task_search.TaskSearchRepository.fetch_data) – Fetch a list from the DI task search endpoint via a type adapter.
+- [**get_task**](#cmem_client.repositories.base.task_search.TaskSearchRepository.get_task) – Get full task details from the API.
+- [**items**](#cmem_client.repositories.base.task_search.TaskSearchRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.base.task_search.TaskSearchRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.base.task_search.TaskSearchRepository.values) – Get the values of the repository
+
+### `fetch_data` {#cmem_client.repositories.base.task_search.TaskSearchRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a list from the DI task search endpoint via a type adapter.
+
+### `get_task` {#cmem_client.repositories.base.task_search.TaskSearchRepository.get_task}
+
+```python
+get_task(project_id, task_id, with_labels=True)
+```
+
+Get full task details from the API.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **task_id** (str) – The task ID.
+- **with_labels** (bool) – Whether to include labels in the response.
+
+**Returns:**
+
+- [TaskResponse](../../models/task.md#cmem_client.models.task.TaskResponse) – The full task details as a TaskResponse model.
+
+### `items` {#cmem_client.repositories.base.task_search.TaskSearchRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.base.task_search.TaskSearchRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.base.task_search.TaskSearchRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.base.task_search.TaskSearchRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `TaskSearchRepositoryConfig` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig}
+
+```python
+TaskSearchRepositoryConfig(fetch_data_adapter, item_type, component='build', fetch_data_path='/api/workspace/searchItems', facets=None)
+```
+
+Bases: [RepositoryConfig](../../repositories/base/abc.md#cmem_client.repositories.base.abc.RepositoryConfig)
+
+Configuration class for a Task Search read repository
+
+**Attributes:**
+
+- [**component**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.component) (Literal['build', 'explore']) – Which Corporate Memory API endpoint to address: ``build`` or ``explore``.
+- [**fetch_data_path**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.fetch_data_path) (str) – API path of the task search endpoint.
+- [**fetch_data_adapter**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.fetch_data_adapter) (TypeAdapter) – Pydantic TypeAdapter used to deserialize the search result set.
+- [**item_type**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.item_type) (str) – Task type to search for, sent as ``itemType`` in the search request
+(e.g. ``dataset`` or ``workflow``).
+- [**facets**](#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.facets) (list[dict[str, Any]] | None) – Facet filters sent as ``facets`` in the search request. If None, no facet
+filtering is applied.
+
+### `component` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.component}
+
+```python
+component: Literal['build', 'explore']
+```
+
+### `facets` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.facets}
+
+```python
+facets: list[dict[str, Any]] | None = facets
+```
+
+### `fetch_data_adapter` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.fetch_data_adapter}
+
+```python
+fetch_data_adapter: TypeAdapter
+```
+
+### `fetch_data_path` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.fetch_data_path}
+
+```python
+fetch_data_path: str
+```
+
+### `item_type` {#cmem_client.repositories.base.task_search.TaskSearchRepositoryConfig.item_type}
+
+```python
+item_type: str = item_type
+```
+
diff --git a/docs/develop/cmem-client-api/repositories/client_accounts.md b/docs/develop/cmem-client-api/repositories/client_accounts.md
new file mode 100644
index 000000000..eebbb4006
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/client_accounts.md
@@ -0,0 +1,131 @@
+# `client_accounts` {#cmem_client.repositories.client_accounts}
+
+Repository for the Keycloak OpenID Connect client accounts of a deployment.
+
+Provides ClientAccountRepository for listing the client accounts (service accounts)
+which can authenticate against Corporate Memory, and for reading or rotating their
+secret.
+
+**Examples:**
+
+List the client accounts and inspect one:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> list(client.client_accounts)
+>>> account = client.client_accounts["cmem-service-account"]
+```
+
+Read the current secret of an account:
+
+```pycon
+>>> client.client_accounts.get_secret(account.id)
+```
+
+``generate_secret()`` rotates it and returns the new one. It is described rather
+than shown running, because it invalidates the secret in use: rotating the account
+a deployment authenticates with locks out everything configured with the old value,
+and unlike the workspace and the store, Keycloak is not restored afterwards.
+
+**Classes:**
+
+- [**ClientAccountRepository**](#cmem_client.repositories.client_accounts.ClientAccountRepository) – Repository for Keycloak OpenID Connect client accounts.
+
+## `ClientAccountRepository` {#cmem_client.repositories.client_accounts.ClientAccountRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository)
+
+Repository for Keycloak OpenID Connect client accounts.
+
+Lists clients in the Corporate Memory Keycloak realm that use the
+``openid-connect`` protocol and have a client secret configured.
+Clients are keyed by their ``clientId``.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.client_accounts.ClientAccountRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**generate_secret**](#cmem_client.repositories.client_accounts.ClientAccountRepository.generate_secret) – Generate and return a new secret for a client.
+- [**get_secret**](#cmem_client.repositories.client_accounts.ClientAccountRepository.get_secret) – Get the current secret for a client.
+- [**items**](#cmem_client.repositories.client_accounts.ClientAccountRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.client_accounts.ClientAccountRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.client_accounts.ClientAccountRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.client_accounts.ClientAccountRepository.logger) (Logger) – Gets the client logger
+
+### `fetch_data` {#cmem_client.repositories.client_accounts.ClientAccountRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `generate_secret` {#cmem_client.repositories.client_accounts.ClientAccountRepository.generate_secret}
+
+```python
+generate_secret(client_uuid)
+```
+
+Generate and return a new secret for a client.
+
+**Parameters:**
+
+- **client_uuid** (str) – The Keycloak UUID of the client (not the clientId).
+
+**Returns:**
+
+- str – The newly generated client secret value.
+
+### `get_secret` {#cmem_client.repositories.client_accounts.ClientAccountRepository.get_secret}
+
+```python
+get_secret(client_uuid)
+```
+
+Get the current secret for a client.
+
+**Parameters:**
+
+- **client_uuid** (str) – The Keycloak UUID of the client (not the clientId).
+
+**Returns:**
+
+- str – The current client secret value.
+
+### `items` {#cmem_client.repositories.client_accounts.ClientAccountRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.client_accounts.ClientAccountRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.client_accounts.ClientAccountRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.client_accounts.ClientAccountRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/datasets.md b/docs/develop/cmem-client-api/repositories/datasets.md
new file mode 100644
index 000000000..806781bfd
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/datasets.md
@@ -0,0 +1,312 @@
+# `datasets` {#cmem_client.repositories.datasets}
+
+Repository for managing datasets in Corporate Memory.
+
+Provides DatasetsRepository for listing datasets across projects and for creating,
+reading, updating and deleting a dataset inside a project. Datasets are addressed by
+their project and dataset ID, and the available dataset types are described by the
+dataset plugins.
+
+**Examples:**
+
+Inspect the dataset types the deployment offers:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> sorted(client.datasets.get_dataset_plugins())
+>>> client.datasets.get_plugin_schema("csv")
+```
+
+Create a dataset in a project and read it back:
+
+```pycon
+>>> from cmem_client.models.dataset import Dataset
+>>> client.datasets.create_item(
+... Dataset(
+... id="customers",
+... project_id="my-project",
+... data={"type": "csv", "parameters": {"file": "customers.csv"}},
+... )
+... )
+>>> client.datasets.get_item("my-project", "customers")
+```
+
+**Classes:**
+
+- [**DatasetDeleteConfig**](#cmem_client.repositories.datasets.DatasetDeleteConfig) – Dataset deletion configuration.
+- [**DatasetsRepository**](#cmem_client.repositories.datasets.DatasetsRepository) – Repository for datasets.
+
+## `DatasetDeleteConfig` {#cmem_client.repositories.datasets.DatasetDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Dataset deletion configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `DatasetsRepository` {#cmem_client.repositories.datasets.DatasetsRepository}
+
+Bases: [TaskSearchRepository](../repositories/base/task_search.md#cmem_client.repositories.base.task_search.TaskSearchRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol)
+
+Repository for datasets.
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.datasets.DatasetsRepository.create_item) – Create a new dataset in a project.
+- [**delete_all**](#cmem_client.repositories.datasets.DatasetsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.datasets.DatasetsRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.datasets.DatasetsRepository.fetch_data) – Fetch a list from the DI task search endpoint via a type adapter.
+- [**get_dataset_plugins**](#cmem_client.repositories.datasets.DatasetsRepository.get_dataset_plugins) – Get all available dataset plugins.
+- [**get_file_resource**](#cmem_client.repositories.datasets.DatasetsRepository.get_file_resource) – Return a streaming context manager for downloading a file resource.
+- [**get_item**](#cmem_client.repositories.datasets.DatasetsRepository.get_item) – Get full dataset details including configuration parameters.
+- [**get_plugin_schema**](#cmem_client.repositories.datasets.DatasetsRepository.get_plugin_schema) – Get the schema description of a specific task plugin.
+- [**get_task**](#cmem_client.repositories.datasets.DatasetsRepository.get_task) – Get full task details from the API.
+- [**items**](#cmem_client.repositories.datasets.DatasetsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.datasets.DatasetsRepository.keys) – Get the keys of the repository
+- [**post_file_resource**](#cmem_client.repositories.datasets.DatasetsRepository.post_file_resource) – Upload a file as the resource of a dataset.
+- [**update_item**](#cmem_client.repositories.datasets.DatasetsRepository.update_item) – Update the configuration of an existing dataset.
+- [**values**](#cmem_client.repositories.datasets.DatasetsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.datasets.DatasetsRepository.logger) (Logger) – Gets the client logger
+
+### `create_item` {#cmem_client.repositories.datasets.DatasetsRepository.create_item}
+
+```python
+create_item(item)
+```
+
+Create a new dataset in a project.
+
+**Parameters:**
+
+- **item** ([Dataset](../models/dataset.md#cmem_client.models.dataset.Dataset)) – Dataset model with ``project_id``, ``id``, ``data`` (type, parameters,
+read_only, uri_property) and optionally ``metadata``.
+
+**Returns:**
+
+- [Dataset](../models/dataset.md#cmem_client.models.dataset.Dataset) – Created dataset as a validated Dataset model.
+
+**Raises:**
+
+- HTTPStatusError – If the creation request fails.
+
+### `delete_all` {#cmem_client.repositories.datasets.DatasetsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.datasets.DatasetsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.datasets.DatasetsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a list from the DI task search endpoint via a type adapter.
+
+### `get_dataset_plugins` {#cmem_client.repositories.datasets.DatasetsRepository.get_dataset_plugins}
+
+```python
+get_dataset_plugins()
+```
+
+Get all available dataset plugins.
+
+**Returns:**
+
+- dict[str, [DatasetPlugin](../models/dataset.md#cmem_client.models.dataset.DatasetPlugin)] – Dictionary mapping plugin IDs to their plugin descriptions.
+
+**Raises:**
+
+- HTTPStatusError – If the request fails.
+
+### `get_file_resource` {#cmem_client.repositories.datasets.DatasetsRepository.get_file_resource}
+
+```python
+get_file_resource(project_id, file_name)
+```
+
+Return a streaming context manager for downloading a file resource.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **file_name** (str) – The file resource name or path within the project.
+
+**Returns:**
+
+- AbstractContextManager[Response] – A context manager that yields an ``httpx.Response`` with streaming access.
+- AbstractContextManager[Response] – Use ``response.iter_bytes()`` inside the ``with`` block to read chunks.
+
+
+Example
+
+>>> from pathlib import Path
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> client.files.import_item(
+... path=Path("customers.csv"), key="my-project:customers.csv"
+... )
+>>> with client.datasets.get_file_resource("my-project", "customers.csv") as response:
+... response.raise_for_status()
+... with Path("copy.csv").open("wb") as file:
+... for chunk in response.iter_bytes():
+... file.write(chunk)
+>>> client.files.delete_item("my-project:customers.csv")
+
+
+
+### `get_item` {#cmem_client.repositories.datasets.DatasetsRepository.get_item}
+
+```python
+get_item(project_id, dataset_id)
+```
+
+Get full dataset details including configuration parameters.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **dataset_id** (str) – The dataset ID.
+
+**Returns:**
+
+- [Dataset](../models/dataset.md#cmem_client.models.dataset.Dataset) – Dataset model with full details including parameters and metadata.
+
+**Raises:**
+
+- HTTPStatusError – If the dataset is not found or request fails.
+
+### `get_plugin_schema` {#cmem_client.repositories.datasets.DatasetsRepository.get_plugin_schema}
+
+```python
+get_plugin_schema(plugin_id)
+```
+
+Get the schema description of a specific task plugin.
+
+**Parameters:**
+
+- **plugin_id** (str) – The plugin ID (e.g. ``csv``, ``json``, ``eccencaDataPlatform``).
+
+**Returns:**
+
+- [DatasetPluginSchema](../models/dataset.md#cmem_client.models.dataset.DatasetPluginSchema) – Plugin schema including ``properties`` and ``required`` fields.
+
+**Raises:**
+
+- HTTPStatusError – If the plugin is not found or the request fails.
+
+### `get_task` {#cmem_client.repositories.datasets.DatasetsRepository.get_task}
+
+```python
+get_task(project_id, task_id, with_labels=True)
+```
+
+Get full task details from the API.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **task_id** (str) – The task ID.
+- **with_labels** (bool) – Whether to include labels in the response.
+
+**Returns:**
+
+- [TaskResponse](../models/task.md#cmem_client.models.task.TaskResponse) – The full task details as a TaskResponse model.
+
+### `items` {#cmem_client.repositories.datasets.DatasetsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.datasets.DatasetsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.datasets.DatasetsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `post_file_resource` {#cmem_client.repositories.datasets.DatasetsRepository.post_file_resource}
+
+```python
+post_file_resource(project_id, dataset_id, file_resource)
+```
+
+Upload a file as the resource of a dataset.
+
+If the dataset resource already exists, uploading a new file replaces it.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **dataset_id** (str) – The dataset ID.
+- **file_resource** (BinaryIO) – An open binary file object to upload.
+
+**Raises:**
+
+- HTTPStatusError – If the upload request fails.
+
+### `update_item` {#cmem_client.repositories.datasets.DatasetsRepository.update_item}
+
+```python
+update_item(item)
+```
+
+Update the configuration of an existing dataset.
+
+**Parameters:**
+
+- **item** ([Dataset](../models/dataset.md#cmem_client.models.dataset.Dataset)) – Dataset model with ``project_id``, ``id``, and updated
+``data`` (type, parameters, read_only, uri_property) and ``metadata``.
+
+**Raises:**
+
+- HTTPStatusError – If the update request fails.
+
+### `values` {#cmem_client.repositories.datasets.DatasetsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/files.md b/docs/develop/cmem-client-api/repositories/files.md
new file mode 100644
index 000000000..d92b52984
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/files.md
@@ -0,0 +1,271 @@
+# `files` {#cmem_client.repositories.files}
+
+Repository for the file resources of DataIntegration projects.
+
+Provides FilesRepository for uploading, reading, exporting and deleting the files of a
+project. Items are keyed by the composite key ``project_id:file_path``, so a single
+repository spans the files of all projects.
+
+**Examples:**
+
+Upload a local file into a project and read it back:
+
+```pycon
+>>> from pathlib import Path
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> client.files.import_item(
+... path=Path("customers.csv"), key="my-project:customers.csv"
+... )
+>>> client.files.read("my-project:customers.csv")
+```
+
+List the files of a single project and inspect one of them:
+
+```pycon
+>>> for resource in client.files.get_resources("my-project"):
+... print(resource.name)
+>>> client.files.delete_item("my-project:customers.csv")
+```
+
+**Classes:**
+
+- [**FilesDeleteConfig**](#cmem_client.repositories.files.FilesDeleteConfig) – Files Delete Configuration.
+- [**FilesExportConfig**](#cmem_client.repositories.files.FilesExportConfig) – Files Export Configuration.
+- [**FilesImportConfig**](#cmem_client.repositories.files.FilesImportConfig) – Files Import Configuration.
+- [**FilesRepository**](#cmem_client.repositories.files.FilesRepository) – Repository for files
+
+## `FilesDeleteConfig` {#cmem_client.repositories.files.FilesDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Files Delete Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `FilesExportConfig` {#cmem_client.repositories.files.FilesExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Files Export Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `FilesImportConfig` {#cmem_client.repositories.files.FilesImportConfig}
+
+Bases: [ImportConfig](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConfig)
+
+Files Import Configuration.
+
+**Attributes:**
+
+- [**use_archive_handler**](#cmem_client.repositories.files.FilesImportConfig.use_archive_handler) (bool) – Defaults to False here, unlike the base class, so a path is
+imported as a single file instead of being unpacked by the ArchiveHandler.
+- [**remote_file_url**](#cmem_client.repositories.files.FilesImportConfig.remote_file_url) (str | None) – URL to stream the file content from instead of reading it from a local
+path. If set, the path argument may be omitted.
+
+### `model_config` {#cmem_client.repositories.files.FilesImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `remote_file_url` {#cmem_client.repositories.files.FilesImportConfig.remote_file_url}
+
+```python
+remote_file_url: str | None = None
+```
+
+### `use_archive_handler` {#cmem_client.repositories.files.FilesImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = False
+```
+
+## `FilesRepository` {#cmem_client.repositories.files.FilesRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [ImportItemProtocol](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportItemProtocol), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol)
+
+Repository for files
+
+**Functions:**
+
+- [**delete_all**](#cmem_client.repositories.files.FilesRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.files.FilesRepository.delete_item) – Delete an item from the repository
+- [**export_item**](#cmem_client.repositories.files.FilesRepository.export_item) – Export an item from the repository to a file path.
+- [**fetch_data**](#cmem_client.repositories.files.FilesRepository.fetch_data) – Fetch all file resources from all projects.
+- [**get_resource_metadata**](#cmem_client.repositories.files.FilesRepository.get_resource_metadata) – Retrieve metadata of a single resource
+- [**get_resource_usage**](#cmem_client.repositories.files.FilesRepository.get_resource_usage) – Retrieve usage of a single resource
+- [**get_resources**](#cmem_client.repositories.files.FilesRepository.get_resources) – Fetch the list of file resources for a specific project.
+- [**import_item**](#cmem_client.repositories.files.FilesRepository.import_item) – Import an exported file to the repository
+- [**items**](#cmem_client.repositories.files.FilesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.files.FilesRepository.keys) – Get the keys of the repository
+- [**read**](#cmem_client.repositories.files.FilesRepository.read) – Read the content of a file into memory.
+- [**values**](#cmem_client.repositories.files.FilesRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.files.FilesRepository.logger) (Logger) – Gets the client logger
+
+### `delete_all` {#cmem_client.repositories.files.FilesRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.files.FilesRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `export_item` {#cmem_client.repositories.files.FilesRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `fetch_data` {#cmem_client.repositories.files.FilesRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch all file resources from all projects.
+
+### `get_resource_metadata` {#cmem_client.repositories.files.FilesRepository.get_resource_metadata}
+
+```python
+get_resource_metadata(resource)
+```
+
+Retrieve metadata of a single resource
+
+### `get_resource_usage` {#cmem_client.repositories.files.FilesRepository.get_resource_usage}
+
+```python
+get_resource_usage(resource)
+```
+
+Retrieve usage of a single resource
+
+### `get_resources` {#cmem_client.repositories.files.FilesRepository.get_resources}
+
+```python
+get_resources(project_id)
+```
+
+Fetch the list of file resources for a specific project.
+
+### `import_item` {#cmem_client.repositories.files.FilesRepository.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `items` {#cmem_client.repositories.files.FilesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.files.FilesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.files.FilesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `read` {#cmem_client.repositories.files.FilesRepository.read}
+
+```python
+read(key)
+```
+
+Read the content of a file into memory.
+
+**Parameters:**
+
+- **key** (str) – Composite key in format 'project_id:file_path'
+
+**Returns:**
+
+- bytes – The raw content of the file.
+
+**Raises:**
+
+- [FilesReadError](../exceptions.md#cmem_client.exceptions.FilesReadError) – If the key is malformed or the request fails.
+- [FilesNotFoundError](../exceptions.md#cmem_client.exceptions.FilesNotFoundError) – If the file does not exist in the project.
+
+### `values` {#cmem_client.repositories.files.FilesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/graph_imports.md b/docs/develop/cmem-client-api/repositories/graph_imports.md
new file mode 100644
index 000000000..a0c1dbbe5
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/graph_imports.md
@@ -0,0 +1,233 @@
+# `graph_imports` {#cmem_client.repositories.graph_imports}
+
+Repository for the ``owl:imports`` relations between named graphs.
+
+Provides GraphImportsRepository for adding and removing an import statement between two
+graphs, and for resolving the resulting import tree of a graph. Items are keyed by
+``from_graph::::to_graph``.
+
+**Examples:**
+
+Declare that one graph imports another and remove the relation again:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> from cmem_client.models.graph_import import GraphImport
+>>> client = Client.from_env()
+>>> client.graph_imports.create_item(
+... GraphImport(
+... from_graph="https://example.org/data/",
+... to_graph="https://example.org/vocab/",
+... )
+... )
+>>> client.graph_imports.delete_item(
+... "https://example.org/data/::::https://example.org/vocab/"
+... )
+```
+
+Resolve what a graph pulls in, directly and transitively:
+
+```pycon
+>>> client.graph_imports.get_transitive_imports("https://example.org/data/")
+>>> client.graph_imports.get_import_tree("https://example.org/data/")
+```
+
+**Classes:**
+
+- [**GraphImportsCreateConfig**](#cmem_client.repositories.graph_imports.GraphImportsCreateConfig) – Graph Imports creation configuration
+- [**GraphImportsDeleteConfig**](#cmem_client.repositories.graph_imports.GraphImportsDeleteConfig) – Graph Imports deletion configuration.
+- [**GraphImportsRepository**](#cmem_client.repositories.graph_imports.GraphImportsRepository) – Repository for managing Graph Imports
+
+**Attributes:**
+
+- [**GRAPH_IMPORTS_CREATE_SPARQL**](#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_CREATE_SPARQL) –
+- [**GRAPH_IMPORTS_DELETE_SPARQL**](#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_DELETE_SPARQL) –
+- [**GRAPH_IMPORTS_LIST_SPARQL**](#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_LIST_SPARQL) –
+
+## `GRAPH_IMPORTS_CREATE_SPARQL` {#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_CREATE_SPARQL}
+
+```python
+GRAPH_IMPORTS_CREATE_SPARQL = '\nPREFIX owl: \n\nINSERT DATA {{\n GRAPH <{from_graph}> {{\n <{from_graph}> owl:imports <{to_graph}> .\n }}\n}}\n'
+```
+
+## `GRAPH_IMPORTS_DELETE_SPARQL` {#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_DELETE_SPARQL}
+
+```python
+GRAPH_IMPORTS_DELETE_SPARQL = '\nPREFIX owl: \n\nDELETE DATA {{\n GRAPH <{from_graph}> {{\n <{from_graph}> owl:imports <{to_graph}> .\n }}\n}}\n'
+```
+
+## `GRAPH_IMPORTS_LIST_SPARQL` {#cmem_client.repositories.graph_imports.GRAPH_IMPORTS_LIST_SPARQL}
+
+```python
+GRAPH_IMPORTS_LIST_SPARQL = '\nPREFIX owl: \n\nSELECT ?from_graph ?to_graph\nWHERE\n{\n GRAPH ?from_graph {\n ?from_graph owl:imports ?to_graph\n }\n}\n'
+```
+
+## `GraphImportsCreateConfig` {#cmem_client.repositories.graph_imports.GraphImportsCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Graph Imports creation configuration
+
+**Attributes:**
+
+- **model_config** –
+
+## `GraphImportsDeleteConfig` {#cmem_client.repositories.graph_imports.GraphImportsDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Graph Imports deletion configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `GraphImportsRepository` {#cmem_client.repositories.graph_imports.GraphImportsRepository}
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol)
+
+Repository for managing Graph Imports
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.graph_imports.GraphImportsRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.graph_imports.GraphImportsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.graph_imports.GraphImportsRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.graph_imports.GraphImportsRepository.fetch_data) – Fetch new data and update the repository
+- [**get_import_tree**](#cmem_client.repositories.graph_imports.GraphImportsRepository.get_import_tree) – Get the hierarchical import tree structure for a graph.
+- [**get_transitive_imports**](#cmem_client.repositories.graph_imports.GraphImportsRepository.get_transitive_imports) – Get the list of graphs imported by a graph, resolved transitively.
+- [**items**](#cmem_client.repositories.graph_imports.GraphImportsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.graph_imports.GraphImportsRepository.keys) – Get the keys of the repository
+- [**raise_modification_error**](#cmem_client.repositories.graph_imports.GraphImportsRepository.raise_modification_error) – Raise an exception if needed
+- [**values**](#cmem_client.repositories.graph_imports.GraphImportsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.graph_imports.GraphImportsRepository.logger) (Logger) – Gets the client logger
+
+### `create_item` {#cmem_client.repositories.graph_imports.GraphImportsRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.graph_imports.GraphImportsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.graph_imports.GraphImportsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.graph_imports.GraphImportsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch new data and update the repository
+
+### `get_import_tree` {#cmem_client.repositories.graph_imports.GraphImportsRepository.get_import_tree}
+
+```python
+get_import_tree(graph_iri)
+```
+
+Get the hierarchical import tree structure for a graph.
+
+**Parameters:**
+
+- **graph_iri** (str) – The IRI of the graph to retrieve the import tree for.
+
+**Returns:**
+
+- [GraphImportTree](../models/graph_import.md#cmem_client.models.graph_import.GraphImportTree) – A GraphImportTree with tree and ignored dicts mapping graph IRIs to lists of IRIs.
+
+### `get_transitive_imports` {#cmem_client.repositories.graph_imports.GraphImportsRepository.get_transitive_imports}
+
+```python
+get_transitive_imports(graph_iri)
+```
+
+Get the list of graphs imported by a graph, resolved transitively.
+
+**Parameters:**
+
+- **graph_iri** (str) – The IRI of the graph to retrieve transitive imports for.
+
+**Returns:**
+
+- list[str] – A flat list of graph IRIs that are transitively imported by graph_iri.
+
+### `items` {#cmem_client.repositories.graph_imports.GraphImportsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.graph_imports.GraphImportsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.graph_imports.GraphImportsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.graph_imports.GraphImportsRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `values` {#cmem_client.repositories.graph_imports.GraphImportsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/graph_insights.md b/docs/develop/cmem-client-api/repositories/graph_insights.md
new file mode 100644
index 000000000..f04d26e61
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/graph_insights.md
@@ -0,0 +1,229 @@
+# `graph_insights` {#cmem_client.repositories.graph_insights}
+
+Repository for the Graph Insights snapshots of Corporate Memory.
+
+Provides GraphInsightsRepository for creating statistics snapshots of a graph, polling
+their computation and deleting them. Graph Insights is an optional extension, so check
+that it is enabled before using it.
+
+**Examples:**
+
+Check whether the extension is available, then create a snapshot:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> client.graph_insights.is_available()
+>>> client.graph_insights.create("https://ns.eccenca.com/data/config/")
+```
+
+Read the snapshots and drop them again:
+
+```pycon
+>>> list(client.graph_insights)
+```
+
+**Classes:**
+
+- [**GraphInsightDeleteConfig**](#cmem_client.repositories.graph_insights.GraphInsightDeleteConfig) – Graph Insight Snapshot Delete Configuration.
+- [**GraphInsightUpdateConfig**](#cmem_client.repositories.graph_insights.GraphInsightUpdateConfig) – Graph Insight Snapshot Update Configuration.
+- [**GraphInsightsRepository**](#cmem_client.repositories.graph_insights.GraphInsightsRepository) – Repository for the semspect Graph Insights extension.
+
+## `GraphInsightDeleteConfig` {#cmem_client.repositories.graph_insights.GraphInsightDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Graph Insight Snapshot Delete Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `GraphInsightUpdateConfig` {#cmem_client.repositories.graph_insights.GraphInsightUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Graph Insight Snapshot Update Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `GraphInsightsRepository` {#cmem_client.repositories.graph_insights.GraphInsightsRepository}
+
+```python
+GraphInsightsRepository(client)
+```
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository)[[GraphInsightSnapshot](../models/graph_insight.md#cmem_client.models.graph_insight.GraphInsightSnapshot)], [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for the semspect Graph Insights extension.
+
+Does not auto-fetch on init because semspect is optional and may not be installed.
+Call fetch_data() explicitly before iterating snapshots.
+
+**Functions:**
+
+- [**create**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.create) – Create or update a snapshot for the given graph IRI.
+- [**delete_all**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.delete_all) – Delete all snapshots via the bulk DELETE endpoint.
+- [**delete_item**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.fetch_data) – Fetch all snapshots from the semspect status endpoint.
+- [**get_status**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.get_status) – Fetch current status of a single snapshot.
+- [**is_available**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.is_available) – Return True if the semspect extension is active and the user is allowed.
+- [**items**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.keys) – Get the keys of the repository
+- [**update_item**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.values) – Get the values of the repository
+- [**wait_for_completion**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.wait_for_completion) – Poll until snapshot status is no longer ONGOING.
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.graph_insights.GraphInsightsRepository.logger) (Logger) – Gets the client logger
+
+### `create` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.create}
+
+```python
+create(iri)
+```
+
+Create or update a snapshot for the given graph IRI.
+
+**Parameters:**
+
+- **iri** (str) – The graph IRI to create a snapshot for.
+
+**Returns:**
+
+- str – The snapshot ID returned by the server.
+
+### `delete_all` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all snapshots via the bulk DELETE endpoint.
+
+### `delete_item` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch all snapshots from the semspect status endpoint.
+
+### `get_status` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.get_status}
+
+```python
+get_status(snapshot_id)
+```
+
+Fetch current status of a single snapshot.
+
+**Parameters:**
+
+- **snapshot_id** (str) – The snapshot database ID.
+
+**Returns:**
+
+- [GraphInsightSnapshot](../models/graph_insight.md#cmem_client.models.graph_insight.GraphInsightSnapshot) – A GraphInsightSnapshot with current status fields.
+
+### `is_available` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.is_available}
+
+```python
+is_available()
+```
+
+Return True if the semspect extension is active and the user is allowed.
+
+### `items` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `update_item` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+### `wait_for_completion` {#cmem_client.repositories.graph_insights.GraphInsightsRepository.wait_for_completion}
+
+```python
+wait_for_completion(snapshot_id, timeout=120.0, poll_interval=2.0)
+```
+
+Poll until snapshot status is no longer ONGOING.
+
+**Parameters:**
+
+- **snapshot_id** (str) – The snapshot database ID to wait for.
+- **timeout** (float) – Maximum seconds to wait before raising TimeoutError.
+- **poll_interval** (float) – Seconds between status checks.
+
+**Returns:**
+
+- [GraphInsightSnapshot](../models/graph_insight.md#cmem_client.models.graph_insight.GraphInsightSnapshot) – The snapshot once it reaches a terminal state.
+
+**Raises:**
+
+- TimeoutError – if the snapshot is still ONGOING after timeout seconds.
+
diff --git a/docs/develop/cmem-client-api/repositories/graphs.md b/docs/develop/cmem-client-api/repositories/graphs.md
new file mode 100644
index 000000000..b20dd2cec
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/graphs.md
@@ -0,0 +1,463 @@
+# `graphs` {#cmem_client.repositories.graphs}
+
+Repository for managing named graphs in Corporate Memory.
+
+Provides GraphRepository class for managing RDF named graphs with operations for
+deletion and import. Supports multiple RDF formats (Turtle, RDF/XML, JSON-LD, N-Triples)
+with automatic file type detection.
+
+**Examples:**
+
+List the graphs of a deployment and look one up:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for iri in client.graphs:
+... print(iri, client.graphs[iri].writeable)
+```
+
+Import a Turtle file into a graph, export it again and delete it:
+
+```pycon
+>>> from pathlib import Path
+>>> from cmem_client.repositories.graphs import GraphExportConfig, GraphImportConfig
+>>> from cmem_client.repositories.protocols.import_item import ImportConflictPolicy
+>>> client.graphs.import_item(
+... path=Path("vocabulary.ttl"),
+... key="https://example.org/vocab/",
+... on_conflict=ImportConflictPolicy.REPLACE,
+... configuration=GraphImportConfig(register_as_vocabulary=True),
+... )
+>>> client.graphs.export_item(
+... key="https://example.org/vocab/",
+... path=Path("export.ttl"),
+... configuration=GraphExportConfig(resolve_owl_imports=True),
+... )
+>>> client.graphs.delete_item("https://example.org/vocab/")
+```
+
+Detect the serialization of a file before importing it:
+
+```pycon
+>>> client.graphs.guess_file_type(path=Path("vocabulary.ttl")).mime_type
+```
+
+**Classes:**
+
+- [**GraphDeleteConfig**](#cmem_client.repositories.graphs.GraphDeleteConfig) – Graph Delete Configuration.
+- [**GraphExportConfig**](#cmem_client.repositories.graphs.GraphExportConfig) – Graph Export Configuration.
+- [**GraphFileSerialization**](#cmem_client.repositories.graphs.GraphFileSerialization) – Supported graph format description
+- [**GraphImportConfig**](#cmem_client.repositories.graphs.GraphImportConfig) – Graph Import Configuration.
+- [**GraphsRepository**](#cmem_client.repositories.graphs.GraphsRepository) – Repository for graphs.
+
+**Attributes:**
+
+- [**GET_ONTOLOGY_IRI_QUERY**](#cmem_client.repositories.graphs.GET_ONTOLOGY_IRI_QUERY) –
+- [**GET_PREFIX_DECLARATION**](#cmem_client.repositories.graphs.GET_PREFIX_DECLARATION) –
+- [**INSERT_CATALOG_ENTRY**](#cmem_client.repositories.graphs.INSERT_CATALOG_ENTRY) –
+- [**VOCABULARY_CATALOG_GRAPH**](#cmem_client.repositories.graphs.VOCABULARY_CATALOG_GRAPH) – IRI of the (optional, legacy) vocabulary catalog graph.
+
+## `GET_ONTOLOGY_IRI_QUERY` {#cmem_client.repositories.graphs.GET_ONTOLOGY_IRI_QUERY}
+
+```python
+GET_ONTOLOGY_IRI_QUERY = '\nPREFIX owl: \nSELECT DISTINCT ?iri\nWHERE {\n ?iri a owl:Ontology;\n}\n'
+```
+
+## `GET_PREFIX_DECLARATION` {#cmem_client.repositories.graphs.GET_PREFIX_DECLARATION}
+
+```python
+GET_PREFIX_DECLARATION = '\nPREFIX owl: \nPREFIX vann: \nSELECT DISTINCT ?prefix ?namespace\nWHERE {{\n <{ontology_iri}> a owl:Ontology;\n vann:preferredNamespacePrefix ?prefix;\n vann:preferredNamespaceUri ?namespace.\n}}\n'
+```
+
+## `GraphDeleteConfig` {#cmem_client.repositories.graphs.GraphDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Graph Delete Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `GraphExportConfig` {#cmem_client.repositories.graphs.GraphExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Graph Export Configuration.
+
+**Attributes:**
+
+- [**serialization**](#cmem_client.repositories.graphs.GraphExportConfig.serialization) ([GraphFileSerialization](#cmem_client.repositories.graphs.GraphFileSerialization) | None) – RDF serialization to request for the export. If None, the server default
+is used. Export fails if the given format does not support export.
+- [**resolve_owl_imports**](#cmem_client.repositories.graphs.GraphExportConfig.resolve_owl_imports) (bool) – If True, resolve ``owl:imports`` and include the imported graphs in
+the export. Sent as ``owlImportsResolution``.
+
+### `model_config` {#cmem_client.repositories.graphs.GraphExportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `resolve_owl_imports` {#cmem_client.repositories.graphs.GraphExportConfig.resolve_owl_imports}
+
+```python
+resolve_owl_imports: bool = False
+```
+
+### `serialization` {#cmem_client.repositories.graphs.GraphExportConfig.serialization}
+
+```python
+serialization: GraphFileSerialization | None = None
+```
+
+## `GraphFileSerialization` {#cmem_client.repositories.graphs.GraphFileSerialization}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Supported graph format description
+
+**Attributes:**
+
+- [**mime_type**](#cmem_client.repositories.graphs.GraphFileSerialization.mime_type) (str) – MIME type of the serialization, sent as ``Content-Type`` on import and as
+``Accept`` on export.
+- [**file_extensions**](#cmem_client.repositories.graphs.GraphFileSerialization.file_extensions) (list[str]) – File extensions mapped to this serialization, used by
+``guess_file_type()`` to detect the format of a path.
+- [**encoding**](#cmem_client.repositories.graphs.GraphFileSerialization.encoding) (str | None) – Content encoding of the file, sent as ``Content-Encoding`` on import when set.
+- [**known_not_supporters**](#cmem_client.repositories.graphs.GraphFileSerialization.known_not_supporters) (list[str]) – Store types known not to support this serialization, matched against
+the type reported by the graph store. The client does not enforce this; the test suite
+uses it to skip combinations a store cannot handle.
+- [**export_supported**](#cmem_client.repositories.graphs.GraphFileSerialization.export_supported) (bool) – Whether graphs can be exported in this serialization.
+- [**import_supported**](#cmem_client.repositories.graphs.GraphFileSerialization.import_supported) (bool) – Whether graphs can be imported from this serialization.
+
+### `encoding` {#cmem_client.repositories.graphs.GraphFileSerialization.encoding}
+
+```python
+encoding: str | None = None
+```
+
+### `export_supported` {#cmem_client.repositories.graphs.GraphFileSerialization.export_supported}
+
+```python
+export_supported: bool = True
+```
+
+### `file_extensions` {#cmem_client.repositories.graphs.GraphFileSerialization.file_extensions}
+
+```python
+file_extensions: list[str]
+```
+
+### `import_supported` {#cmem_client.repositories.graphs.GraphFileSerialization.import_supported}
+
+```python
+import_supported: bool = True
+```
+
+### `known_not_supporters` {#cmem_client.repositories.graphs.GraphFileSerialization.known_not_supporters}
+
+```python
+known_not_supporters: list[str] = Field(default_factory=list)
+```
+
+### `mime_type` {#cmem_client.repositories.graphs.GraphFileSerialization.mime_type}
+
+```python
+mime_type: str
+```
+
+### `model_config` {#cmem_client.repositories.graphs.GraphFileSerialization.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `GraphImportConfig` {#cmem_client.repositories.graphs.GraphImportConfig}
+
+Bases: [ImportConfig](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConfig)
+
+Graph Import Configuration.
+
+**Attributes:**
+
+- [**register_as_vocabulary**](#cmem_client.repositories.graphs.GraphImportConfig.register_as_vocabulary) (bool) – If True, register the imported graph as a vocabulary.
+- [**serialization**](#cmem_client.repositories.graphs.GraphImportConfig.serialization) ([GraphFileSerialization](#cmem_client.repositories.graphs.GraphFileSerialization) | None) – RDF serialization of the imported file. If None, it is guessed from the
+file extension via ``guess_file_type()``.
+- [**namespace_prefix**](#cmem_client.repositories.graphs.GraphImportConfig.namespace_prefix) (str | None) – Vocabulary namespace prefix, used as a fallback when the file carries
+no vann metadata. Requires ``register_as_vocabulary=True`` and must be set together
+with ``namespace_uri``.
+- [**namespace_uri**](#cmem_client.repositories.graphs.GraphImportConfig.namespace_uri) (str | None) – Vocabulary namespace URI, used as a fallback when the file carries no vann
+metadata. Requires ``register_as_vocabulary=True`` and must be set together with
+``namespace_prefix``.
+
+### `model_config` {#cmem_client.repositories.graphs.GraphImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `namespace_prefix` {#cmem_client.repositories.graphs.GraphImportConfig.namespace_prefix}
+
+```python
+namespace_prefix: str | None = None
+```
+
+### `namespace_uri` {#cmem_client.repositories.graphs.GraphImportConfig.namespace_uri}
+
+```python
+namespace_uri: str | None = None
+```
+
+### `register_as_vocabulary` {#cmem_client.repositories.graphs.GraphImportConfig.register_as_vocabulary}
+
+```python
+register_as_vocabulary: bool = False
+```
+
+### `serialization` {#cmem_client.repositories.graphs.GraphImportConfig.serialization}
+
+```python
+serialization: GraphFileSerialization | None = None
+```
+
+### `use_archive_handler` {#cmem_client.repositories.graphs.GraphImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = True
+```
+
+## `GraphsRepository` {#cmem_client.repositories.graphs.GraphsRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [ImportItemProtocol](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol)
+
+Repository for graphs.
+
+This repository manages named graphs which are described with the Graph model.
+Supports both regular graphs and vocabularies through the register_as_vocabulary flag.
+
+**Attributes:**
+
+- [**formats**](#cmem_client.repositories.graphs.GraphsRepository.formats) (dict[str, [GraphFileSerialization](#cmem_client.repositories.graphs.GraphFileSerialization)]) – Registry of the supported RDF serializations, keyed by format name such as
+``turtle`` or ``json-ld``. Read by ``guess_file_type()`` and available to callers
+which need to pick a serialization explicitly.
+
+**Functions:**
+
+- [**byte_generator**](#cmem_client.repositories.graphs.GraphsRepository.byte_generator) – Generate bytes from a file in chunks.
+- [**delete_all**](#cmem_client.repositories.graphs.GraphsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.graphs.GraphsRepository.delete_item) – Delete an item from the repository
+- [**export_item**](#cmem_client.repositories.graphs.GraphsRepository.export_item) – Export an item from the repository to a file path.
+- [**export_to_zip**](#cmem_client.repositories.graphs.GraphsRepository.export_to_zip) – Export graph to a ZIP file.
+- [**fetch_data**](#cmem_client.repositories.graphs.GraphsRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**guess_file_type**](#cmem_client.repositories.graphs.GraphsRepository.guess_file_type) – Guess the RDF serialization format from a file path for import.
+- [**import_item**](#cmem_client.repositories.graphs.GraphsRepository.import_item) – Import an exported file to the repository
+- [**items**](#cmem_client.repositories.graphs.GraphsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.graphs.GraphsRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.graphs.GraphsRepository.values) – Get the values of the repository
+
+### `byte_generator` {#cmem_client.repositories.graphs.GraphsRepository.byte_generator}
+
+```python
+byte_generator(file_path, chunk_size=1024)
+```
+
+Generate bytes from a file in chunks.
+
+**Parameters:**
+
+- **file_path** (Path) – Path to the file to read
+- **chunk_size** (int) – Size of each chunk in bytes (default: 1024)
+
+**Yields:**
+
+- **bytes** (Generator[bytes]) – Chunks of data from the file
+
+### `delete_all` {#cmem_client.repositories.graphs.GraphsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.graphs.GraphsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `export_item` {#cmem_client.repositories.graphs.GraphsRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `export_to_zip` {#cmem_client.repositories.graphs.GraphsRepository.export_to_zip}
+
+```python
+export_to_zip(key, path=None, replace=False)
+```
+
+Export graph to a ZIP file.
+
+Exports a single RDF file to a ZIP archive.
+
+**Parameters:**
+
+- **key** (str) – The URI/identifier of the graph to export.
+- **path** (Path | None) – Optional target path for the ZIP file. If None, creates a temporary file.
+- **replace** (bool) – Whether to overwrite an existing file at the target path.
+
+**Returns:**
+
+- Path – Path to the created ZIP file.
+
+**Raises:**
+
+- [GraphExportError](../exceptions.md#cmem_client.exceptions.GraphExportError) – If the file already exists and replace is False, or if
+the exported graph is empty.
+
+### `fetch_data` {#cmem_client.repositories.graphs.GraphsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `formats` {#cmem_client.repositories.graphs.GraphsRepository.formats}
+
+```python
+formats: dict[str, GraphFileSerialization] = {'turtle': GraphFileSerialization(mime_type='text/turtle', file_extensions=['ttl']), 'rdf/xml': GraphFileSerialization(mime_type='application/rdf+xml', file_extensions=['rdf', 'xml']), 'json-ld': GraphFileSerialization(mime_type='application/ld+json', file_extensions=['jsonld'], known_not_supporters=['TENTRIS'], export_supported=False), 'n-triples': GraphFileSerialization(mime_type='application/n-triples', file_extensions=['nt']), 'pretty-turtle': GraphFileSerialization(mime_type='text/turtle+pretty', file_extensions=['ttl'], import_supported=False)}
+```
+
+### `guess_file_type` {#cmem_client.repositories.graphs.GraphsRepository.guess_file_type}
+
+```python
+guess_file_type(path)
+```
+
+Guess the RDF serialization format from a file path for import.
+
+Attempts to determine the appropriate GraphFileSerialization by examining
+the file's MIME type and file extension. Supports compressed files (.gz).
+Only considers formats where import_supported is True.
+
+**Parameters:**
+
+- **path** (Path) – Path to the RDF file to analyze.
+
+**Returns:**
+
+- **GraphFileSerialization** ([GraphFileSerialization](#cmem_client.repositories.graphs.GraphFileSerialization)) – The detected serialization format with
+MIME type, file extensions, and optional encoding information.
+
+**Raises:**
+
+- ValueError – If the file type cannot be determined from the path or
+extension.
+
+### `import_item` {#cmem_client.repositories.graphs.GraphsRepository.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `items` {#cmem_client.repositories.graphs.GraphsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.graphs.GraphsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.graphs.GraphsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.graphs.GraphsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `INSERT_CATALOG_ENTRY` {#cmem_client.repositories.graphs.INSERT_CATALOG_ENTRY}
+
+```python
+INSERT_CATALOG_ENTRY = '\nPREFIX voaf: \nPREFIX vann: \nPREFIX dct: \nPREFIX skos: \nWITH <{graph}>\nINSERT {{\n <{iri}> a voaf:Vocabulary ;\n skos:prefLabel "{label}"{language} ;\n vann:preferredNamespacePrefix "{prefix}" ;\n vann:preferredNamespaceUri "{namespace}" ;\n dct:description "vocabulary imported with cmem-client" .\n}}\nWHERE {{}}\n'
+```
+
+## `VOCABULARY_CATALOG_GRAPH` {#cmem_client.repositories.graphs.VOCABULARY_CATALOG_GRAPH}
+
+```python
+VOCABULARY_CATALOG_GRAPH = 'https://ns.eccenca.com/example/data/vocabs/'
+```
+
+IRI of the (optional, legacy) vocabulary catalog graph.
+
+Newer backends do not have this graph. The catalog entry is only written when it
+already exists, so importing a vocabulary never (re-)creates it.
+
diff --git a/docs/develop/cmem-client-api/repositories/marketplace_packages.md b/docs/develop/cmem-client-api/repositories/marketplace_packages.md
new file mode 100644
index 000000000..9e1646a56
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/marketplace_packages.md
@@ -0,0 +1,368 @@
+# `marketplace_packages` {#cmem_client.repositories.marketplace_packages}
+
+Repository for the marketplace packages installed in Corporate Memory.
+
+Provides MarketplacePackagesRepository for installing packages from an archive or
+directory, exporting an installed package again and removing one. The packages
+available on a marketplace server are offered by the Marketplace component
+(``client.marketplace``) instead.
+
+**Examples:**
+
+List the installed packages:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> list(client.marketplace_packages)
+```
+
+Install a package archive and export an installed package:
+
+```pycon
+>>> from pathlib import Path
+>>> from cmem_client.repositories.marketplace_packages import (
+... MarketplacePackagesExportConfig,
+... MarketplacePackagesImportConfig,
+... )
+>>> client.marketplace_packages.import_item(
+... key="w3c-geo-vocab",
+... configuration=MarketplacePackagesImportConfig(install_from_marketplace=True),
+... on_conflict=ImportConflictPolicy.REPLACE
+... )
+>>> client.marketplace_packages.export_item(
+... key="w3c-geo-vocab",
+... path=Path("w3c-geo-vocab"),
+... configuration=MarketplacePackagesExportConfig(export_as_zip=False),
+... )
+>>> client.marketplace_packages.delete_item(key="w3c-geo-vocab", skip_if_missing=True)
+```
+
+**Classes:**
+
+- [**MarketplacePackagesDeleteConfig**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig) – Package deletion configuration
+- [**MarketplacePackagesExportConfig**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig) – Package export configuration
+- [**MarketplacePackagesImportConfig**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig) – Configuration for marketplace package import operations.
+- [**MarketplacePackagesRepository**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository) – Repository for marketplace package operations.
+
+**Functions:**
+
+- [**get_installation_metadata_query**](#cmem_client.repositories.marketplace_packages.get_installation_metadata_query) – Get the query for the installation metadata of the package.
+
+**Attributes:**
+
+- [**LOCK_FILE_RESOURCE**](#cmem_client.repositories.marketplace_packages.LOCK_FILE_RESOURCE) –
+- [**MAX_DEPENDENCY_DEPTH**](#cmem_client.repositories.marketplace_packages.MAX_DEPENDENCY_DEPTH) –
+
+## `LOCK_FILE_RESOURCE` {#cmem_client.repositories.marketplace_packages.LOCK_FILE_RESOURCE}
+
+```python
+LOCK_FILE_RESOURCE = f'{MARKETPLACE_PROJECT_ID}:mp-lock.json'
+```
+
+## `MAX_DEPENDENCY_DEPTH` {#cmem_client.repositories.marketplace_packages.MAX_DEPENDENCY_DEPTH}
+
+```python
+MAX_DEPENDENCY_DEPTH = 5
+```
+
+## `MarketplacePackagesDeleteConfig` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Package deletion configuration
+
+**Attributes:**
+
+- [**skip_missing_dependencies**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_dependencies) (bool) – If True, dependencies which are not installed are skipped
+instead of raising an error.
+- [**skip_missing_graphs**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_graphs) (bool) – If True, graphs of the package which do not exist are skipped
+instead of raising an error.
+- [**skip_missing_projects**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_projects) (bool) – If True, projects of the package which do not exist are skipped
+instead of raising an error.
+- [**ignore_lock**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.ignore_lock) (bool) – If set to True, ignore the lock mechanism.
+- [**ignore_dependencies**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.ignore_dependencies) (bool) – If True, dependencies of the package are not deleted.
+- [**dependency_level**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.dependency_level) (int) – Current recursion depth for dependency resolution. Used internally to
+identify the top-level call. Should not be set manually.
+
+### `dependency_level` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.dependency_level}
+
+```python
+dependency_level: int = 0
+```
+
+### `ignore_dependencies` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.ignore_dependencies}
+
+```python
+ignore_dependencies: bool = False
+```
+
+### `ignore_lock` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.ignore_lock}
+
+```python
+ignore_lock: bool = False
+```
+
+### `model_config` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `skip_missing_dependencies` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_dependencies}
+
+```python
+skip_missing_dependencies: bool = True
+```
+
+### `skip_missing_graphs` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_graphs}
+
+```python
+skip_missing_graphs: bool = True
+```
+
+### `skip_missing_projects` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesDeleteConfig.skip_missing_projects}
+
+```python
+skip_missing_projects: bool = True
+```
+
+## `MarketplacePackagesExportConfig` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Package export configuration
+
+**Attributes:**
+
+- [**export_graph_serialization**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig.export_graph_serialization) (Literal['turtle', 'pretty-turtle']) – Graph export serialization format.
+- [**export_as_zip**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig.export_as_zip) (bool) – If true, export the package as a zip file, otherwise as a directory.
+
+### `export_as_zip` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig.export_as_zip}
+
+```python
+export_as_zip: bool = True
+```
+
+### `export_graph_serialization` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig.export_graph_serialization}
+
+```python
+export_graph_serialization: LiteralType['turtle', 'pretty-turtle'] = 'pretty-turtle'
+```
+
+### `model_config` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesExportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `MarketplacePackagesImportConfig` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig}
+
+Bases: [ImportConfig](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConfig)
+
+Configuration for marketplace package import operations.
+
+**Attributes:**
+
+- [**ignore_dependencies**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.ignore_dependencies) (bool) – If True, skips installation of package dependencies.
+- [**install_from_marketplace**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.install_from_marketplace) (bool) – If True, downloads packages from the marketplace server.
+If False, loads packages from local filesystem.
+- [**package_version**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.package_version) (PackageVersionIdentifier | None) – Specific version to install. If None, installs the latest version.
+- [**dependency_level**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.dependency_level) (int) – Current recursion depth for dependency resolution. Used internally
+to prevent infinite recursion. Should not be set manually.
+- [**use_cache**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.use_cache) (bool) – Weather to use the cache directory to look packages up which have already been downloaded.
+To prevent the cache entirely, set this up in the marketplace component.
+- [**ignore_lock**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.ignore_lock) (bool) – If set to True, ignore the lock mechanism.
+
+### `dependency_level` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.dependency_level}
+
+```python
+dependency_level: int = 0
+```
+
+### `ignore_dependencies` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.ignore_dependencies}
+
+```python
+ignore_dependencies: bool = False
+```
+
+### `ignore_lock` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.ignore_lock}
+
+```python
+ignore_lock: bool = False
+```
+
+### `install_from_marketplace` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.install_from_marketplace}
+
+```python
+install_from_marketplace: bool = True
+```
+
+### `model_config` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `package_version` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.package_version}
+
+```python
+package_version: PackageVersionIdentifier | None = None
+```
+
+### `use_archive_handler` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = True
+```
+
+### `use_cache` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesImportConfig.use_cache}
+
+```python
+use_cache: bool = True
+```
+
+## `MarketplacePackagesRepository` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository}
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository), [ImportItemProtocol](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol)
+
+Repository for marketplace package operations.
+
+**Functions:**
+
+- [**delete_all**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.delete_item) – Delete an item from the repository
+- [**export_item**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.export_item) – Export an item from the repository to a file path.
+- [**fetch_data**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.fetch_data) – Fetch installed packages from the package data graph via SPARQL query.
+- [**import_item**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.import_item) – Import an exported file to the repository
+- [**items**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.logger) (Logger) – Gets the client logger
+
+### `delete_all` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `export_item` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `fetch_data` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch installed packages from the package data graph via SPARQL query.
+
+Queries the package data graph for all installed packages and their metadata.
+
+### `import_item` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `items` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.marketplace_packages.MarketplacePackagesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `get_installation_metadata_query` {#cmem_client.repositories.marketplace_packages.get_installation_metadata_query}
+
+```python
+get_installation_metadata_query(package_iri)
+```
+
+Get the query for the installation metadata of the package.
+
diff --git a/docs/develop/cmem-client-api/repositories/projects.md b/docs/develop/cmem-client-api/repositories/projects.md
new file mode 100644
index 000000000..c4f7ab349
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/projects.md
@@ -0,0 +1,367 @@
+# `projects` {#cmem_client.repositories.projects}
+
+Repository for managing DataIntegration projects.
+
+Provides ProjectsRepository for creating, deleting, importing and exporting build
+projects, and for reloading a project and reading its failed task report.
+
+**Examples:**
+
+Create a project and list the projects of the workspace:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> from cmem_client.models.project import Project
+>>> client = Client.from_env()
+>>> client.projects.create_item(
+... Project(name="my-project", meta_data={"label": "My Project"}),
+... skip_if_existing=True,
+... )
+>>> list(client.projects)
+```
+
+Export a project to a ZIP archive and reload it afterwards:
+
+```pycon
+>>> from pathlib import Path
+>>> client.projects.export_item(key="my-project", path=Path("my-project.zip"))
+>>> client.projects.reload_project("my-project")
+```
+
+Find out which tasks of a project failed to load:
+
+```pycon
+>>> for failed in client.projects.get_failed_tasks_report("my-project"):
+... print(failed)
+```
+
+**Classes:**
+
+- [**ProjectImportStatus**](#cmem_client.repositories.projects.ProjectImportStatus) – Response of the project import status endpoint.
+- [**ProjectsCreateConfig**](#cmem_client.repositories.projects.ProjectsCreateConfig) – Project Create Configuration.
+- [**ProjectsDeleteConfig**](#cmem_client.repositories.projects.ProjectsDeleteConfig) – Project Delete Configuration.
+- [**ProjectsExportConfig**](#cmem_client.repositories.projects.ProjectsExportConfig) – Project Export Configuration.
+- [**ProjectsImportConfig**](#cmem_client.repositories.projects.ProjectsImportConfig) – Project Import Configuration.
+- [**ProjectsRepository**](#cmem_client.repositories.projects.ProjectsRepository) – Repository for Build (DataIntegration) projects.
+
+## `ProjectImportStatus` {#cmem_client.repositories.projects.ProjectImportStatus}
+
+Bases: [Model](../models/base.md#cmem_client.models.base.Model)
+
+Response of the project import status endpoint.
+
+**Attributes:**
+
+- [**project_id**](#cmem_client.repositories.projects.ProjectImportStatus.project_id) (str) – Identifier of the imported project, sent as ``projectId``.
+- [**success**](#cmem_client.repositories.projects.ProjectImportStatus.success) (bool | None) – Whether the import finished successfully. None while the import is still
+running, which is what ``import_item()`` polls on.
+- [**failure_message**](#cmem_client.repositories.projects.ProjectImportStatus.failure_message) (str | None) – Reason the import failed, sent as ``failureMessage``. Only set when
+the import failed.
+
+### `failure_message` {#cmem_client.repositories.projects.ProjectImportStatus.failure_message}
+
+```python
+failure_message: str | None = Field(alias='failureMessage', default=None)
+```
+
+### `model_config` {#cmem_client.repositories.projects.ProjectImportStatus.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `project_id` {#cmem_client.repositories.projects.ProjectImportStatus.project_id}
+
+```python
+project_id: str = Field(alias='projectId')
+```
+
+### `success` {#cmem_client.repositories.projects.ProjectImportStatus.success}
+
+```python
+success: bool | None = None
+```
+
+## `ProjectsCreateConfig` {#cmem_client.repositories.projects.ProjectsCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Project Create Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `ProjectsDeleteConfig` {#cmem_client.repositories.projects.ProjectsDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Project Delete Configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `ProjectsExportConfig` {#cmem_client.repositories.projects.ProjectsExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Project Export Configuration.
+
+**Attributes:**
+
+- [**marshalling_plugin**](#cmem_client.repositories.projects.ProjectsExportConfig.marshalling_plugin) (Literal['xmlZip', 'xmlZipWithoutResources']) – Export format plugin. ``xmlZip`` includes the project resources,
+``xmlZipWithoutResources`` omits them.
+- [**extract_project_zip**](#cmem_client.repositories.projects.ProjectsExportConfig.extract_project_zip) (bool) – If True, extract the exported archive into the given path as a
+directory instead of writing a single zip file.
+- [**include_access_conditions**](#cmem_client.repositories.projects.ProjectsExportConfig.include_access_conditions) (bool) – If True, export the access conditions of the project.
+Sent as ``exportGroups``.
+- [**export_user_data**](#cmem_client.repositories.projects.ProjectsExportConfig.export_user_data) (bool) – If True, include user data in the export. Sent as ``exportUserData``.
+
+### `export_user_data` {#cmem_client.repositories.projects.ProjectsExportConfig.export_user_data}
+
+```python
+export_user_data: bool = True
+```
+
+### `extract_project_zip` {#cmem_client.repositories.projects.ProjectsExportConfig.extract_project_zip}
+
+```python
+extract_project_zip: bool = False
+```
+
+### `include_access_conditions` {#cmem_client.repositories.projects.ProjectsExportConfig.include_access_conditions}
+
+```python
+include_access_conditions: bool = False
+```
+
+### `marshalling_plugin` {#cmem_client.repositories.projects.ProjectsExportConfig.marshalling_plugin}
+
+```python
+marshalling_plugin: Literal['xmlZip', 'xmlZipWithoutResources'] = 'xmlZip'
+```
+
+### `model_config` {#cmem_client.repositories.projects.ProjectsExportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `ProjectsImportConfig` {#cmem_client.repositories.projects.ProjectsImportConfig}
+
+Bases: [ImportConfig](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConfig)
+
+Project Import Configuration.
+
+**Attributes:**
+
+- [**use_archive_handler**](#cmem_client.repositories.projects.ProjectsImportConfig.use_archive_handler) (bool) – Defaults to False here, unlike the base class, so the project archive
+is passed to the API as-is instead of being unpacked by the ArchiveHandler.
+- [**include_access_conditions**](#cmem_client.repositories.projects.ProjectsImportConfig.include_access_conditions) (bool) – If True, import the access conditions contained in the archive.
+Sent as ``importGroups``.
+
+### `include_access_conditions` {#cmem_client.repositories.projects.ProjectsImportConfig.include_access_conditions}
+
+```python
+include_access_conditions: bool = False
+```
+
+### `model_config` {#cmem_client.repositories.projects.ProjectsImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `use_archive_handler` {#cmem_client.repositories.projects.ProjectsImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = False
+```
+
+## `ProjectsRepository` {#cmem_client.repositories.projects.ProjectsRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [ImportItemProtocol](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol)
+
+Repository for Build (DataIntegration) projects.
+
+This repository manages Build (DataIntegration) projects which are described with
+the [Project model][cmem_client.models.project.Project].
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.projects.ProjectsRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.projects.ProjectsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.projects.ProjectsRepository.delete_item) – Delete an item from the repository
+- [**export_item**](#cmem_client.repositories.projects.ProjectsRepository.export_item) – Export an item from the repository to a file path.
+- [**fetch_data**](#cmem_client.repositories.projects.ProjectsRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**get_failed_tasks_report**](#cmem_client.repositories.projects.ProjectsRepository.get_failed_tasks_report) – Get all failed tasks from project from its ID
+- [**import_item**](#cmem_client.repositories.projects.ProjectsRepository.import_item) – Import an exported file to the repository
+- [**items**](#cmem_client.repositories.projects.ProjectsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.projects.ProjectsRepository.keys) – Get the keys of the repository
+- [**raise_modification_error**](#cmem_client.repositories.projects.ProjectsRepository.raise_modification_error) – Raise an exception if needed
+- [**reload_project**](#cmem_client.repositories.projects.ProjectsRepository.reload_project) – Reload all task from project from its ID
+- [**values**](#cmem_client.repositories.projects.ProjectsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.projects.ProjectsRepository.logger) (Logger) – Gets the client logger
+
+### `create_item` {#cmem_client.repositories.projects.ProjectsRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.projects.ProjectsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.projects.ProjectsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `export_item` {#cmem_client.repositories.projects.ProjectsRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `fetch_data` {#cmem_client.repositories.projects.ProjectsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `get_failed_tasks_report` {#cmem_client.repositories.projects.ProjectsRepository.get_failed_tasks_report}
+
+```python
+get_failed_tasks_report(project_id)
+```
+
+Get all failed tasks from project from its ID
+
+### `import_item` {#cmem_client.repositories.projects.ProjectsRepository.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `items` {#cmem_client.repositories.projects.ProjectsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.projects.ProjectsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.projects.ProjectsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.projects.ProjectsRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `reload_project` {#cmem_client.repositories.projects.ProjectsRepository.reload_project}
+
+```python
+reload_project(project_id)
+```
+
+Reload all task from project from its ID
+
+### `values` {#cmem_client.repositories.projects.ProjectsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/protocols/.pages b/docs/develop/cmem-client-api/repositories/protocols/.pages
new file mode 100644
index 000000000..7a14ae339
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/.pages
@@ -0,0 +1 @@
+title: Protocols
diff --git a/docs/develop/cmem-client-api/repositories/protocols/create_item.md b/docs/develop/cmem-client-api/repositories/protocols/create_item.md
new file mode 100644
index 000000000..3d6a1b96f
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/create_item.md
@@ -0,0 +1,102 @@
+# `create_item` {#cmem_client.repositories.protocols.create_item}
+
+Protocol interface for repository item creation operations.
+
+This module defines the CreateItemProtocol that repositories can implement
+to provide item creation capabilities. It includes comprehensive error handling
+for different API response formats and automatic repository refresh after
+successful creation.
+
+The protocol handles both DataIntegration (build) and DataPlatform (explore)
+API error formats, providing consistent error reporting across different
+Corporate Memory components.
+
+**Classes:**
+
+- [**CreateConfig**](#cmem_client.repositories.protocols.create_item.CreateConfig) – Abstract base class for repository item creation configurations.
+- [**CreateItemProtocol**](#cmem_client.repositories.protocols.create_item.CreateItemProtocol) – Protocol which allows for creation of new items
+
+**Attributes:**
+
+- [**CreateItemConfig_contra**](#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) –
+
+## `CreateConfig` {#cmem_client.repositories.protocols.create_item.CreateConfig}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model), ABC
+
+Abstract base class for repository item creation configurations.
+
+**Attributes:**
+
+- **model_config** –
+
+## `CreateItemConfig_contra` {#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra}
+
+```python
+CreateItemConfig_contra = TypeVar('CreateItemConfig_contra', bound=CreateConfig, contravariant=True)
+```
+
+## `CreateItemProtocol` {#cmem_client.repositories.protocols.create_item.CreateItemProtocol}
+
+Bases: Protocol[[ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType), [CreateItemConfig_contra](#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra)]
+
+Protocol which allows for creation of new items
+
+**Attributes:**
+
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_dict** (dict[str, [ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_config** ([RepositoryConfig](../../repositories/base/abc.md#cmem_client.repositories.base.abc.RepositoryConfig)) – Describes which endpoint the repository fetches its data from.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.protocols.create_item.CreateItemProtocol.create_item) – Create (add) a new item to the repository
+- [**fetch_data**](#cmem_client.repositories.protocols.create_item.CreateItemProtocol.fetch_data) – Fetch new data and update the repository
+- [**raise_modification_error**](#cmem_client.repositories.protocols.create_item.CreateItemProtocol.raise_modification_error) – Raise an exception if needed
+
+### `create_item` {#cmem_client.repositories.protocols.create_item.CreateItemProtocol.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.protocols.create_item.CreateItemProtocol.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch new data and update the repository
+
+### `logger` {#cmem_client.repositories.protocols.create_item.CreateItemProtocol.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.protocols.create_item.CreateItemProtocol.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
diff --git a/docs/develop/cmem-client-api/repositories/protocols/delete_item.md b/docs/develop/cmem-client-api/repositories/protocols/delete_item.md
new file mode 100644
index 000000000..e05408282
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/delete_item.md
@@ -0,0 +1,91 @@
+# `delete_item` {#cmem_client.repositories.protocols.delete_item}
+
+Protocol interface for repository item deletion operations.
+
+This module defines the DeleteItemProtocol that repositories can implement
+to provide item deletion capabilities. It includes validation to ensure items
+exist before deletion and provides both individual and bulk deletion methods.
+
+The protocol implements the Python __delitem__ method to support standard
+dictionary-style deletion syntax while providing comprehensive error handling
+for HTTP communication failures.
+
+**Classes:**
+
+- [**DeleteConfig**](#cmem_client.repositories.protocols.delete_item.DeleteConfig) – Abstract base class for repository item deletion configurations.
+- [**DeleteItemProtocol**](#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol) – Protocol which allows for deletion of items
+
+**Attributes:**
+
+- [**DeleteItemConfig_contra**](#cmem_client.repositories.protocols.delete_item.DeleteItemConfig_contra) –
+
+## `DeleteConfig` {#cmem_client.repositories.protocols.delete_item.DeleteConfig}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model), ABC
+
+Abstract base class for repository item deletion configurations.
+
+**Attributes:**
+
+- **model_config** –
+
+## `DeleteItemConfig_contra` {#cmem_client.repositories.protocols.delete_item.DeleteItemConfig_contra}
+
+```python
+DeleteItemConfig_contra = TypeVar('DeleteItemConfig_contra', bound=DeleteConfig, contravariant=True)
+```
+
+## `DeleteItemProtocol` {#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol}
+
+Bases: Protocol[[ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType), [DeleteItemConfig_contra](#cmem_client.repositories.protocols.delete_item.DeleteItemConfig_contra)]
+
+Protocol which allows for deletion of items
+
+**Attributes:**
+
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_dict** (dict[str, [ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**delete_all**](#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol.delete_item) – Delete an item from the repository
+
+### `delete_all` {#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `logger` {#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
diff --git a/docs/develop/cmem-client-api/repositories/protocols/export_item.md b/docs/develop/cmem-client-api/repositories/protocols/export_item.md
new file mode 100644
index 000000000..8f39aab7d
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/export_item.md
@@ -0,0 +1,86 @@
+# `export_item` {#cmem_client.repositories.protocols.export_item}
+
+Protocol interface for repository item export operations.
+
+This module defines the ExportItemProtocol that repositories can implement
+to support exporting items to files.
+
+**Classes:**
+
+- [**ExportConfig**](#cmem_client.repositories.protocols.export_item.ExportConfig) – Abstract base class for Export Item Configuration Objects
+- [**ExportItemProtocol**](#cmem_client.repositories.protocols.export_item.ExportItemProtocol) – Protocol which allows for exporting of items to a file path.
+
+**Attributes:**
+
+- [**ExportItemConfig_contra**](#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) –
+
+## `ExportConfig` {#cmem_client.repositories.protocols.export_item.ExportConfig}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model), ABC
+
+Abstract base class for Export Item Configuration Objects
+
+**Attributes:**
+
+- **model_config** –
+
+## `ExportItemConfig_contra` {#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra}
+
+```python
+ExportItemConfig_contra = TypeVar('ExportItemConfig_contra', bound=ExportConfig, contravariant=True)
+```
+
+## `ExportItemProtocol` {#cmem_client.repositories.protocols.export_item.ExportItemProtocol}
+
+Bases: Protocol[[ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType), [ExportItemConfig_contra](#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra)]
+
+Protocol which allows for exporting of items to a file path.
+
+This protocol defines the interface that repositories must implement to support
+exporting items to files. It provides both a public interface method and requires
+implementation of a concrete export method.
+
+**Attributes:**
+
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_dict** (dict[str, [ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**export_item**](#cmem_client.repositories.protocols.export_item.ExportItemProtocol.export_item) – Export an item from the repository to a file path.
+
+### `export_item` {#cmem_client.repositories.protocols.export_item.ExportItemProtocol.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `logger` {#cmem_client.repositories.protocols.export_item.ExportItemProtocol.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
diff --git a/docs/develop/cmem-client-api/repositories/protocols/import_item.md b/docs/develop/cmem-client-api/repositories/protocols/import_item.md
new file mode 100644
index 000000000..e1dc28330
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/import_item.md
@@ -0,0 +1,170 @@
+# `import_item` {#cmem_client.repositories.protocols.import_item}
+
+Protocol interface for repository item import operations.
+
+This module defines the ImportItemProtocol that repositories can implement
+to support importing items from files. This is commonly used for importing
+exported projects, graphs, or other resources into Corporate Memory.
+
+The protocol supports replacement, skip-if-existing, fail-if-existing, and
+merge behaviours, controlled via the on_conflict parameter on import_item().
+
+**Examples:**
+
+A repository declares which import items it accepts and which import
+configuration applies when the caller passes none:
+
+```pycon
+>>> from collections.abc import Sequence
+>>> from typing import ClassVar
+>>> from cmem_client.models.item import FileImportItem, ImportItem, ZipImportItem
+>>> from cmem_client.repositories.base.plain_list import PlainListRepository
+>>> from cmem_client.repositories.projects import ProjectsImportConfig
+>>> from cmem_client.repositories.protocols.import_item import (
+... ImportConfig,
+... ImportItemProtocol,
+... )
+>>> class ProjectsRepository(PlainListRepository, ImportItemProtocol):
+... _allowed_import_items: ClassVar[Sequence[type[ImportItem]]] = [
+... FileImportItem,
+... ZipImportItem,
+... ]
+... _default_import_config: ImportConfig | None = ProjectsImportConfig()
+```
+
+**Classes:**
+
+- [**ImportConfig**](#cmem_client.repositories.protocols.import_item.ImportConfig) – Abstract base class for Import Item Configuration Objects
+- [**ImportConflictPolicy**](#cmem_client.repositories.protocols.import_item.ImportConflictPolicy) – Controls behavior when the import target already exists.
+- [**ImportItemProtocol**](#cmem_client.repositories.protocols.import_item.ImportItemProtocol) – Protocol which allows for importing of items from a file path.
+
+**Attributes:**
+
+- [**ImportItemConfig_contra**](#cmem_client.repositories.protocols.import_item.ImportItemConfig_contra) –
+
+## `ImportConfig` {#cmem_client.repositories.protocols.import_item.ImportConfig}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model), ABC
+
+Abstract base class for Import Item Configuration Objects
+
+**Attributes:**
+
+- [**use_archive_handler**](#cmem_client.repositories.protocols.import_item.ImportConfig.use_archive_handler) (bool) – When True, automatically uses ArchiveHandler to handle
+zip files, directories, and single files transparently.
+
+### `model_config` {#cmem_client.repositories.protocols.import_item.ImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `use_archive_handler` {#cmem_client.repositories.protocols.import_item.ImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = True
+```
+
+## `ImportConflictPolicy` {#cmem_client.repositories.protocols.import_item.ImportConflictPolicy}
+
+Bases: StrEnum
+
+Controls behavior when the import target already exists.
+
+REPLACE: Delete the existing item, then import the new one.
+SKIP: Leave the existing item untouched and return without importing.
+FAIL: Raise an error if the item already exists.
+MERGE: Add the imported data to the existing item without clearing it first.
+
+**Attributes:**
+
+- [**FAIL**](#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.FAIL) –
+- [**MERGE**](#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.MERGE) –
+- [**REPLACE**](#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.REPLACE) –
+- [**SKIP**](#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.SKIP) –
+
+### `FAIL` {#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.FAIL}
+
+```python
+FAIL = 'fail'
+```
+
+### `MERGE` {#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.MERGE}
+
+```python
+MERGE = 'merge'
+```
+
+### `REPLACE` {#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.REPLACE}
+
+```python
+REPLACE = 'replace'
+```
+
+### `SKIP` {#cmem_client.repositories.protocols.import_item.ImportConflictPolicy.SKIP}
+
+```python
+SKIP = 'skip'
+```
+
+## `ImportItemConfig_contra` {#cmem_client.repositories.protocols.import_item.ImportItemConfig_contra}
+
+```python
+ImportItemConfig_contra = TypeVar('ImportItemConfig_contra', bound=ImportConfig, contravariant=True)
+```
+
+## `ImportItemProtocol` {#cmem_client.repositories.protocols.import_item.ImportItemProtocol}
+
+Bases: Protocol[[ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType), [ImportItemConfig_contra](#cmem_client.repositories.protocols.import_item.ImportItemConfig_contra)]
+
+Protocol which allows for importing of items from a file path.
+
+**Attributes:**
+
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_dict** (dict[str, [ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_allowed_import_items** (Sequence[type[[ImportItem](../../models/item.md#cmem_client.models.item.ImportItem)]]) – ImportItem types this repository accepts. Repositories may
+declare it to narrow or widen what ``import_item()`` takes. If not defined,
+defaults to ``FileImportItem`` and ``ZipImportItem``, which excludes
+``DirectoryImportItem``.
+- **_default_import_config** ([ImportConfig](#cmem_client.repositories.protocols.import_item.ImportConfig) | None) – Import configuration applied when the caller passes none.
+Repositories declare it for example when ``use_archive_handler`` has to be turned
+off. If not defined, defaults to None.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**import_item**](#cmem_client.repositories.protocols.import_item.ImportItemProtocol.import_item) – Import an exported file to the repository
+
+### `import_item` {#cmem_client.repositories.protocols.import_item.ImportItemProtocol.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `logger` {#cmem_client.repositories.protocols.import_item.ImportItemProtocol.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
diff --git a/docs/develop/cmem-client-api/repositories/protocols/update_item.md b/docs/develop/cmem-client-api/repositories/protocols/update_item.md
new file mode 100644
index 000000000..4b0195780
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/protocols/update_item.md
@@ -0,0 +1,91 @@
+# `update_item` {#cmem_client.repositories.protocols.update_item}
+
+Protocol interface for repository item update operations.
+
+This module defines the UpdateItemProtocol that repositories can implement
+to provide item update capabilities. It includes error handling and automatic
+repository refresh after successful updates.
+
+The protocol handles both DataIntegration (build) and DataPlatform (explore)
+API error formats, providing consistent error reporting across different
+Corporate Memory components.
+
+**Classes:**
+
+- [**UpdateConfig**](#cmem_client.repositories.protocols.update_item.UpdateConfig) – Abstract base class for repository item update configurations.
+- [**UpdateItemProtocol**](#cmem_client.repositories.protocols.update_item.UpdateItemProtocol) – Protocol which allows for updating of existing items.
+
+**Attributes:**
+
+- [**UpdateItemConfig_contra**](#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) –
+
+## `UpdateConfig` {#cmem_client.repositories.protocols.update_item.UpdateConfig}
+
+Bases: [Model](../../models/base.md#cmem_client.models.base.Model), ABC
+
+Abstract base class for repository item update configurations.
+
+**Attributes:**
+
+- **model_config** –
+
+## `UpdateItemConfig_contra` {#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra}
+
+```python
+UpdateItemConfig_contra = TypeVar('UpdateItemConfig_contra', bound=UpdateConfig, contravariant=True)
+```
+
+## `UpdateItemProtocol` {#cmem_client.repositories.protocols.update_item.UpdateItemProtocol}
+
+Bases: Protocol[[ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType), [UpdateItemConfig_contra](#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra)]
+
+Protocol which allows for updating of existing items.
+
+**Attributes:**
+
+- **_client** ([Client](../../index.md#cmem_client.client.Client)) – Corporate Memory client used for the HTTP requests of this repository.
+- **_dict** (dict[str, [ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)]) – Cached contents of the repository, mapping the key of each item to the item
+itself. Backs the Mapping interface and is populated by ``fetch_data()``.
+- **_config** ([RepositoryConfig](../../repositories/base/abc.md#cmem_client.repositories.base.abc.RepositoryConfig)) – Describes which endpoint the repository fetches its data from.
+- **_logger** (Logger) – Logger of this repository, created lazily on first access through the
+``logger`` property as a child of the client logger.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.protocols.update_item.UpdateItemProtocol.fetch_data) – Fetch new data and update the repository
+- [**update_item**](#cmem_client.repositories.protocols.update_item.UpdateItemProtocol.update_item) – Update an existing item in the repository.
+
+### `fetch_data` {#cmem_client.repositories.protocols.update_item.UpdateItemProtocol.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch new data and update the repository
+
+### `logger` {#cmem_client.repositories.protocols.update_item.UpdateItemProtocol.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `update_item` {#cmem_client.repositories.protocols.update_item.UpdateItemProtocol.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
diff --git a/docs/develop/cmem-client-api/repositories/python_packages.md b/docs/develop/cmem-client-api/repositories/python_packages.md
new file mode 100644
index 000000000..f0d4224e5
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/python_packages.md
@@ -0,0 +1,214 @@
+# `python_packages` {#cmem_client.repositories.python_packages}
+
+Repository for the Python packages installed in DataIntegration.
+
+Provides PythonPackagesRepository for listing the installed packages, installing new
+ones from PyPI or from a wheel, and removing them again. It also reports the plugins
+those packages contribute to the workspace.
+
+**Examples:**
+
+List the installed packages:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for name in client.python_packages:
+... print(name, client.python_packages[name].version)
+```
+
+Install a plugin package and reload the plugin registry:
+
+```pycon
+>>> client.python_packages.install_by_name("cmem-plugin-graphql")
+>>> client.python_packages.reload_plugins()
+>>> client.python_packages.list_plugins()
+```
+
+Remove a package again:
+
+```pycon
+>>> client.python_packages.delete_item("cmem-plugin-graphql")
+```
+
+**Classes:**
+
+- [**PythonPackagesDeleteConfig**](#cmem_client.repositories.python_packages.PythonPackagesDeleteConfig) – Python packages deletion configuration.
+- [**PythonPackagesRepository**](#cmem_client.repositories.python_packages.PythonPackagesRepository) – Repository for python packages
+
+## `PythonPackagesDeleteConfig` {#cmem_client.repositories.python_packages.PythonPackagesDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Python packages deletion configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `PythonPackagesRepository` {#cmem_client.repositories.python_packages.PythonPackagesRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol)
+
+Repository for python packages
+
+**Functions:**
+
+- [**delete_all**](#cmem_client.repositories.python_packages.PythonPackagesRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.python_packages.PythonPackagesRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.python_packages.PythonPackagesRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**install_by_file**](#cmem_client.repositories.python_packages.PythonPackagesRepository.install_by_file) – Install a Python package by uploading a source distribution or wheel file.
+- [**install_by_name**](#cmem_client.repositories.python_packages.PythonPackagesRepository.install_by_name) – Install or reinstall a Python package by pip requirement specifier.
+- [**items**](#cmem_client.repositories.python_packages.PythonPackagesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.python_packages.PythonPackagesRepository.keys) – Get the keys of the repository
+- [**list_plugins**](#cmem_client.repositories.python_packages.PythonPackagesRepository.list_plugins) – List all discovered and registered workspace plugins.
+- [**reload_plugins**](#cmem_client.repositories.python_packages.PythonPackagesRepository.reload_plugins) – Reload all installed plugins and return the server response.
+- [**values**](#cmem_client.repositories.python_packages.PythonPackagesRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.python_packages.PythonPackagesRepository.logger) (Logger) – Gets the client logger
+
+### `delete_all` {#cmem_client.repositories.python_packages.PythonPackagesRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+This overwrites the default protocol method and utilizes an internal behaviour of the server
+to wipe the whole python environment.
+
+### `delete_item` {#cmem_client.repositories.python_packages.PythonPackagesRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.python_packages.PythonPackagesRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `install_by_file` {#cmem_client.repositories.python_packages.PythonPackagesRepository.install_by_file}
+
+```python
+install_by_file(package_path)
+```
+
+Install a Python package by uploading a source distribution or wheel file.
+
+**Parameters:**
+
+- **package_path** (Path) – Path to a .tar.gz or .whl package file.
+
+**Returns:**
+
+- [PythonInstallResult](../models/python_install.md#cmem_client.models.python_install.PythonInstallResult) – A PythonInstallResult with the server response and any plugin registration errors.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the upload request fails.
+
+### `install_by_name` {#cmem_client.repositories.python_packages.PythonPackagesRepository.install_by_name}
+
+```python
+install_by_name(requirement)
+```
+
+Install or reinstall a Python package by pip requirement specifier.
+
+**Parameters:**
+
+- **requirement** ([PipRequirementSpecifier](../models/python_package.md#cmem_client.models.python_package.PipRequirementSpecifier)) – A PEP 440/508 requirement specifier (e.g. 'requests', 'requests>=2.0').
+
+**Returns:**
+
+- [PythonInstallResult](../models/python_install.md#cmem_client.models.python_install.PythonInstallResult) – A PythonInstallResult with the server response and any plugin registration errors.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the install request fails.
+
+### `items` {#cmem_client.repositories.python_packages.PythonPackagesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.python_packages.PythonPackagesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `list_plugins` {#cmem_client.repositories.python_packages.PythonPackagesRepository.list_plugins}
+
+```python
+list_plugins()
+```
+
+List all discovered and registered workspace plugins.
+
+**Returns:**
+
+- list[[WorkspacePlugin](../models/workspace_plugin.md#cmem_client.models.workspace_plugin.WorkspacePlugin)] – A list of WorkspacePlugin instances representing all plugins discovered
+- list[[WorkspacePlugin](../models/workspace_plugin.md#cmem_client.models.workspace_plugin.WorkspacePlugin)] – from installed packages. Handles both the legacy plain-list response
+- list[[WorkspacePlugin](../models/workspace_plugin.md#cmem_client.models.workspace_plugin.WorkspacePlugin)] – (DI <= 22.1) and the current object response with a ``plugins`` key
+- list[[WorkspacePlugin](../models/workspace_plugin.md#cmem_client.models.workspace_plugin.WorkspacePlugin)] – (DI >= 22.1.1).
+
+### `logger` {#cmem_client.repositories.python_packages.PythonPackagesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `reload_plugins` {#cmem_client.repositories.python_packages.PythonPackagesRepository.reload_plugins}
+
+```python
+reload_plugins()
+```
+
+Reload all installed plugins and return the server response.
+
+Triggers plugin discovery and registration for all installed packages.
+Use this after manual package changes or to recover from a partial
+installation state.
+
+**Returns:**
+
+- [PluginReloadResult](../models/python_install.md#cmem_client.models.python_install.PluginReloadResult) – A PluginReloadResult which may contain plugin registration errors.
+
+### `values` {#cmem_client.repositories.python_packages.PythonPackagesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/queries.md b/docs/develop/cmem-client-api/repositories/queries.md
new file mode 100644
index 000000000..f9c2e6d18
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/queries.md
@@ -0,0 +1,515 @@
+# `queries` {#cmem_client.repositories.queries}
+
+Repository for managing queries from the Corporate Memory query catalog.
+
+Provides QueriesRepository class for accessing queries stored in RDF catalog graphs.
+Queries are fetched using the query catalog REST API.
+
+**Examples:**
+
+Browse the catalog and fetch a single query:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for url in client.queries:
+... print(url, client.queries[url].label)
+>>> client.queries.get("https://ns.eccenca.com/data/queries/my-query")
+```
+
+Run a SPARQL query without storing it in the catalog:
+
+```pycon
+>>> client.queries.execute_query("SELECT ?s WHERE { ?s ?p ?o } LIMIT 10")
+```
+
+See the individual methods for executing, explaining and cancelling queries.
+
+**Classes:**
+
+- [**QueriesCreateConfig**](#cmem_client.repositories.queries.QueriesCreateConfig) – Configuration for creating queries.
+- [**QueriesDeleteConfig**](#cmem_client.repositories.queries.QueriesDeleteConfig) – Configuration for deleting queries.
+- [**QueriesExportConfig**](#cmem_client.repositories.queries.QueriesExportConfig) – Configuration for exporting queries.
+- [**QueriesRepository**](#cmem_client.repositories.queries.QueriesRepository) – Repository for query catalog queries.
+- [**QueriesUpdateConfig**](#cmem_client.repositories.queries.QueriesUpdateConfig) – Configuration for updating queries.
+
+## `QueriesCreateConfig` {#cmem_client.repositories.queries.QueriesCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Configuration for creating queries.
+
+**Attributes:**
+
+- [**catalog_graph**](#cmem_client.repositories.queries.QueriesCreateConfig.catalog_graph) (str | None) – URI of the query catalog graph to operate on. If None, the catalog graph
+configured on the repository is used.
+
+### `catalog_graph` {#cmem_client.repositories.queries.QueriesCreateConfig.catalog_graph}
+
+```python
+catalog_graph: str | None = None
+```
+
+### `model_config` {#cmem_client.repositories.queries.QueriesCreateConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `QueriesDeleteConfig` {#cmem_client.repositories.queries.QueriesDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Configuration for deleting queries.
+
+**Attributes:**
+
+- [**catalog_graph**](#cmem_client.repositories.queries.QueriesDeleteConfig.catalog_graph) (str | None) – URI of the query catalog graph to operate on. If None, the catalog graph
+configured on the repository is used.
+
+### `catalog_graph` {#cmem_client.repositories.queries.QueriesDeleteConfig.catalog_graph}
+
+```python
+catalog_graph: str | None = None
+```
+
+### `model_config` {#cmem_client.repositories.queries.QueriesDeleteConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+## `QueriesExportConfig` {#cmem_client.repositories.queries.QueriesExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Configuration for exporting queries.
+
+**Attributes:**
+
+- **model_config** –
+
+## `QueriesRepository` {#cmem_client.repositories.queries.QueriesRepository}
+
+```python
+QueriesRepository(client, catalog_graph=None)
+```
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for query catalog queries.
+
+This repository manages queries stored in Corporate Memory RDF catalog graphs.
+Queries are described using the SHACL UI vocabulary and accessed via the
+query catalog REST API endpoint.
+
+The repository provides full CRUD operations (create, read, update, delete)
+for catalog queries. For executing, explaining, or managing running queries,
+use the appropriate service components.
+
+**Attributes:**
+
+- [**DEFAULT_CATALOG_GRAPH**](#cmem_client.repositories.queries.QueriesRepository.DEFAULT_CATALOG_GRAPH) (str) – Catalog graph used when neither the constructor nor an operation
+configuration names one. Taken from ``Query.DEFAULT_NS``.
+
+**Functions:**
+
+- [**cancel_query**](#cmem_client.repositories.queries.QueriesRepository.cancel_query) – Cancel a running query.
+- [**create_item**](#cmem_client.repositories.queries.QueriesRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.queries.QueriesRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.queries.QueriesRepository.delete_item) – Delete an item from the repository
+- [**execute_query**](#cmem_client.repositories.queries.QueriesRepository.execute_query) – Execute a SPARQL query and return results.
+- [**explain_query**](#cmem_client.repositories.queries.QueriesRepository.explain_query) – Get the logical plan explanation for a SPARQL query.
+- [**export_item**](#cmem_client.repositories.queries.QueriesRepository.export_item) – Export an item from the repository to a file path.
+- [**fetch_data**](#cmem_client.repositories.queries.QueriesRepository.fetch_data) – Fetch queries from the catalog graph using the REST API.
+- [**get**](#cmem_client.repositories.queries.QueriesRepository.get) – Get a query by its identifier.
+- [**get_query_status**](#cmem_client.repositories.queries.QueriesRepository.get_query_status) – Get status of running and recently completed queries.
+- [**items**](#cmem_client.repositories.queries.QueriesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.queries.QueriesRepository.keys) – Get the keys of the repository
+- [**raise_modification_error**](#cmem_client.repositories.queries.QueriesRepository.raise_modification_error) – Raise an exception if needed
+- [**update_item**](#cmem_client.repositories.queries.QueriesRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.queries.QueriesRepository.values) – Get the values of the repository
+
+**Parameters:**
+
+- **client** ([Client](../index.md#cmem_client.client.Client)) – The Corporate Memory client instance.
+- **catalog_graph** (str | None) – URI of the catalog graph. If None, uses default catalog graph.
+
+### `DEFAULT_CATALOG_GRAPH` {#cmem_client.repositories.queries.QueriesRepository.DEFAULT_CATALOG_GRAPH}
+
+```python
+DEFAULT_CATALOG_GRAPH: str = Query.DEFAULT_NS
+```
+
+### `cancel_query` {#cmem_client.repositories.queries.QueriesRepository.cancel_query}
+
+```python
+cancel_query(query_id)
+```
+
+Cancel a running query.
+
+Attempts to cancel a query that is currently executing. The query
+is identified by its execution ID (not its catalog URI).
+
+**Parameters:**
+
+- **query_id** (str) – Execution ID of the query to cancel (from get_query_status).
+
+**Raises:**
+
+- HTTPStatusError – If the cancel request fails (e.g., query
+not found, already completed, or insufficient permissions).
+
+**Examples:**
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> [status.id for status in client.queries.get_query_status()]
+```
+
+Passing one of those IDs cancels that query. That call is described rather
+than shown running: which queries are in flight depends on what the
+deployment happens to be doing, and one which finishes between listing and
+cancelling makes the cancel fail with a 404.
+
+
+Note
+
+This endpoint requires admin privileges in Corporate Memory.
+Not all queries can be cancelled depending on their execution state.
+
+
+
+### `create_item` {#cmem_client.repositories.queries.QueriesRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.queries.QueriesRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.queries.QueriesRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `execute_query` {#cmem_client.repositories.queries.QueriesRepository.execute_query}
+
+```python
+execute_query(query, accept=None, owl_imports_resolution=True, base64_encoded=False, distinct=False, limit=None, offset=None, timeout=None)
+```
+
+Execute a SPARQL query and return results.
+
+Executes a SPARQL query (SELECT, ASK, DESCRIBE, CONSTRUCT) or update
+operation (INSERT, DELETE, etc.) and returns the raw response.
+
+**Parameters:**
+
+- **query** (str | [Query](../models/query_catalog.md#cmem_client.models.query_catalog.Query)) – SPARQL query string or Query object to execute.
+- **accept** (str | None) – Accept header for response format. If None, uses default based
+on query type (text/csv for SELECT, text/turtle for DESCRIBE, etc.).
+- **owl_imports_resolution** (bool) – Enable owl:imports resolution (default: True).
+When enabled, graphs that import other graphs via owl:imports will
+be queried as merged overall-graphs.
+- **base64_encoded** (bool) – Enable base64 encoding of query parameter (default: False).
+Useful when aggressive firewalls block SPARQL queries.
+- **distinct** (bool) – Override SELECT query to make result set DISTINCT (default: False).
+- **limit** (int | None) – Override or set LIMIT in SELECT query.
+- **offset** (int | None) – Override or set OFFSET in SELECT query.
+- **timeout** (int | None) – Max execution time in milliseconds.
+
+**Returns:**
+
+- str – Raw query results as string in the requested format.
+
+**Raises:**
+
+- HTTPStatusError – If the query execution fails.
+- ValueError – If query text is invalid or placeholders are unfilled.
+
+**Examples:**
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> results = client.queries.execute_query("SELECT * WHERE { ?s ?p ?o } LIMIT 10")
+>>> print(results)
+```
+
+
+Note
+
+For parameterized queries with placeholders, use Query object with
+fill_placeholders() first, or use get() to fetch from catalog.
+
+
+
+### `explain_query` {#cmem_client.repositories.queries.QueriesRepository.explain_query}
+
+```python
+explain_query(query)
+```
+
+Get the logical plan explanation for a SPARQL query.
+
+Calls the query catalog API to get the logical plan for a given SPARQL query,
+which provides information about query optimization, execution order, and
+estimated complexity.
+
+The logical plan includes:
+- Optimization groups and their evaluation order
+- Collection sizes and complexity estimates
+- Unique subject and object counts
+- Estimated number of iterations
+
+**Parameters:**
+
+- **query** (str | [Query](../models/query_catalog.md#cmem_client.models.query_catalog.Query)) – The SPARQL query string or Query object to explain.
+
+**Returns:**
+
+- [LogicalPlan](../models/query_catalog.md#cmem_client.models.query_catalog.LogicalPlan) – A LogicalPlan object containing the formatted query execution plan.
+
+**Raises:**
+
+- HTTPStatusError – If the API request fails due to HTTP errors.
+- RequestError – If the API request fails due to network errors.
+
+**Examples:**
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> plan = client.queries.explain_query("SELECT * WHERE { ?s ?p ?o }")
+>>> print(plan.plan)
+```
+
+
+Note
+
+This operation analyzes the query structure and provides an execution
+plan without actually executing the query against data.
+
+
+
+### `export_item` {#cmem_client.repositories.queries.QueriesRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `fetch_data` {#cmem_client.repositories.queries.QueriesRepository.fetch_data}
+
+```python
+fetch_data(catalog_graph=None, lang_pref='en')
+```
+
+Fetch queries from the catalog graph using the REST API.
+
+**Parameters:**
+
+- **catalog_graph** (str | None) – URI of the catalog graph. If None, uses the graph
+specified during initialization.
+- **lang_pref** (str) – Language preference for labels (default: "en").
+
+**Raises:**
+
+- HTTPStatusError – If fetching the catalog fails.
+
+### `get` {#cmem_client.repositories.queries.QueriesRepository.get}
+
+```python
+get(key, default=None, catalog_graph=None)
+```
+
+Get a query by its identifier.
+
+Supports multiple identifier formats:
+- Full URI: https://ns.eccenca.com/data/queries/myQuery
+- Short URI (qname): :myQuery (uses default namespace)
+
+Note: File paths are not supported. For file-based queries, create a
+Query object directly by reading the file content.
+
+**Parameters:**
+
+- **key** (str) – Query identifier (full URI or short URI).
+- **default** ([Query](../models/query_catalog.md#cmem_client.models.query_catalog.Query) | None) – Value to return if the query is not found.
+- **catalog_graph** (str | None) – URI of the catalog graph. If None, uses the graph
+specified during initialization.
+
+**Returns:**
+
+- [Query](../models/query_catalog.md#cmem_client.models.query_catalog.Query) | None – The Query object if found, otherwise the default value.
+
+### `get_query_status` {#cmem_client.repositories.queries.QueriesRepository.get_query_status}
+
+```python
+get_query_status()
+```
+
+Get status of running and recently completed queries.
+
+Retrieves information about currently executing and recently finished
+queries, including timing data, user information, and trace IDs.
+
+**Returns:**
+
+- list[[QueryStatus](../models/query_catalog.md#cmem_client.models.query_catalog.QueryStatus)] – List of QueryStatus objects for active/recent queries.
+
+**Raises:**
+
+- HTTPStatusError – If the status request fails.
+
+**Examples:**
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> statuses = client.queries.get_query_status()
+>>> for status in statuses:
+... print(f"{status.id}: {status.status}")
+```
+
+
+Note
+
+This endpoint requires admin privileges in Corporate Memory.
+
+
+
+### `items` {#cmem_client.repositories.queries.QueriesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.queries.QueriesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.queries.QueriesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.queries.QueriesRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `update_item` {#cmem_client.repositories.queries.QueriesRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.queries.QueriesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `QueriesUpdateConfig` {#cmem_client.repositories.queries.QueriesUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Configuration for updating queries.
+
+**Attributes:**
+
+- [**catalog_graph**](#cmem_client.repositories.queries.QueriesUpdateConfig.catalog_graph) (str | None) – URI of the query catalog graph to operate on. If None, the catalog graph
+configured on the repository is used.
+
+### `catalog_graph` {#cmem_client.repositories.queries.QueriesUpdateConfig.catalog_graph}
+
+```python
+catalog_graph: str | None = None
+```
+
+### `model_config` {#cmem_client.repositories.queries.QueriesUpdateConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
diff --git a/docs/develop/cmem-client-api/repositories/schedulers.md b/docs/develop/cmem-client-api/repositories/schedulers.md
new file mode 100644
index 000000000..bef17e518
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/schedulers.md
@@ -0,0 +1,157 @@
+# `schedulers` {#cmem_client.repositories.schedulers}
+
+Repository for the workflow schedulers of DataIntegration.
+
+Provides SchedulersRepository for listing the schedulers which trigger workflows, and
+for enabling or disabling a single one.
+
+**Examples:**
+
+List the schedulers and inspect one:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for scheduler_id in client.schedulers:
+... print(scheduler_id, client.schedulers[scheduler_id])
+```
+
+Disable a scheduler and enable it again:
+
+```pycon
+>>> client.schedulers.update_enabled("my-project:my-scheduler", enabled=False)
+>>> client.schedulers.update_enabled("my-project:my-scheduler", enabled=True)
+```
+
+**Classes:**
+
+- [**SchedulerUpdateConfig**](#cmem_client.repositories.schedulers.SchedulerUpdateConfig) – Configuration for updating schedulers.
+- [**SchedulersRepository**](#cmem_client.repositories.schedulers.SchedulersRepository) – Repository for managing workflow schedulers.
+
+## `SchedulerUpdateConfig` {#cmem_client.repositories.schedulers.SchedulerUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Configuration for updating schedulers.
+
+**Attributes:**
+
+- **model_config** –
+
+## `SchedulersRepository` {#cmem_client.repositories.schedulers.SchedulersRepository}
+
+Bases: [TaskSearchRepository](../repositories/base/task_search.md#cmem_client.repositories.base.task_search.TaskSearchRepository), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for managing workflow schedulers.
+
+Provides access to workflow schedulers in Corporate Memory. Schedulers
+execute workflows at specified intervals and are identified by a
+'project_id:scheduler_id' composite key.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.schedulers.SchedulersRepository.fetch_data) – Fetch a list from the DI task search endpoint via a type adapter.
+- [**get_task**](#cmem_client.repositories.schedulers.SchedulersRepository.get_task) – Get full task details from the API.
+- [**items**](#cmem_client.repositories.schedulers.SchedulersRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.schedulers.SchedulersRepository.keys) – Get the keys of the repository
+- [**update_enabled**](#cmem_client.repositories.schedulers.SchedulersRepository.update_enabled) – Update the enabled state of a scheduler.
+- [**update_item**](#cmem_client.repositories.schedulers.SchedulersRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.schedulers.SchedulersRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.schedulers.SchedulersRepository.logger) (Logger) – Gets the client logger
+
+### `fetch_data` {#cmem_client.repositories.schedulers.SchedulersRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a list from the DI task search endpoint via a type adapter.
+
+### `get_task` {#cmem_client.repositories.schedulers.SchedulersRepository.get_task}
+
+```python
+get_task(project_id, task_id, with_labels=True)
+```
+
+Get full task details from the API.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **task_id** (str) – The task ID.
+- **with_labels** (bool) – Whether to include labels in the response.
+
+**Returns:**
+
+- [TaskResponse](../models/task.md#cmem_client.models.task.TaskResponse) – The full task details as a TaskResponse model.
+
+### `items` {#cmem_client.repositories.schedulers.SchedulersRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.schedulers.SchedulersRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.schedulers.SchedulersRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `update_enabled` {#cmem_client.repositories.schedulers.SchedulersRepository.update_enabled}
+
+```python
+update_enabled(scheduler_id, enabled)
+```
+
+Update the enabled state of a scheduler.
+
+**Parameters:**
+
+- **scheduler_id** (str) – Composite scheduler ID in 'project_id:scheduler_id' format.
+- **enabled** (bool) – True to enable, False to disable.
+
+**Returns:**
+
+- bool – True if the state was changed, False if already in the desired state.
+
+### `update_item` {#cmem_client.repositories.schedulers.SchedulersRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.schedulers.SchedulersRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/user_accounts.md b/docs/develop/cmem-client-api/repositories/user_accounts.md
new file mode 100644
index 000000000..98e02ce30
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/user_accounts.md
@@ -0,0 +1,298 @@
+# `user_accounts` {#cmem_client.repositories.user_accounts}
+
+Repository for the Keycloak user accounts of a Corporate Memory deployment.
+
+Provides UserAccountRepository for creating, updating and deleting user accounts, for
+managing their group membership and for resetting their password. Accounts are keyed by
+their username, while the group operations take the internal Keycloak account ID.
+
+**Examples:**
+
+List the accounts and read one of them:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> list(client.user_accounts)
+>>> account = client.user_accounts["admin"]
+```
+
+Inspect the groups of the deployment and of a single account. Note that the group
+operations expect the internal account ID, not the username:
+
+```pycon
+>>> [group.name for group in client.user_accounts.list_groups()]
+>>> [group.name for group in client.user_accounts.get_user_groups(account.id)]
+```
+
+``reset_password()`` sets a new password for an account and
+``request_password_change()`` makes the account choose one at its next login. Both
+are described rather than shown running, because they change a credential which is
+in use, and unlike the workspace and the store, Keycloak is not restored afterwards.
+
+**Classes:**
+
+- [**UserAccountCreateConfig**](#cmem_client.repositories.user_accounts.UserAccountCreateConfig) – User account creation configuration.
+- [**UserAccountDeleteConfig**](#cmem_client.repositories.user_accounts.UserAccountDeleteConfig) – User account deletion configuration.
+- [**UserAccountRepository**](#cmem_client.repositories.user_accounts.UserAccountRepository) – Repository for Keycloak user accounts.
+- [**UserAccountUpdateConfig**](#cmem_client.repositories.user_accounts.UserAccountUpdateConfig) – User account update configuration.
+
+## `UserAccountCreateConfig` {#cmem_client.repositories.user_accounts.UserAccountCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+User account creation configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `UserAccountDeleteConfig` {#cmem_client.repositories.user_accounts.UserAccountDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+User account deletion configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `UserAccountRepository` {#cmem_client.repositories.user_accounts.UserAccountRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for Keycloak user accounts.
+
+Provides access to user accounts in the Corporate Memory Keycloak realm.
+Users are identified by their username and stored in a dictionary keyed by
+username.
+
+In addition to standard CRUD operations, this repository provides methods
+for group assignment, group listing, and password management.
+
+**Functions:**
+
+- [**assign_group**](#cmem_client.repositories.user_accounts.UserAccountRepository.assign_group) – Assign a group to a user.
+- [**create_item**](#cmem_client.repositories.user_accounts.UserAccountRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.user_accounts.UserAccountRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.user_accounts.UserAccountRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.user_accounts.UserAccountRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**get_user_groups**](#cmem_client.repositories.user_accounts.UserAccountRepository.get_user_groups) – Get groups assigned to a user.
+- [**items**](#cmem_client.repositories.user_accounts.UserAccountRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.user_accounts.UserAccountRepository.keys) – Get the keys of the repository
+- [**list_groups**](#cmem_client.repositories.user_accounts.UserAccountRepository.list_groups) – List all groups in the Keycloak realm.
+- [**raise_modification_error**](#cmem_client.repositories.user_accounts.UserAccountRepository.raise_modification_error) – Raise an exception if needed
+- [**request_password_change**](#cmem_client.repositories.user_accounts.UserAccountRepository.request_password_change) – Send a password-change request email to a user.
+- [**reset_password**](#cmem_client.repositories.user_accounts.UserAccountRepository.reset_password) – Reset the password for a user.
+- [**unassign_group**](#cmem_client.repositories.user_accounts.UserAccountRepository.unassign_group) – Remove a group from a user.
+- [**update_item**](#cmem_client.repositories.user_accounts.UserAccountRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.user_accounts.UserAccountRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.user_accounts.UserAccountRepository.logger) (Logger) – Gets the client logger
+
+### `assign_group` {#cmem_client.repositories.user_accounts.UserAccountRepository.assign_group}
+
+```python
+assign_group(user_id, group_id)
+```
+
+Assign a group to a user.
+
+**Parameters:**
+
+- **user_id** (str) – The Keycloak UUID of the user.
+- **group_id** (str) – The Keycloak UUID of the group.
+
+### `create_item` {#cmem_client.repositories.user_accounts.UserAccountRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.user_accounts.UserAccountRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.user_accounts.UserAccountRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.user_accounts.UserAccountRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `get_user_groups` {#cmem_client.repositories.user_accounts.UserAccountRepository.get_user_groups}
+
+```python
+get_user_groups(user_id)
+```
+
+Get groups assigned to a user.
+
+**Parameters:**
+
+- **user_id** (str) – The Keycloak UUID of the user.
+
+**Returns:**
+
+- list[[Group](../models/user.md#cmem_client.models.user.Group)] – List of Group objects currently assigned to the user.
+
+### `items` {#cmem_client.repositories.user_accounts.UserAccountRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.user_accounts.UserAccountRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `list_groups` {#cmem_client.repositories.user_accounts.UserAccountRepository.list_groups}
+
+```python
+list_groups()
+```
+
+List all groups in the Keycloak realm.
+
+**Returns:**
+
+- list[[Group](../models/user.md#cmem_client.models.user.Group)] – List of Group objects available in the realm.
+
+### `logger` {#cmem_client.repositories.user_accounts.UserAccountRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.user_accounts.UserAccountRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `request_password_change` {#cmem_client.repositories.user_accounts.UserAccountRepository.request_password_change}
+
+```python
+request_password_change(user_id)
+```
+
+Send a password-change request email to a user.
+
+**Parameters:**
+
+- **user_id** (str) – The Keycloak UUID of the user.
+
+### `reset_password` {#cmem_client.repositories.user_accounts.UserAccountRepository.reset_password}
+
+```python
+reset_password(user_id, value, temporary=False)
+```
+
+Reset the password for a user.
+
+**Parameters:**
+
+- **user_id** (str) – The Keycloak UUID of the user.
+- **value** (str) – The new password value.
+- **temporary** (bool) – If True, the user must change the password on next login.
+
+### `unassign_group` {#cmem_client.repositories.user_accounts.UserAccountRepository.unassign_group}
+
+```python
+unassign_group(user_id, group_id)
+```
+
+Remove a group from a user.
+
+**Parameters:**
+
+- **user_id** (str) – The Keycloak UUID of the user.
+- **group_id** (str) – The Keycloak UUID of the group.
+
+### `update_item` {#cmem_client.repositories.user_accounts.UserAccountRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.user_accounts.UserAccountRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `UserAccountUpdateConfig` {#cmem_client.repositories.user_accounts.UserAccountUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+User account update configuration.
+
+**Attributes:**
+
+- **model_config** –
+
diff --git a/docs/develop/cmem-client-api/repositories/validations.md b/docs/develop/cmem-client-api/repositories/validations.md
new file mode 100644
index 000000000..e3d861158
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/validations.md
@@ -0,0 +1,174 @@
+# `validations` {#cmem_client.repositories.validations}
+
+Repository for the SHACL validation batches of Corporate Memory.
+
+Provides ValidationsRepository for starting a validation of a context graph against a
+shape graph, for polling the batches which are running or finished, and for reading
+their aggregated or detailed results.
+
+**Examples:**
+
+Start a validation and read its result:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> batch_id = client.validations.start(
+... context_graph="https://ns.eccenca.com/data/config/"
+... )
+>>> client.validations.get_aggregation(batch_id)
+>>> client.validations.get_result(batch_id)
+```
+
+List the known batches and cancel a running one:
+
+```pycon
+>>> list(client.validations)
+>>> client.validations.cancel(batch_id)
+```
+
+**Classes:**
+
+- [**ValidationsRepository**](#cmem_client.repositories.validations.ValidationsRepository) – Repository for managing SHACL batch validation processes.
+
+## `ValidationsRepository` {#cmem_client.repositories.validations.ValidationsRepository}
+
+```python
+ValidationsRepository(client)
+```
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository)[[ValidationAggregation](../models/validation.md#cmem_client.models.validation.ValidationAggregation)]
+
+Repository for managing SHACL batch validation processes.
+
+The dict is keyed by batch ID and insertion order reflects execution start time.
+Not auto-fetched on init — call fetch_data() explicitly to populate.
+Use get_aggregation() to refresh the state of a single validation process,
+e.g. when polling a running process.
+
+**Functions:**
+
+- [**cancel**](#cmem_client.repositories.validations.ValidationsRepository.cancel) – Cancel a running validation process.
+- [**fetch_data**](#cmem_client.repositories.validations.ValidationsRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**get_aggregation**](#cmem_client.repositories.validations.ValidationsRepository.get_aggregation) – Fetch the aggregation summary of a single validation process fresh from the server.
+- [**get_result**](#cmem_client.repositories.validations.ValidationsRepository.get_result) – Get the full result of a validation process including all violations.
+- [**items**](#cmem_client.repositories.validations.ValidationsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.validations.ValidationsRepository.keys) – Get the keys of the repository
+- [**start**](#cmem_client.repositories.validations.ValidationsRepository.start) – Start a new batch validation process.
+- [**values**](#cmem_client.repositories.validations.ValidationsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.validations.ValidationsRepository.logger) (Logger) – Gets the client logger
+
+### `cancel` {#cmem_client.repositories.validations.ValidationsRepository.cancel}
+
+```python
+cancel(batch_id)
+```
+
+Cancel a running validation process.
+
+**Parameters:**
+
+- **batch_id** (str) – The batch validation process identifier.
+
+### `fetch_data` {#cmem_client.repositories.validations.ValidationsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `get_aggregation` {#cmem_client.repositories.validations.ValidationsRepository.get_aggregation}
+
+```python
+get_aggregation(batch_id)
+```
+
+Fetch the aggregation summary of a single validation process fresh from the server.
+
+**Parameters:**
+
+- **batch_id** (str) – The batch validation process identifier.
+
+**Returns:**
+
+- [ValidationAggregation](../models/validation.md#cmem_client.models.validation.ValidationAggregation) – The aggregation summary for the given process.
+
+**Raises:**
+
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – if an error occurs while fetching the aggregation.
+
+### `get_result` {#cmem_client.repositories.validations.ValidationsRepository.get_result}
+
+```python
+get_result(batch_id)
+```
+
+Get the full result of a validation process including all violations.
+
+**Parameters:**
+
+- **batch_id** (str) – The batch validation process identifier.
+
+**Returns:**
+
+- [ValidationResult](../models/validation.md#cmem_client.models.validation.ValidationResult) – The full validation result with all resource results and violations.
+
+### `items` {#cmem_client.repositories.validations.ValidationsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.validations.ValidationsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.validations.ValidationsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `start` {#cmem_client.repositories.validations.ValidationsRepository.start}
+
+```python
+start(context_graph, shape_graph=None, query=None, result_graph=None, replace=False, ignore_graph=None)
+```
+
+Start a new batch validation process.
+
+**Parameters:**
+
+- **context_graph** (str) – IRI of the data graph to validate.
+- **shape_graph** (str | None) – IRI of the shape catalog graph.
+- **query** (str | None) – SPARQL query to select resources for validation.
+- **result_graph** (str | None) – IRI of a graph to write validation results to.
+- **replace** (bool) – Whether to replace the result graph instead of appending.
+- **ignore_graph** (list[str] | None) – Graph IRIs excluded from resource selection.
+
+**Returns:**
+
+- str – The batch ID of the newly created validation process.
+
+### `values` {#cmem_client.repositories.validations.ValidationsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/variables.md b/docs/develop/cmem-client-api/repositories/variables.md
new file mode 100644
index 000000000..3d868bf52
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/variables.md
@@ -0,0 +1,227 @@
+# `variables` {#cmem_client.repositories.variables}
+
+Repository for the variables of DataIntegration projects.
+
+Provides VariablesRepository for creating, updating and deleting project variables.
+Variables are keyed by the composite key ``project_id:variable_name``, so a single
+repository spans the variables of all projects.
+
+**Examples:**
+
+Create a variable in a project and read its value back:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> from cmem_client.models.variable import Variable
+>>> client = Client.from_env()
+>>> client.variables.create_item(
+... Variable(name="greeting", project_id="my-project", value="hello")
+... )
+>>> client.variables["my-project:greeting"].value
+>>> client.variables.get_item("my-project", "greeting").value
+```
+
+List every variable of the deployment and delete one:
+
+```pycon
+>>> list(client.variables)
+>>> client.variables.delete_item("my-project:greeting")
+```
+
+**Classes:**
+
+- [**VariableCreateConfig**](#cmem_client.repositories.variables.VariableCreateConfig) – Variable creation configuration.
+- [**VariableDeleteConfig**](#cmem_client.repositories.variables.VariableDeleteConfig) – Variable deletion configuration.
+- [**VariableUpdateConfig**](#cmem_client.repositories.variables.VariableUpdateConfig) – Variable update configuration.
+- [**VariablesRepository**](#cmem_client.repositories.variables.VariablesRepository) – Repository for project variables.
+
+## `VariableCreateConfig` {#cmem_client.repositories.variables.VariableCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Variable creation configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `VariableDeleteConfig` {#cmem_client.repositories.variables.VariableDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Variable deletion configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `VariableUpdateConfig` {#cmem_client.repositories.variables.VariableUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Variable update configuration.
+
+**Attributes:**
+
+- **model_config** –
+
+## `VariablesRepository` {#cmem_client.repositories.variables.VariablesRepository}
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol)
+
+Repository for project variables.
+
+Manages project variables across all projects in the Corporate Memory
+DataIntegration (build) environment. Variables are fetched per project and
+stored with combined keys in the form ``project_id:variable_name``.
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.variables.VariablesRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.variables.VariablesRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.variables.VariablesRepository.delete_item) – Delete an item from the repository
+- [**fetch_data**](#cmem_client.repositories.variables.VariablesRepository.fetch_data) – Fetch all variables from all projects.
+- [**get_item**](#cmem_client.repositories.variables.VariablesRepository.get_item) – Get a single variable by project and name.
+- [**items**](#cmem_client.repositories.variables.VariablesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.variables.VariablesRepository.keys) – Get the keys of the repository
+- [**raise_modification_error**](#cmem_client.repositories.variables.VariablesRepository.raise_modification_error) – Raise an exception if needed
+- [**update_item**](#cmem_client.repositories.variables.VariablesRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.variables.VariablesRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.variables.VariablesRepository.logger) (Logger) – Gets the client logger
+
+### `create_item` {#cmem_client.repositories.variables.VariablesRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.variables.VariablesRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.variables.VariablesRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `fetch_data` {#cmem_client.repositories.variables.VariablesRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch all variables from all projects.
+
+### `get_item` {#cmem_client.repositories.variables.VariablesRepository.get_item}
+
+```python
+get_item(project_id, variable_name)
+```
+
+Get a single variable by project and name.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **variable_name** (str) – The variable name.
+
+**Returns:**
+
+- [Variable](../models/variable.md#cmem_client.models.variable.Variable) – Variable model.
+
+**Raises:**
+
+- HTTPStatusError – If the variable is not found or the request fails.
+
+### `items` {#cmem_client.repositories.variables.VariablesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.variables.VariablesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.variables.VariablesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `raise_modification_error` {#cmem_client.repositories.variables.VariablesRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `update_item` {#cmem_client.repositories.variables.VariablesRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.variables.VariablesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/vocabularies.md b/docs/develop/cmem-client-api/repositories/vocabularies.md
new file mode 100644
index 000000000..c3dad6a17
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/vocabularies.md
@@ -0,0 +1,285 @@
+# `vocabularies` {#cmem_client.repositories.vocabularies}
+
+Repository for managing vocabularies in Corporate Memory.
+
+Provides VocabulariesRepository class for listing, installing, and uninstalling
+vocabularies, and for reading the global vocabulary cache from DataIntegration.
+
+Installed vocabularies (and their labels) are read from the DataPlatform
+``/api/vocabs`` endpoint. Installable (not-yet-installed) vocabularies are resolved
+from the (optional, legacy) vocabulary catalog graph; on newer backends without a
+catalog graph there are none and only installed vocabularies are listed.
+
+Installing and uninstalling are kept for backwards compatibility but are slated to
+be superseded by the marketplace package command group. They resolve download URLs
+from the (optional) vocabulary catalog graph; when it is absent, there is nothing to
+install and callers should use the marketplace package command group instead.
+
+Graph-level operations (upload, delete, reload) are delegated to GraphsRepository
+to avoid duplication.
+
+**Examples:**
+
+List the installed vocabularies:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for vocabulary in client.vocabularies.list_vocabularies(filter_="installed"):
+... print(vocabulary.iri)
+```
+
+Install a vocabulary from the (legacy) catalog and drop it again:
+
+```pycon
+>>> urls = client.vocabularies.get_catalog_download_urls()
+>>> client.vocabularies.install(
+... iri="http://xmlns.com/foaf/0.1/", download_url=urls["http://xmlns.com/foaf/0.1/"]
+... )
+>>> client.vocabularies.uninstall("http://xmlns.com/foaf/0.1/")
+```
+
+Read the global vocabulary cache of DataIntegration:
+
+```pycon
+>>> client.vocabularies.get_global_cache()
+```
+
+**Classes:**
+
+- [**VocabulariesRepository**](#cmem_client.repositories.vocabularies.VocabulariesRepository) – Repository for Corporate Memory vocabularies.
+
+**Attributes:**
+
+- [**CATALOG_ENTRIES_QUERY**](#cmem_client.repositories.vocabularies.CATALOG_ENTRIES_QUERY) –
+- [**DEFAULT_CATALOG_GRAPH**](#cmem_client.repositories.vocabularies.DEFAULT_CATALOG_GRAPH) –
+- [**REMOVE_CATALOG_ENTRY_IF_NOT_INSTALLABLE**](#cmem_client.repositories.vocabularies.REMOVE_CATALOG_ENTRY_IF_NOT_INSTALLABLE) –
+- [**VocabularyFilter**](#cmem_client.repositories.vocabularies.VocabularyFilter) –
+
+## `CATALOG_ENTRIES_QUERY` {#cmem_client.repositories.vocabularies.CATALOG_ENTRIES_QUERY}
+
+```python
+CATALOG_ENTRIES_QUERY = '\nPREFIX dcat: \nPREFIX voaf: \nPREFIX skos: \nPREFIX vann: \nSELECT DISTINCT ?iri ?downloadUrl ?label ?prefix\nFROM <{graph}>\nWHERE {{\n ?iri a voaf:Vocabulary ;\n dcat:distribution ?distribution .\n OPTIONAL {{ ?distribution dcat:downloadURL ?url . }}\n BIND(COALESCE(?url, ?distribution) AS ?downloadUrl)\n OPTIONAL {{ ?iri skos:prefLabel ?label . }}\n OPTIONAL {{ ?iri vann:preferredNamespacePrefix ?prefix . }}\n}}\n'
+```
+
+## `DEFAULT_CATALOG_GRAPH` {#cmem_client.repositories.vocabularies.DEFAULT_CATALOG_GRAPH}
+
+```python
+DEFAULT_CATALOG_GRAPH = 'https://ns.eccenca.com/example/data/vocabs/'
+```
+
+## `REMOVE_CATALOG_ENTRY_IF_NOT_INSTALLABLE` {#cmem_client.repositories.vocabularies.REMOVE_CATALOG_ENTRY_IF_NOT_INSTALLABLE}
+
+```python
+REMOVE_CATALOG_ENTRY_IF_NOT_INSTALLABLE = '\nPREFIX dcat: \nWITH <{graph}>\nDELETE {{ ?s ?p ?o }}\nWHERE {{\n ?s ?p ?o .\n FILTER NOT EXISTS {{ ?s dcat:distribution ?downloadUrl . }}\n FILTER (STR(?s) = "{vocab}")\n}}\n'
+```
+
+## `VocabulariesRepository` {#cmem_client.repositories.vocabularies.VocabulariesRepository}
+
+Bases: [Repository](../repositories/base/abc.md#cmem_client.repositories.base.abc.Repository)[[Vocabulary](../models/vocabulary.md#cmem_client.models.vocabulary.Vocabulary)]
+
+Repository for Corporate Memory vocabularies.
+
+Lists vocabularies as the named graphs that declare an ``owl:Ontology`` resource
+and provides install, uninstall, and cache operations. Graph-level operations are
+delegated to the GraphsRepository via client.graphs.
+
+**Functions:**
+
+- [**fetch_data**](#cmem_client.repositories.vocabularies.VocabulariesRepository.fetch_data) – Fetch the installed vocabularies from the ``/api/vocabs`` endpoint.
+- [**get_catalog_download_urls**](#cmem_client.repositories.vocabularies.VocabulariesRepository.get_catalog_download_urls) – Return all available vocabulary IRIs and their download URLs from the catalog graph.
+- [**get_catalog_entries**](#cmem_client.repositories.vocabularies.VocabulariesRepository.get_catalog_entries) – Return installable vocabulary catalog entries keyed by IRI.
+- [**get_global_cache**](#cmem_client.repositories.vocabularies.VocabulariesRepository.get_global_cache) – Get the global vocabulary cache from DataIntegration.
+- [**install**](#cmem_client.repositories.vocabularies.VocabulariesRepository.install) – Install a vocabulary by downloading it and adding it as an owl:Ontology graph.
+- [**items**](#cmem_client.repositories.vocabularies.VocabulariesRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.vocabularies.VocabulariesRepository.keys) – Get the keys of the repository
+- [**list_vocabularies**](#cmem_client.repositories.vocabularies.VocabulariesRepository.list_vocabularies) – Return vocabularies filtered by installation status.
+- [**reload**](#cmem_client.repositories.vocabularies.VocabulariesRepository.reload) – Reload prefixes and vocabulary cache for the given IRI.
+- [**uninstall**](#cmem_client.repositories.vocabularies.VocabulariesRepository.uninstall) – Uninstall (delete) an installed vocabulary.
+- [**values**](#cmem_client.repositories.vocabularies.VocabulariesRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.vocabularies.VocabulariesRepository.logger) (Logger) – Gets the client logger
+
+### `fetch_data` {#cmem_client.repositories.vocabularies.VocabulariesRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch the installed vocabularies from the ``/api/vocabs`` endpoint.
+
+The endpoint reports the installed vocabularies together with their installation
+status (``installed``) and label. Installable vocabularies are resolved separately
+from the vocabulary catalog graph in :meth:`list_vocabularies`.
+
+### `get_catalog_download_urls` {#cmem_client.repositories.vocabularies.VocabulariesRepository.get_catalog_download_urls}
+
+```python
+get_catalog_download_urls(catalog_graph=DEFAULT_CATALOG_GRAPH)
+```
+
+Return all available vocabulary IRIs and their download URLs from the catalog graph.
+
+Queries the vocabulary catalog graph for entries that provide a download URL.
+If the catalog graph does not exist, an empty mapping is returned.
+
+**Parameters:**
+
+- **catalog_graph** (str) – URI of the vocabulary catalog graph to query.
+
+**Returns:**
+
+- dict[str, str] – Mapping of vocabulary IRI to download URL.
+
+### `get_catalog_entries` {#cmem_client.repositories.vocabularies.VocabulariesRepository.get_catalog_entries}
+
+```python
+get_catalog_entries(catalog_graph=DEFAULT_CATALOG_GRAPH)
+```
+
+Return installable vocabulary catalog entries keyed by IRI.
+
+Queries the vocabulary catalog graph for entries that provide an HTTP download URL
+and builds Vocabulary objects carrying the download URL and a human-readable label
+(``": "`` when both are available). If the catalog graph does not
+exist, an empty mapping is returned.
+
+**Parameters:**
+
+- **catalog_graph** (str) – URI of the vocabulary catalog graph to query.
+
+**Returns:**
+
+- dict[str, [Vocabulary](../models/vocabulary.md#cmem_client.models.vocabulary.Vocabulary)] – Mapping of vocabulary IRI to Vocabulary catalog entry.
+
+### `get_global_cache` {#cmem_client.repositories.vocabularies.VocabulariesRepository.get_global_cache}
+
+```python
+get_global_cache()
+```
+
+Get the global vocabulary cache from DataIntegration.
+
+**Returns:**
+
+- [VocabularyCache](../models/vocabulary.md#cmem_client.models.vocabulary.VocabularyCache) – The global vocabulary cache as a VocabularyCache model.
+
+### `install` {#cmem_client.repositories.vocabularies.VocabulariesRepository.install}
+
+```python
+install(iri, download_url, on_conflict=ImportConflictPolicy.REPLACE)
+```
+
+Install a vocabulary by downloading it and adding it as an owl:Ontology graph.
+
+The vocabulary content is downloaded from the given ``download_url`` (the URL is
+supplied by the caller; it is not resolved from any catalog). The graph upload and
+vocabulary registration are delegated to GraphsRepository.
+
+**Parameters:**
+
+- **iri** (str) – IRI of the vocabulary to install (used as the graph IRI).
+- **download_url** (str) – URL to download the vocabulary RDF file from.
+- **on_conflict** ([ImportConflictPolicy](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConflictPolicy)) – How to handle a graph that already exists. Defaults to REPLACE.
+
+**Raises:**
+
+- HTTPError – If the download request fails.
+
+### `items` {#cmem_client.repositories.vocabularies.VocabulariesRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.vocabularies.VocabulariesRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `list_vocabularies` {#cmem_client.repositories.vocabularies.VocabulariesRepository.list_vocabularies}
+
+```python
+list_vocabularies(filter_='all', catalog_graph=DEFAULT_CATALOG_GRAPH)
+```
+
+Return vocabularies filtered by installation status.
+
+Installed vocabularies (and their labels) come from the ``/api/vocabs`` endpoint.
+Installable vocabularies are the catalog-graph entries that provide a download URL
+and are not yet installed; when the catalog graph does not exist there are none.
+
+**Parameters:**
+
+- **filter_** ([VocabularyFilter](#cmem_client.repositories.vocabularies.VocabularyFilter)) – One of "all", "installed", or "installable".
+- **catalog_graph** (str) – URI of the vocabulary catalog graph used to resolve installable
+vocabularies (ignored for the "installed" filter).
+
+**Returns:**
+
+- list[[Vocabulary](../models/vocabulary.md#cmem_client.models.vocabulary.Vocabulary)] – Filtered list of Vocabulary objects.
+
+### `logger` {#cmem_client.repositories.vocabularies.VocabulariesRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `reload` {#cmem_client.repositories.vocabularies.VocabulariesRepository.reload}
+
+```python
+reload(iri)
+```
+
+Reload prefixes and vocabulary cache for the given IRI.
+
+Delegates to GraphsRepository._reload_vocabularies which handles
+both the DI prefix reload and the global vocabulary cache update.
+
+**Parameters:**
+
+- **iri** (str) – IRI of the vocabulary to reload.
+
+### `uninstall` {#cmem_client.repositories.vocabularies.VocabulariesRepository.uninstall}
+
+```python
+uninstall(iri, catalog_graph=DEFAULT_CATALOG_GRAPH)
+```
+
+Uninstall (delete) an installed vocabulary.
+
+Delegates the graph deletion (and prefix/cache reload) to GraphsRepository,
+then removes the catalog entry if it has no download URL.
+
+**Parameters:**
+
+- **iri** (str) – IRI of the vocabulary to uninstall.
+- **catalog_graph** (str) – URI of the vocabulary catalog graph.
+
+**Raises:**
+
+- [VocabularyUninstallError](../exceptions.md#cmem_client.exceptions.VocabularyUninstallError) – If the vocabulary is not installed.
+
+### `values` {#cmem_client.repositories.vocabularies.VocabulariesRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `VocabularyFilter` {#cmem_client.repositories.vocabularies.VocabularyFilter}
+
+```python
+VocabularyFilter = Literal['all', 'installed', 'installable']
+```
+
diff --git a/docs/develop/cmem-client-api/repositories/workflows.md b/docs/develop/cmem-client-api/repositories/workflows.md
new file mode 100644
index 000000000..f1ca74c79
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/workflows.md
@@ -0,0 +1,241 @@
+# `workflows` {#cmem_client.repositories.workflows}
+
+Repository for the workflows of DataIntegration projects.
+
+Provides WorkflowsRepository for listing workflows and for starting them, polling
+their execution status and running them with input or output payloads.
+
+**Examples:**
+
+List the workflows of the deployment:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> for workflow_id in client.workflows:
+... print(workflow_id, client.workflows[workflow_id].label)
+```
+
+Start a workflow and wait until it finished:
+
+```pycon
+>>> client.workflows.execute("my-project:my-workflow")
+>>> client.workflows.get_status("my-project:my-workflow")
+>>> client.workflows.execute_wait_for_completion("my-project:my-workflow")
+```
+
+Look at the status of every workflow currently known:
+
+```pycon
+>>> client.workflows.get_all_statuses()
+```
+
+**Classes:**
+
+- [**WorkflowsRepository**](#cmem_client.repositories.workflows.WorkflowsRepository) – Repository for managing workflows in Corporate Memory.
+
+## `WorkflowsRepository` {#cmem_client.repositories.workflows.WorkflowsRepository}
+
+Bases: [TaskSearchRepository](../repositories/base/task_search.md#cmem_client.repositories.base.task_search.TaskSearchRepository)
+
+Repository for managing workflows in Corporate Memory.
+
+The dict (keys, values, items) is populated via the task search API which returns
+workflows with io info (variableInputs/variableOutputs) and tags in a single call.
+Operational methods (execute, get_status, execute_io, etc.) are independent of
+the dict and hit dedicated activity/result endpoints.
+
+**Functions:**
+
+- [**execute**](#cmem_client.repositories.workflows.WorkflowsRepository.execute) – Execute the workflow without waiting for completion.
+- [**execute_io**](#cmem_client.repositories.workflows.WorkflowsRepository.execute_io) – Execute a workflow with variable input/output as a streaming context manager.
+- [**execute_wait_for_completion**](#cmem_client.repositories.workflows.WorkflowsRepository.execute_wait_for_completion) – Execute the workflow and block until it finishes.
+- [**fetch_data**](#cmem_client.repositories.workflows.WorkflowsRepository.fetch_data) – Fetch a list from the DI task search endpoint via a type adapter.
+- [**get_all_statuses**](#cmem_client.repositories.workflows.WorkflowsRepository.get_all_statuses) – Get status information for multiple workflow activities.
+- [**get_status**](#cmem_client.repositories.workflows.WorkflowsRepository.get_status) – Get the current status of a workflow activity.
+- [**get_task**](#cmem_client.repositories.workflows.WorkflowsRepository.get_task) – Get full task details from the API.
+- [**get_workflow_editor_url**](#cmem_client.repositories.workflows.WorkflowsRepository.get_workflow_editor_url) – Get the URL to open a workflow in the workbench editor.
+- [**items**](#cmem_client.repositories.workflows.WorkflowsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.workflows.WorkflowsRepository.keys) – Get the keys of the repository
+- [**values**](#cmem_client.repositories.workflows.WorkflowsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.workflows.WorkflowsRepository.logger) (Logger) – Gets the client logger
+
+### `execute` {#cmem_client.repositories.workflows.WorkflowsRepository.execute}
+
+```python
+execute(workflow_id, activity_name='ExecuteDefaultWorkflow')
+```
+
+Execute the workflow without waiting for completion.
+
+**Parameters:**
+
+- **workflow_id** (str) – The workflow to execute (in the form of 'project_id:workflow_id')
+- **activity_name** ([ACTIVITY_NAME](../models/workflow.md#cmem_client.models.workflow.ACTIVITY_NAME)) – Name of the activity
+
+**Raises:**
+
+- [WorkflowExecutionError](../exceptions.md#cmem_client.exceptions.WorkflowExecutionError) – If the workflow execution failed.
+
+### `execute_io` {#cmem_client.repositories.workflows.WorkflowsRepository.execute_io}
+
+```python
+execute_io(workflow_id, input_file=None, input_mime_type='application/xml', output_mime_type='application/xml', auto_config=False)
+```
+
+Execute a workflow with variable input/output as a streaming context manager.
+
+**Parameters:**
+
+- **workflow_id** (str) – Workflow ID in the form 'project_id:task_id'.
+- **input_file** (str | None) – Optional path to the input file.
+- **input_mime_type** (str) – MIME type of the input file.
+- **output_mime_type** (str) – MIME type expected for the output.
+- **auto_config** (bool) – Whether to enable auto-configuration of input datasets.
+
+**Yields:**
+
+- Generator[Response] – httpx.Response: Streaming response from the workflow execution.
+
+**Raises:**
+
+- [WorkflowExecutionError](../exceptions.md#cmem_client.exceptions.WorkflowExecutionError) – If the request fails.
+
+### `execute_wait_for_completion` {#cmem_client.repositories.workflows.WorkflowsRepository.execute_wait_for_completion}
+
+```python
+execute_wait_for_completion(workflow_id, activity_name='ExecuteDefaultWorkflow', sleep_time=1)
+```
+
+Execute the workflow and block until it finishes.
+
+**Parameters:**
+
+- **workflow_id** (str) – The workflow to execute (in the form of 'project_id:workflow_id')
+- **activity_name** ([ACTIVITY_NAME](../models/workflow.md#cmem_client.models.workflow.ACTIVITY_NAME)) – Activity name. Defaults to "ExecuteDefaultWorkflow".
+- **sleep_time** (int) – Seconds to sleep between status polls. Defaults to 1.
+
+**Raises:**
+
+- [WorkflowExecutionError](../exceptions.md#cmem_client.exceptions.WorkflowExecutionError) – If workflow execution failed.
+
+### `fetch_data` {#cmem_client.repositories.workflows.WorkflowsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch a list from the DI task search endpoint via a type adapter.
+
+### `get_all_statuses` {#cmem_client.repositories.workflows.WorkflowsRepository.get_all_statuses}
+
+```python
+get_all_statuses(project_id=None, status_filter=None, activity_type=None)
+```
+
+Get status information for multiple workflow activities.
+
+**Parameters:**
+
+- **project_id** (str | None) – Optional project ID to filter by.
+- **status_filter** (str | None) – Optional status filter (e.g. "Finished", "Running").
+- **activity_type** (str | None) – Optional activity type to filter by (e.g. "ExecuteDefaultWorkflow").
+
+**Returns:**
+
+- list[[WorkflowStatus](../models/workflow.md#cmem_client.models.workflow.WorkflowStatus)] – List of WorkflowStatus objects.
+
+**Raises:**
+
+- [WorkflowReadError](../exceptions.md#cmem_client.exceptions.WorkflowReadError) – If the status fetch request fails.
+
+### `get_status` {#cmem_client.repositories.workflows.WorkflowsRepository.get_status}
+
+```python
+get_status(workflow_id, activity_name='ExecuteDefaultWorkflow')
+```
+
+Get the current status of a workflow activity.
+
+**Parameters:**
+
+- **workflow_id** (str) – Workflow ID in the form 'project_id:workflow_id'.
+- **activity_name** ([ACTIVITY_NAME](../models/workflow.md#cmem_client.models.workflow.ACTIVITY_NAME)) – Activity to check. Defaults to "ExecuteDefaultWorkflow".
+
+**Returns:**
+
+- [WorkflowStatus](../models/workflow.md#cmem_client.models.workflow.WorkflowStatus) – WorkflowStatus with current state, progress, and message.
+
+**Raises:**
+
+- [WorkflowReadError](../exceptions.md#cmem_client.exceptions.WorkflowReadError) – If the status fetch request fails.
+
+### `get_task` {#cmem_client.repositories.workflows.WorkflowsRepository.get_task}
+
+```python
+get_task(project_id, task_id, with_labels=True)
+```
+
+Get full task details from the API.
+
+**Parameters:**
+
+- **project_id** (str) – The project ID.
+- **task_id** (str) – The task ID.
+- **with_labels** (bool) – Whether to include labels in the response.
+
+**Returns:**
+
+- [TaskResponse](../models/task.md#cmem_client.models.task.TaskResponse) – The full task details as a TaskResponse model.
+
+### `get_workflow_editor_url` {#cmem_client.repositories.workflows.WorkflowsRepository.get_workflow_editor_url}
+
+```python
+get_workflow_editor_url(workflow_id)
+```
+
+Get the URL to open a workflow in the workbench editor.
+
+**Parameters:**
+
+- **workflow_id** (str) – Workflow ID in the form 'project_id:task_id'.
+
+**Returns:**
+
+- str – URL string for the workflow editor.
+
+### `items` {#cmem_client.repositories.workflows.WorkflowsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.workflows.WorkflowsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.workflows.WorkflowsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `values` {#cmem_client.repositories.workflows.WorkflowsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
diff --git a/docs/develop/cmem-client-api/repositories/workspace_configs.md b/docs/develop/cmem-client-api/repositories/workspace_configs.md
new file mode 100644
index 000000000..3fcc107aa
--- /dev/null
+++ b/docs/develop/cmem-client-api/repositories/workspace_configs.md
@@ -0,0 +1,353 @@
+# `workspace_configs` {#cmem_client.repositories.workspace_configs}
+
+Repository for the custom workspace configurations of DataIntegration.
+
+Provides WorkspaceConfigsRepository for reading, creating, updating and deleting the
+workspace configuration profiles, and for importing and exporting them as JSON. The
+effective default profile is merged from the system and project defaults.
+
+**Examples:**
+
+List the profiles and read the effective default:
+
+```pycon
+>>> from cmem_client.client import Client
+>>> client = Client.from_env()
+>>> list(client.workspace_configs)
+>>> client.workspace_configs["default"]
+>>> client.workspace_configs.project_default
+```
+
+Export a profile to a JSON file and import it into another deployment:
+
+```pycon
+>>> from pathlib import Path
+>>> from cmem_client.repositories.protocols.import_item import ImportConflictPolicy
+>>> from cmem_client.repositories.workspace_configs import WorkspaceConfigsImportConfig
+>>> client.workspace_configs.export_item(key="default", path=Path("profiles.json"))
+>>> client.workspace_configs.import_item(
+... path=Path("profiles.json"),
+... key="default",
+... on_conflict=ImportConflictPolicy.REPLACE,
+... configuration=WorkspaceConfigsImportConfig(replace_id=True),
+... )
+```
+
+**Classes:**
+
+- [**WorkspaceConfigsCreateConfig**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsCreateConfig) – Custom workspace configuration creation config.
+- [**WorkspaceConfigsDeleteConfig**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsDeleteConfig) – Custom workspace configuration deletion config.
+- [**WorkspaceConfigsExportConfig**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsExportConfig) – Custom workspace configuration export config.
+- [**WorkspaceConfigsImportConfig**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig) – Custom workspace configuration import config.
+- [**WorkspaceConfigsRepository**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository) – Repository for Explore (DataPlatform) workspace configurations.
+- [**WorkspaceConfigsUpdateConfig**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsUpdateConfig) – Custom workspace configuration update config.
+
+## `WorkspaceConfigsCreateConfig` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsCreateConfig}
+
+Bases: [CreateConfig](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateConfig)
+
+Custom workspace configuration creation config.
+
+**Attributes:**
+
+- **model_config** –
+
+## `WorkspaceConfigsDeleteConfig` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsDeleteConfig}
+
+Bases: [DeleteConfig](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteConfig)
+
+Custom workspace configuration deletion config.
+
+**Attributes:**
+
+- **model_config** –
+
+## `WorkspaceConfigsExportConfig` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsExportConfig}
+
+Bases: [ExportConfig](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportConfig)
+
+Custom workspace configuration export config.
+
+**Attributes:**
+
+- **model_config** –
+
+## `WorkspaceConfigsImportConfig` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig}
+
+Bases: [ImportConfig](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportConfig)
+
+Custom workspace configuration import config.
+
+**Attributes:**
+
+- [**use_archive_handler**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig.use_archive_handler) (bool) – Defaults to False here, unlike the base class, so the JSON file is
+read directly instead of being unpacked by the ArchiveHandler.
+- [**replace_id**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig.replace_id) (bool) – If True and the file contains exactly one configuration, adopt the given key
+as its id instead of failing because no entry matches the key.
+
+### `model_config` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig.model_config}
+
+```python
+model_config = ConfigDict(extra='allow', populate_by_name=True)
+```
+
+### `replace_id` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig.replace_id}
+
+```python
+replace_id: bool = False
+```
+
+### `use_archive_handler` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsImportConfig.use_archive_handler}
+
+```python
+use_archive_handler: bool = False
+```
+
+## `WorkspaceConfigsRepository` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository}
+
+Bases: [PlainListRepository](../repositories/base/plain_list.md#cmem_client.repositories.base.plain_list.PlainListRepository), [DeleteItemProtocol](../repositories/protocols/delete_item.md#cmem_client.repositories.protocols.delete_item.DeleteItemProtocol), [CreateItemProtocol](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemProtocol), [UpdateItemProtocol](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemProtocol), [ImportItemProtocol](../repositories/protocols/import_item.md#cmem_client.repositories.protocols.import_item.ImportItemProtocol), [ExportItemProtocol](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemProtocol)
+
+Repository for Explore (DataPlatform) workspace configurations.
+
+Provides access to all workspace configurations: the system default
+(fetched from /api/conf/workspaces/systemDefault) followed by custom
+workspace configurations (fetched from /api/conf/workspaces/customWorkspaces).
+Custom workspace configurations support full CRUD operations.
+
+**Functions:**
+
+- [**create_item**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.create_item) – Create (add) a new item to the repository
+- [**delete_all**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.delete_all) – Delete all items from the repository
+- [**delete_item**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.delete_item) – Delete an item from the repository
+- [**export_item**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.export_item) – Export an item from the repository to a file path.
+- [**fetch_data**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.fetch_data) – Fetch simple list from a JSON endpoint via a type adapter
+- [**get_export_payload**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.get_export_payload) – Return the export-ready payload for the given profile ID.
+- [**import_item**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.import_item) – Import an exported file to the repository
+- [**items**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.items) – Get the items of the repository
+- [**keys**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.keys) – Get the keys of the repository
+- [**migrate**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.migrate) – Trigger workspace configuration migration on the DataPlatform.
+- [**raise_modification_error**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.raise_modification_error) – Raise an exception if needed
+- [**update_item**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.update_item) – Update an existing item in the repository.
+- [**values**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.values) – Get the values of the repository
+
+**Attributes:**
+
+- [**logger**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.logger) (Logger) – Gets the client logger
+- [**project_default**](#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.project_default) ([WorkspaceConfig](../models/workspace_config.md#cmem_client.models.workspace_config.WorkspaceConfig)) – Return the raw project-level default overrides (not merged with system default).
+
+### `create_item` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.create_item}
+
+```python
+create_item(item, skip_if_existing=False, configuration=None)
+```
+
+Create (add) a new item to the repository
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to add to the repository
+- **skip_if_existing** (bool) – If true, creating already existing items will be ignored
+- **configuration** ([CreateItemConfig_contra](../repositories/protocols/create_item.md#cmem_client.repositories.protocols.create_item.CreateItemConfig_contra) | None) – Optional configuration
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `delete_all` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.delete_all}
+
+```python
+delete_all()
+```
+
+Delete all items from the repository
+
+### `delete_item` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.delete_item}
+
+```python
+delete_item(key, skip_if_missing=False, configuration=None)
+```
+
+Delete an item from the repository
+
+**Parameters:**
+
+- **key** (str) – The key of the item to delete
+- **skip_if_missing** (bool) – If True, it is ignored if the deleted item even exists
+- **configuration** (DeleteItemConfig) – Optional configuration for deletion
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – if an error occurs while creating the item
+- HTTPError – for any other http error
+
+### `export_item` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.export_item}
+
+```python
+export_item(key, path=None, replace=False, configuration=None)
+```
+
+Export an item from the repository to a file path.
+
+**Parameters:**
+
+- **key** (str) – The key identifying the item to export.
+- **path** (Path | None) – The target file path for export. If None, a path will be generated.
+- **replace** (bool) – Whether to replace existing files at the target path.
+- **configuration** ([ExportItemConfig_contra](../repositories/protocols/export_item.md#cmem_client.repositories.protocols.export_item.ExportItemConfig_contra) | None) – Optional configuration for export behavior.
+
+**Returns:**
+
+- Path – The actual path where the item was exported.
+
+**Raises:**
+
+- [RepositoryItemNotFoundError](../exceptions.md#cmem_client.exceptions.RepositoryItemNotFoundError) – If the specified item key is not found.
+- [RepositoryReadError](../exceptions.md#cmem_client.exceptions.RepositoryReadError) – If there's an error during export or path mismatch.
+
+### `fetch_data` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.fetch_data}
+
+```python
+fetch_data()
+```
+
+Fetch simple list from a JSON endpoint via a type adapter
+
+Use this method to fetch data when your result set is an array of objects.
+
+### `get_export_payload` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.get_export_payload}
+
+```python
+get_export_payload(key)
+```
+
+Return the export-ready payload for the given profile ID.
+
+For the default workspace, returns the raw project-level overrides
+(not merged with system defaults) to ensure a clean export/import round-trip.
+For custom workspaces, returns the full config excluding the computed label.
+
+**Parameters:**
+
+- **key** (str) – The profile ID of the workspace configuration to serialize.
+
+**Returns:**
+
+- dict – A dict ready for JSON serialization.
+
+### `import_item` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.import_item}
+
+```python
+import_item(path=None, key=None, on_conflict=ImportConflictPolicy.FAIL, configuration=None)
+```
+
+Import an exported file to the repository
+
+By default, automatically handles zip files, directories, and single files
+using ImportItem model. Can be disabled by setting use_archive_handler=False
+in the configuration.
+
+**Returns:**
+
+- str – The key of the imported item.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item already exists and the conflict
+policy is FAIL, if the import type is not allowed for this repository, if
+the import request failed, or if the item is not present afterwards.
+
+### `items` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.items}
+
+```python
+items()
+```
+
+Get the items of the repository
+
+### `keys` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.keys}
+
+```python
+keys()
+```
+
+Get the keys of the repository
+
+### `logger` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.logger}
+
+```python
+logger: logging.Logger
+```
+
+Gets the client logger
+
+### `migrate` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.migrate}
+
+```python
+migrate()
+```
+
+Trigger workspace configuration migration on the DataPlatform.
+
+Instructs the DataPlatform to migrate all workspace configurations
+that are flagged as needing migration (reported in StatusInfo.explore.workspaces_to_migrate).
+
+**Raises:**
+
+- HTTPStatusError – If the migration request fails.
+
+### `project_default` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.project_default}
+
+```python
+project_default: WorkspaceConfig
+```
+
+Return the raw project-level default overrides (not merged with system default).
+
+Use this for export to preserve the round-trip: export raw overrides,
+import back to projectDefault without accumulating redundant system values.
+
+### `raise_modification_error` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.raise_modification_error}
+
+```python
+raise_modification_error(response)
+```
+
+Raise an exception if needed
+
+### `update_item` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.update_item}
+
+```python
+update_item(item, configuration=None)
+```
+
+Update an existing item in the repository.
+
+**Parameters:**
+
+- **item** ([ItemType](../repositories/base/abc.md#cmem_client.repositories.base.abc.ItemType)) – The item to update in the repository.
+- **configuration** ([UpdateItemConfig_contra](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateItemConfig_contra) | None) – Optional configuration for the update operation.
+
+**Raises:**
+
+- [RepositoryModificationError](../exceptions.md#cmem_client.exceptions.RepositoryModificationError) – If the item does not exist or an error occurs.
+- HTTPError – For any other HTTP error.
+
+### `values` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsRepository.values}
+
+```python
+values()
+```
+
+Get the values of the repository
+
+## `WorkspaceConfigsUpdateConfig` {#cmem_client.repositories.workspace_configs.WorkspaceConfigsUpdateConfig}
+
+Bases: [UpdateConfig](../repositories/protocols/update_item.md#cmem_client.repositories.protocols.update_item.UpdateConfig)
+
+Custom workspace configuration update config.
+
+**Attributes:**
+
+- **model_config** –
+
diff --git a/docs/develop/index.md b/docs/develop/index.md
index 458f9a4dc..be843d8cf 100644
--- a/docs/develop/index.md
+++ b/docs/develop/index.md
@@ -19,7 +19,7 @@ API documentation and programming recipes.
---
- For Python developers, we offer a [Plugin SDK](python-plugins/index.md) as well as an API for accessing and manipulating Corporate Memory Instances ([cmem-cmempy](cmempy-python-api/index.md)).
+ For Python developers, we offer a [Plugin SDK](python-plugins/index.md) as well as an API for accessing and manipulating Corporate Memory Instances ([cmem-client](cmem-client-api/index.md)).
- :material-shopping: Marketplace Packages
diff --git a/poetry.lock b/poetry.lock
index 01f088d26..cfbe26048 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,180 +1,213 @@
-# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.3.3 and should not be changed by hand.
[[package]]
name = "aiohappyeyeballs"
-version = "2.6.1"
+version = "2.7.1"
description = "Happy Eyeballs for asyncio"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["dev"]
files = [
- {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"},
- {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"},
+ {file = "aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472"},
+ {file = "aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d"},
]
[[package]]
name = "aiohttp"
-version = "3.12.13"
+version = "3.14.3"
description = "Async http client/server framework (asyncio)"
optional = false
-python-versions = ">=3.9"
-files = [
- {file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5421af8f22a98f640261ee48aae3a37f0c41371e99412d55eaf2f8a46d5dad29"},
- {file = "aiohttp-3.12.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fcda86f6cb318ba36ed8f1396a6a4a3fd8f856f84d426584392083d10da4de0"},
- {file = "aiohttp-3.12.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cd71c9fb92aceb5a23c4c39d8ecc80389c178eba9feab77f19274843eb9412d"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34ebf1aca12845066c963016655dac897651e1544f22a34c9b461ac3b4b1d3aa"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:893a4639694c5b7edd4bdd8141be296042b6806e27cc1d794e585c43010cc294"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:663d8ee3ffb3494502ebcccb49078faddbb84c1d870f9c1dd5a29e85d1f747ce"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0f8f6a85a0006ae2709aa4ce05749ba2cdcb4b43d6c21a16c8517c16593aabe"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1582745eb63df267c92d8b61ca655a0ce62105ef62542c00a74590f306be8cb5"},
- {file = "aiohttp-3.12.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d59227776ee2aa64226f7e086638baa645f4b044f2947dbf85c76ab11dcba073"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06b07c418bde1c8e737d8fa67741072bd3f5b0fb66cf8c0655172188c17e5fa6"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9445c1842680efac0f81d272fd8db7163acfcc2b1436e3f420f4c9a9c5a50795"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:09c4767af0b0b98c724f5d47f2bf33395c8986995b0a9dab0575ca81a554a8c0"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f3854fbde7a465318ad8d3fc5bef8f059e6d0a87e71a0d3360bb56c0bf87b18a"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2332b4c361c05ecd381edb99e2a33733f3db906739a83a483974b3df70a51b40"},
- {file = "aiohttp-3.12.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1561db63fa1b658cd94325d303933553ea7d89ae09ff21cc3bcd41b8521fbbb6"},
- {file = "aiohttp-3.12.13-cp310-cp310-win32.whl", hash = "sha256:a0be857f0b35177ba09d7c472825d1b711d11c6d0e8a2052804e3b93166de1ad"},
- {file = "aiohttp-3.12.13-cp310-cp310-win_amd64.whl", hash = "sha256:fcc30ad4fb5cb41a33953292d45f54ef4066746d625992aeac33b8c681173178"},
- {file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7c229b1437aa2576b99384e4be668af1db84b31a45305d02f61f5497cfa6f60c"},
- {file = "aiohttp-3.12.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04076d8c63471e51e3689c93940775dc3d12d855c0c80d18ac5a1c68f0904358"},
- {file = "aiohttp-3.12.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:55683615813ce3601640cfaa1041174dc956d28ba0511c8cbd75273eb0587014"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:921bc91e602d7506d37643e77819cb0b840d4ebb5f8d6408423af3d3bf79a7b7"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e72d17fe0974ddeae8ed86db297e23dba39c7ac36d84acdbb53df2e18505a013"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0653d15587909a52e024a261943cf1c5bdc69acb71f411b0dd5966d065a51a47"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a77b48997c66722c65e157c06c74332cdf9c7ad00494b85ec43f324e5c5a9b9a"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6946bae55fd36cfb8e4092c921075cde029c71c7cb571d72f1079d1e4e013bc"},
- {file = "aiohttp-3.12.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f95db8c8b219bcf294a53742c7bda49b80ceb9d577c8e7aa075612b7f39ffb7"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:03d5eb3cfb4949ab4c74822fb3326cd9655c2b9fe22e4257e2100d44215b2e2b"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6383dd0ffa15515283c26cbf41ac8e6705aab54b4cbb77bdb8935a713a89bee9"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6548a411bc8219b45ba2577716493aa63b12803d1e5dc70508c539d0db8dbf5a"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:81b0fcbfe59a4ca41dc8f635c2a4a71e63f75168cc91026c61be665945739e2d"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a83797a0174e7995e5edce9dcecc517c642eb43bc3cba296d4512edf346eee2"},
- {file = "aiohttp-3.12.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5734d8469a5633a4e9ffdf9983ff7cdb512524645c7a3d4bc8a3de45b935ac3"},
- {file = "aiohttp-3.12.13-cp311-cp311-win32.whl", hash = "sha256:fef8d50dfa482925bb6b4c208b40d8e9fa54cecba923dc65b825a72eed9a5dbd"},
- {file = "aiohttp-3.12.13-cp311-cp311-win_amd64.whl", hash = "sha256:9a27da9c3b5ed9d04c36ad2df65b38a96a37e9cfba6f1381b842d05d98e6afe9"},
- {file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0aa580cf80558557285b49452151b9c69f2fa3ad94c5c9e76e684719a8791b73"},
- {file = "aiohttp-3.12.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b103a7e414b57e6939cc4dece8e282cfb22043efd0c7298044f6594cf83ab347"},
- {file = "aiohttp-3.12.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f64e748e9e741d2eccff9597d09fb3cd962210e5b5716047cbb646dc8fe06f"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c955989bf4c696d2ededc6b0ccb85a73623ae6e112439398935362bacfaaf6"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d640191016763fab76072c87d8854a19e8e65d7a6fcfcbf017926bdbbb30a7e5"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dc507481266b410dede95dd9f26c8d6f5a14315372cc48a6e43eac652237d9b"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a94daa873465d518db073bd95d75f14302e0208a08e8c942b2f3f1c07288a75"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f52420cde4ce0bb9425a375d95577fe082cb5721ecb61da3049b55189e4e6"},
- {file = "aiohttp-3.12.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f7df1f620ec40f1a7fbcb99ea17d7326ea6996715e78f71a1c9a021e31b96b8"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3062d4ad53b36e17796dce1c0d6da0ad27a015c321e663657ba1cc7659cfc710"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:8605e22d2a86b8e51ffb5253d9045ea73683d92d47c0b1438e11a359bdb94462"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54fbbe6beafc2820de71ece2198458a711e224e116efefa01b7969f3e2b3ddae"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:050bd277dfc3768b606fd4eae79dd58ceda67d8b0b3c565656a89ae34525d15e"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2637a60910b58f50f22379b6797466c3aa6ae28a6ab6404e09175ce4955b4e6a"},
- {file = "aiohttp-3.12.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e986067357550d1aaa21cfe9897fa19e680110551518a5a7cf44e6c5638cb8b5"},
- {file = "aiohttp-3.12.13-cp312-cp312-win32.whl", hash = "sha256:ac941a80aeea2aaae2875c9500861a3ba356f9ff17b9cb2dbfb5cbf91baaf5bf"},
- {file = "aiohttp-3.12.13-cp312-cp312-win_amd64.whl", hash = "sha256:671f41e6146a749b6c81cb7fd07f5a8356d46febdaaaf07b0e774ff04830461e"},
- {file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d4a18e61f271127465bdb0e8ff36e8f02ac4a32a80d8927aa52371e93cd87938"},
- {file = "aiohttp-3.12.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:532542cb48691179455fab429cdb0d558b5e5290b033b87478f2aa6af5d20ace"},
- {file = "aiohttp-3.12.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d7eea18b52f23c050ae9db5d01f3d264ab08f09e7356d6f68e3f3ac2de9dfabb"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad7c8e5c25f2a26842a7c239de3f7b6bfb92304593ef997c04ac49fb703ff4d7"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6af355b483e3fe9d7336d84539fef460120c2f6e50e06c658fe2907c69262d6b"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a95cf9f097498f35c88e3609f55bb47b28a5ef67f6888f4390b3d73e2bac6177"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8ed8c38a1c584fe99a475a8f60eefc0b682ea413a84c6ce769bb19a7ff1c5ef"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0b9170d5d800126b5bc89d3053a2363406d6e327afb6afaeda2d19ee8bb103"},
- {file = "aiohttp-3.12.13-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:372feeace612ef8eb41f05ae014a92121a512bd5067db8f25101dd88a8db11da"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a946d3702f7965d81f7af7ea8fb03bb33fe53d311df48a46eeca17e9e0beed2d"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a0c4725fae86555bbb1d4082129e21de7264f4ab14baf735278c974785cd2041"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b28ea2f708234f0a5c44eb6c7d9eb63a148ce3252ba0140d050b091b6e842d1"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d4f5becd2a5791829f79608c6f3dc745388162376f310eb9c142c985f9441cc1"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:60f2ce6b944e97649051d5f5cc0f439360690b73909230e107fd45a359d3e911"},
- {file = "aiohttp-3.12.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69fc1909857401b67bf599c793f2183fbc4804717388b0b888f27f9929aa41f3"},
- {file = "aiohttp-3.12.13-cp313-cp313-win32.whl", hash = "sha256:7d7e68787a2046b0e44ba5587aa723ce05d711e3a3665b6b7545328ac8e3c0dd"},
- {file = "aiohttp-3.12.13-cp313-cp313-win_amd64.whl", hash = "sha256:5a178390ca90419bfd41419a809688c368e63c86bd725e1186dd97f6b89c2706"},
- {file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:36f6c973e003dc9b0bb4e8492a643641ea8ef0e97ff7aaa5c0f53d68839357b4"},
- {file = "aiohttp-3.12.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6cbfc73179bd67c229eb171e2e3745d2afd5c711ccd1e40a68b90427f282eab1"},
- {file = "aiohttp-3.12.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e8b27b2d414f7e3205aa23bb4a692e935ef877e3a71f40d1884f6e04fd7fa74"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eabded0c2b2ef56243289112c48556c395d70150ce4220d9008e6b4b3dd15690"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:003038e83f1a3ff97409999995ec02fe3008a1d675478949643281141f54751d"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b6f46613031dbc92bdcaad9c4c22c7209236ec501f9c0c5f5f0b6a689bf50f3"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c332c6bb04650d59fb94ed96491f43812549a3ba6e7a16a218e612f99f04145e"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fea41a2c931fb582cb15dc86a3037329e7b941df52b487a9f8b5aa960153cbd"},
- {file = "aiohttp-3.12.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:846104f45d18fb390efd9b422b27d8f3cf8853f1218c537f36e71a385758c896"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d6c85ac7dd350f8da2520bac8205ce99df4435b399fa7f4dc4a70407073e390"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5a1ecce0ed281bec7da8550da052a6b89552db14d0a0a45554156f085a912f48"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5304d74867028cca8f64f1cc1215eb365388033c5a691ea7aa6b0dc47412f495"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:64d1f24ee95a2d1e094a4cd7a9b7d34d08db1bbcb8aa9fb717046b0a884ac294"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:119c79922a7001ca6a9e253228eb39b793ea994fd2eccb79481c64b5f9d2a055"},
- {file = "aiohttp-3.12.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bb18f00396d22e2f10cd8825d671d9f9a3ba968d708a559c02a627536b36d91c"},
- {file = "aiohttp-3.12.13-cp39-cp39-win32.whl", hash = "sha256:0022de47ef63fd06b065d430ac79c6b0bd24cdae7feaf0e8c6bac23b805a23a8"},
- {file = "aiohttp-3.12.13-cp39-cp39-win_amd64.whl", hash = "sha256:29e08111ccf81b2734ae03f1ad1cb03b9615e7d8f616764f22f71209c094f122"},
- {file = "aiohttp-3.12.13.tar.gz", hash = "sha256:47e2da578528264a12e4e3dd8dd72a7289e5f812758fe086473fab037a10fcce"},
+python-versions = ">=3.10"
+groups = ["dev"]
+files = [
+ {file = "aiohttp-3.14.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:eb0495d778817619273c108784292be161a924b9f5ae5cbbc70a2caa6838250b"},
+ {file = "aiohttp-3.14.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3c200cf9757edd785051dc699c7ecbec22110dbfcb3fefc7a9f9695eda8ea7a"},
+ {file = "aiohttp-3.14.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd51ebf9d3a00c074df4ede271023f4d2dba289bcc740b88191872716014e3c5"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:134ac5ddcf61c6fad984b9a5727d83492ada43d63471db20fb73042c13fca62f"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:70c987b27534f9ae1a723f47ae921571d616da21d3208282bf4c52af5164ac43"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1b59533861b70a2185c8f4f350f791f39d64358ef6944ce71c5240c9ec0982c9"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1c5281acc88b92396f88c7e1e2748f8466689df22b80170e4f51efa712fb47a8"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:48d67b87db6279c044760787eb01f6413032c2e6f3ba1cafaa492b1c8e578479"},
+ {file = "aiohttp-3.14.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f53bcd52f585e1ac3e590d61434eb61f9a88c38df041b4ea126d97144344a77b"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0fdea2281997af69da84c77ffa6f5938a0285f21fb3887c249d67419ca865b3d"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cda5fd5c95ad7a125a2e8464acc78b98b94c475a3780d6aa0aa157c93f470f4d"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:6debfa7312ff9d4c124dc71d72e9a0a4b9e0879e48ba6fcb42bef5c3300289e2"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f4e05329faa0ea1a404b37de4f034fd2c2defcca06a68dc6745e4e56c88e8a48"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a3a8296e7ab5c295f53f1041487cb088e1480775aafbf7fe545d93b770a0f96f"},
+ {file = "aiohttp-3.14.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5373dc80ad1aa2fb9ad95c83f24eef418bbda3a61375f128e5b0192e4f3f9b32"},
+ {file = "aiohttp-3.14.3-cp310-cp310-win32.whl", hash = "sha256:a3e22975f905b89a55a488c2a08f2fdb2186175349e917d48985cc468a3d4c6e"},
+ {file = "aiohttp-3.14.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdd0e2834dce1a26c1bbe26464861e16bbe217042cbff619247c11594472518c"},
+ {file = "aiohttp-3.14.3-cp310-cp310-win_arm64.whl", hash = "sha256:eac645b09bcfdf73df7536331f0678c1086ea250981118ddb5199e17ccef72bb"},
+ {file = "aiohttp-3.14.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e568e14940c09955aa51f4e645b6daa18a581c5dcfcd73744dcc86a856e3ced3"},
+ {file = "aiohttp-3.14.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:54cfcdee2770dac994417cbb0ee1f3eb0e7cb6b30c79bf44f2c02ff79ec5124a"},
+ {file = "aiohttp-3.14.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:21c016079415ed3fd676963e9793700a566d85dbbd6bfc564b9b2d209147dcc8"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6088ec9894113802bddb3c09e974929aed2c7b3a8c456219b8aab4481f1a239"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:16ea7e24c309fb7c0bbd505d149abe4fe4dccfb8db911db7dbec0921bc889a6f"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56f355e79f71aef2a85c80305cc915f894b170dba76de5fe84f6351939b83c06"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:18c441d0a8fca6de8d1f546849b9f0ab20d435993e2c5b59562b2fae6be2f929"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:53e7b4ce82b54a8bcc71b3b67a5cbd177ca1d7f592cbc92cd38b7349f73482db"},
+ {file = "aiohttp-3.14.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f55119f7bf25f49ed210f6096090715da24f2943c62102448915fde3c62877ce"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9aa6e61fdf20105c4144e755bd586008ff450791d67b1c8146fdc15959c4d51c"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ccd4893707b3e2a13e39c90d43cf80edf2e4d0457935bcc103bf2346214c3f15"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b2466434105a4e03113c36ec775cc2ebe6676b62eae326fa670bb607ef788c1c"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ba59d59aba08ac02fc03b0c8983ccd5ee39a199d0552ce9e6d2b4845b34d59ae"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ed099d105449c4f9e84f24af203cd131349d4761d8813fa7e02c32e7128cd910"},
+ {file = "aiohttp-3.14.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:152516815ef926786a0b6ae2b8f1fd2e0c71582dee0b435636865316fd4891b7"},
+ {file = "aiohttp-3.14.3-cp311-cp311-win32.whl", hash = "sha256:a4af35c443e0b1a1bd6a8af3f3485d7fda15c142751a00f3ff8090f0b93346fa"},
+ {file = "aiohttp-3.14.3-cp311-cp311-win_amd64.whl", hash = "sha256:e1e74298bab6ee0d6e749ed4fd1901c7e604bdda32c03d787a2cc71c46d0433d"},
+ {file = "aiohttp-3.14.3-cp311-cp311-win_arm64.whl", hash = "sha256:03cd2bde3d7f085b64e549c985f4bb928cad7e8ecf5323bfca320db548d81b39"},
+ {file = "aiohttp-3.14.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5"},
+ {file = "aiohttp-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228"},
+ {file = "aiohttp-3.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42"},
+ {file = "aiohttp-3.14.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d"},
+ {file = "aiohttp-3.14.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19"},
+ {file = "aiohttp-3.14.3-cp312-cp312-win32.whl", hash = "sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559"},
+ {file = "aiohttp-3.14.3-cp312-cp312-win_amd64.whl", hash = "sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a"},
+ {file = "aiohttp-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c"},
+ {file = "aiohttp-3.14.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86"},
+ {file = "aiohttp-3.14.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627"},
+ {file = "aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82"},
+ {file = "aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c"},
+ {file = "aiohttp-3.14.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f"},
+ {file = "aiohttp-3.14.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80"},
+ {file = "aiohttp-3.14.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0"},
+ {file = "aiohttp-3.14.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5"},
+ {file = "aiohttp-3.14.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e"},
+ {file = "aiohttp-3.14.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71"},
+ {file = "aiohttp-3.14.3-cp313-cp313-win32.whl", hash = "sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0"},
+ {file = "aiohttp-3.14.3-cp313-cp313-win_amd64.whl", hash = "sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883"},
+ {file = "aiohttp-3.14.3-cp313-cp313-win_arm64.whl", hash = "sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2"},
+ {file = "aiohttp-3.14.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062"},
+ {file = "aiohttp-3.14.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6"},
+ {file = "aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919"},
+ {file = "aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7"},
+ {file = "aiohttp-3.14.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0"},
+ {file = "aiohttp-3.14.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924"},
+ {file = "aiohttp-3.14.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646"},
+ {file = "aiohttp-3.14.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147"},
+ {file = "aiohttp-3.14.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41"},
+ {file = "aiohttp-3.14.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf"},
+ {file = "aiohttp-3.14.3-cp314-cp314-win32.whl", hash = "sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da"},
+ {file = "aiohttp-3.14.3-cp314-cp314-win_amd64.whl", hash = "sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100"},
+ {file = "aiohttp-3.14.3-cp314-cp314-win_arm64.whl", hash = "sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-win32.whl", hash = "sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b"},
+ {file = "aiohttp-3.14.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7"},
+ {file = "aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc"},
]
[package.dependencies]
aiohappyeyeballs = ">=2.5.0"
-aiosignal = ">=1.1.2"
+aiosignal = ">=1.4.0"
attrs = ">=17.3.0"
frozenlist = ">=1.1.1"
multidict = ">=4.5,<7.0"
propcache = ">=0.2.0"
+typing_extensions = {version = ">=4.4", markers = "python_version < \"3.13\""}
yarl = ">=1.17.0,<2.0"
[package.extras]
-speedups = ["Brotli", "aiodns (>=3.3.0)", "brotlicffi"]
+speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\" and sys_platform != \"android\" and sys_platform != \"ios\"", "aiodns (>=3.3.0) ; sys_platform != \"android\" and sys_platform != \"ios\"", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\" and sys_platform != \"android\" and sys_platform != \"ios\"", "brotlicffi (>=1.2) ; platform_python_implementation != \"CPython\""]
[[package]]
name = "aiosignal"
-version = "1.3.2"
+version = "1.4.0"
description = "aiosignal: a list of registered asynchronous callbacks"
optional = false
python-versions = ">=3.9"
+groups = ["dev"]
files = [
- {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"},
- {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"},
+ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"},
+ {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"},
]
[package.dependencies]
frozenlist = ">=1.1.0"
+typing-extensions = {version = ">=4.2", markers = "python_version < \"3.13\""}
[[package]]
name = "annotated-types"
-version = "0.7.0"
+version = "0.8.0"
description = "Reusable constraint types to use with typing.Annotated"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
- {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
+ {file = "annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0"},
+ {file = "annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7"},
]
[[package]]
name = "attrs"
-version = "25.3.0"
+version = "26.1.0"
description = "Classes Without Boilerplate"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
+groups = ["dev"]
files = [
- {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"},
- {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"},
+ {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"},
+ {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"},
]
-[package.extras]
-benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
-cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
-dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
-docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"]
-tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
-tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
-
[[package]]
name = "babel"
-version = "2.17.0"
+version = "2.18.0"
description = "Internationalization utilities"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
- {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"},
- {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"},
+ {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"},
+ {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"},
]
[package.extras]
-dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"]
+dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""]
[[package]]
name = "backrefs"
@@ -182,6 +215,7 @@ version = "5.9"
description = "A wrapper around re and regex that adds additional back references."
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
{file = "backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f"},
{file = "backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf"},
@@ -197,17 +231,18 @@ extras = ["regex"]
[[package]]
name = "beautifulsoup4"
-version = "4.13.4"
+version = "4.15.0"
description = "Screen-scraping library"
optional = false
python-versions = ">=3.7.0"
+groups = ["main"]
files = [
- {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"},
- {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"},
+ {file = "beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9"},
+ {file = "beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7"},
]
[package.dependencies]
-soupsieve = ">1.2"
+soupsieve = ">=1.6.1"
typing-extensions = ">=4.0.0"
[package.extras]
@@ -219,13 +254,14 @@ lxml = ["lxml"]
[[package]]
name = "bracex"
-version = "2.6"
+version = "3.0.1"
description = "Bash style brace expander."
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "bracex-2.6-py3-none-any.whl", hash = "sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952"},
- {file = "bracex-2.6.tar.gz", hash = "sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7"},
+ {file = "bracex-3.0.1-py3-none-any.whl", hash = "sha256:6523ad83aeb5098a4ee597cff0f964442ff74e460bd3fafaffab6a013ff2288c"},
+ {file = "bracex-3.0.1.tar.gz", hash = "sha256:4e38e32392e4a4780fe15d644bfc7c8514057cfc3861e060b11814ce829c25e4"},
]
[[package]]
@@ -234,6 +270,7 @@ version = "1.7.1"
description = "cffi-based cairo bindings for Python"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
{file = "cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f"},
{file = "cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b"},
@@ -249,13 +286,14 @@ xcb = ["xcffib (>=1.4.0)"]
[[package]]
name = "cairosvg"
-version = "2.8.2"
+version = "2.9.0"
description = "A Simple SVG Converter based on Cairo"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "cairosvg-2.8.2-py3-none-any.whl", hash = "sha256:eab46dad4674f33267a671dce39b64be245911c901c70d65d2b7b0821e852bf5"},
- {file = "cairosvg-2.8.2.tar.gz", hash = "sha256:07cbf4e86317b27a92318a4cac2a4bb37a5e9c1b8a27355d06874b22f85bef9f"},
+ {file = "cairosvg-2.9.0-py3-none-any.whl", hash = "sha256:4b82d07d145377dffdfc19d9791bd5fb65539bb4da0adecf0bdbd9cd4ffd7c68"},
+ {file = "cairosvg-2.9.0.tar.gz", hash = "sha256:1debb00cd2da11350d8b6f5ceb739f1b539196d71d5cf5eb7363dbd1bfbc8dc5"},
]
[package.dependencies]
@@ -271,204 +309,321 @@ test = ["flake8", "isort", "pytest"]
[[package]]
name = "certifi"
-version = "2025.6.15"
+version = "2026.7.22"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
- {file = "certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057"},
- {file = "certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b"},
+ {file = "certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775"},
+ {file = "certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55"},
]
[[package]]
name = "cffi"
-version = "1.17.1"
+version = "2.1.1"
description = "Foreign Function Interface for Python calling C code."
optional = false
-python-versions = ">=3.8"
-files = [
- {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
- {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
- {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
- {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
- {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
- {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
- {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
- {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
- {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
- {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
- {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
- {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
- {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
- {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
- {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
- {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
- {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
- {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
- {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
- {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
- {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
- {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
- {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
- {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
- {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
- {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
- {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
- {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
- {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
- {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
- {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
- {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
- {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
- {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
- {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
- {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
- {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
+python-versions = ">=3.10"
+groups = ["main"]
+files = [
+ {file = "cffi-2.1.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be"},
+ {file = "cffi-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b"},
+ {file = "cffi-2.1.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004"},
+ {file = "cffi-2.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9"},
+ {file = "cffi-2.1.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98"},
+ {file = "cffi-2.1.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9"},
+ {file = "cffi-2.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6"},
+ {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf"},
+ {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659"},
+ {file = "cffi-2.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9"},
+ {file = "cffi-2.1.1-cp310-cp310-win32.whl", hash = "sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41"},
+ {file = "cffi-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1"},
+ {file = "cffi-2.1.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12"},
+ {file = "cffi-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1"},
+ {file = "cffi-2.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0"},
+ {file = "cffi-2.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813"},
+ {file = "cffi-2.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990"},
+ {file = "cffi-2.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af"},
+ {file = "cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632"},
+ {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd"},
+ {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a"},
+ {file = "cffi-2.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa"},
+ {file = "cffi-2.1.1-cp311-cp311-win32.whl", hash = "sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3"},
+ {file = "cffi-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0"},
+ {file = "cffi-2.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455"},
+ {file = "cffi-2.1.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0"},
+ {file = "cffi-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf"},
+ {file = "cffi-2.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a"},
+ {file = "cffi-2.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890"},
+ {file = "cffi-2.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50"},
+ {file = "cffi-2.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e"},
+ {file = "cffi-2.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf"},
+ {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517"},
+ {file = "cffi-2.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735"},
+ {file = "cffi-2.1.1-cp312-cp312-win32.whl", hash = "sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e"},
+ {file = "cffi-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a"},
+ {file = "cffi-2.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80"},
+ {file = "cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e"},
+ {file = "cffi-2.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c"},
+ {file = "cffi-2.1.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6"},
+ {file = "cffi-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971"},
+ {file = "cffi-2.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c"},
+ {file = "cffi-2.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125"},
+ {file = "cffi-2.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264"},
+ {file = "cffi-2.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3"},
+ {file = "cffi-2.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2"},
+ {file = "cffi-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b"},
+ {file = "cffi-2.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7"},
+ {file = "cffi-2.1.1-cp313-cp313-win32.whl", hash = "sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac"},
+ {file = "cffi-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d"},
+ {file = "cffi-2.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973"},
+ {file = "cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c"},
+ {file = "cffi-2.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb"},
+ {file = "cffi-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54"},
+ {file = "cffi-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72"},
+ {file = "cffi-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1"},
+ {file = "cffi-2.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062"},
+ {file = "cffi-2.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03"},
+ {file = "cffi-2.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96"},
+ {file = "cffi-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527"},
+ {file = "cffi-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13"},
+ {file = "cffi-2.1.1-cp314-cp314-win32.whl", hash = "sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c"},
+ {file = "cffi-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48"},
+ {file = "cffi-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836"},
+ {file = "cffi-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3"},
+ {file = "cffi-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2"},
+ {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94"},
+ {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc"},
+ {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29"},
+ {file = "cffi-2.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676"},
+ {file = "cffi-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e"},
+ {file = "cffi-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f"},
+ {file = "cffi-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4"},
+ {file = "cffi-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e"},
+ {file = "cffi-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5"},
+ {file = "cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d"},
+ {file = "cffi-2.1.1-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b"},
+ {file = "cffi-2.1.1-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4"},
+ {file = "cffi-2.1.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8"},
+ {file = "cffi-2.1.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6"},
+ {file = "cffi-2.1.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80"},
+ {file = "cffi-2.1.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779"},
+ {file = "cffi-2.1.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399"},
+ {file = "cffi-2.1.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688"},
+ {file = "cffi-2.1.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7"},
+ {file = "cffi-2.1.1-cp315-cp315-win32.whl", hash = "sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac"},
+ {file = "cffi-2.1.1-cp315-cp315-win_amd64.whl", hash = "sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960"},
+ {file = "cffi-2.1.1-cp315-cp315-win_arm64.whl", hash = "sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1"},
+ {file = "cffi-2.1.1-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc"},
+ {file = "cffi-2.1.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab"},
+ {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e"},
+ {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358"},
+ {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231"},
+ {file = "cffi-2.1.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6"},
+ {file = "cffi-2.1.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94"},
+ {file = "cffi-2.1.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5"},
+ {file = "cffi-2.1.1-cp315-cp315t-win32.whl", hash = "sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66"},
+ {file = "cffi-2.1.1-cp315-cp315t-win_amd64.whl", hash = "sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3"},
+ {file = "cffi-2.1.1-cp315-cp315t-win_arm64.whl", hash = "sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692"},
+ {file = "cffi-2.1.1.tar.gz", hash = "sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be"},
]
[package.dependencies]
-pycparser = "*"
+pycparser = {version = "*", markers = "implementation_name != \"PyPy\""}
[[package]]
name = "charset-normalizer"
-version = "3.4.2"
+version = "3.5.1"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
-files = [
- {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"},
- {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"},
- {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"},
- {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"},
- {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"},
- {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"},
- {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"},
- {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"},
- {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"},
- {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"},
+groups = ["main"]
+files = [
+ {file = "charset_normalizer-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:00668ebb0609751758682eb0b5857e7c35b9f00e84dfdef062e103244ec94d45"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba2f37ee79e6338845261a3c5b1784e5d1acdff2c0785b284f1b633033d136ab"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ce854f5f478050ade5a238731c4ca985a7d3b3cb53ff600a9b5c3b689b5f0a7a"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:366ec70f5547c640d3ce1985722490f23faf4eb5216a7eeba78277490e78dacb"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:950f23cb393f85543777b0433f082cddd25b51ab398eac7971146495679efe5f"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1dcc36dcb96abc02236e182d17e0f71430152a6c2c7447421da2d2dc144edea"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:07ffd07412fc5d5e84cd8952acf9ff7e4ed7a708e69d1bada19d8ba91711353f"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:f5542f9b941279d82d41eb0aa9f98eba36fe4df5c7086c651df7944935b37182"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a545775cfe815855ea32d7c27731d79da358ef2055b4a25830231b1622dd18aa"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:494b70049a4d69aec6e8137c13af4cf8db8c9f9820a1392ac293b0dd2987a818"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-win32.whl", hash = "sha256:94fbf1c0c6cc0d3d5e50f9a9313a8cdca90dd696d34b381cd1704f8c9e939f20"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d"},
+ {file = "charset_normalizer-3.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:a6d095662e73e74f0a49988e0593373e243e3a52e27bfeea0a859e88acf4a0f5"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b2b1b3fa5670c127b246df1d0c059defd41f689a868a3b9d79df9b1cac42d22"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e5e4d73d588ca5ed09df1b7dcd1b203d1df3c542e3f50d126c947d432b10731"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b54e7e13267d49ffbfe68e25b3cbd774dab38fa37238f71265e91b36146eb21c"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ba32c4d2abf1d2fe7cf27d280f4cca5664233b0f885549c7761719eb977f486"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0722590aabf9dc6a6c0343d523c05458fa2b5047dbe6302fd526bb570600753f"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa1099b956fb795e686d073568f6dc002a0bb89765ea6d5b055dd7d9bf1b116c"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:bd6c173f04743d483881bffa1478d5a4624475b8cd1d2194956a75548e191c18"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f298e218441525d3794428b4c8b8fb8662c6d3ea79925d4807ee6b9a96a3bca5"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6e2912d4babbc65196ac13c2f53468dc57fb8b9c25ef913e8c59ddf7c6dc0e1b"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3d27167433c0d5f18dc850f07d0b3816221984fecdc405d6c157a6f0b8f8e9e6"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-win32.whl", hash = "sha256:ac00177c4831ffa650f8609e4bdddd5fe09c03b1c0c47acece7e6ea20421598b"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9"},
+ {file = "charset_normalizer-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:ae31a1a1db2ee6cc2942fccaf695c934bc7f3db9f2133a3fef1f367cf1a4ab10"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1d1c7a53a6c2103925cdd6d7229f8c567379f211c869793df679f2e9f738c369"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6621fb2a4988d6e53eedc455e5903e2679f3967b8acb3d639f1b63c14a2e893"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c0c10730342b0c9b35dd1d619beb8214e520bd96a1f870f452680b238aab3e0"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9f8405c2c758532c74fed975dbee57be1f31a6e865c031870c79a6ed3212ada"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:96fef3e886d6a9874b14f27fc193fbdc69d5d8035783d86aa4e1cea594e695f9"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5d8531a6569d025f68e2321e7638fb7978f23db58e5f69f56913837aae03816e"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aae2ee51122d3ae968a3837d97dc24a0aeebb0dea23694422cd172bd30017cd6"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:7235dc28fc6dd9d832ac7c7bce95367dedb85929f17368a0c2bee1e080b9acbf"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4abdc5f9ad448c1ecbfae2974b820535d6bc6e7eef63babbab3d81cf46968c71"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba501e667c17d8411f98e67a022d9604ef179aff0e459b7e292c796837c13573"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-win32.whl", hash = "sha256:cfa1c0cc3a8f9f53f1243a5a99ac36fd003880199383b37672e86ddda9cb07e2"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2"},
+ {file = "charset_normalizer-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:88e85ab89cb822c1e635f51d6d32e488f94e002e70e2f492bdb8b945543f345a"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6"},
+ {file = "charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:774d157f112367ff4abd29019f38f023c24e00e56edc7829c20e358a5a913ad8"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:26422d45fd13551cf564c58932f7d72b4f58b93b0fcf18c35ba6be12b46bb102"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:09a7bba9f739468c8e78c36a75c33768e53cb1959fc638f510454c14683f00d5"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4c9548dc78002099910abaebc0a72ac58b7d30931869e0351c09b507dff4ece3"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b7430cf5728e68f6c462254009a6ef4086e1bea43cf2f57aa9c55fb4f50ff96"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab743e9bc90c1f73552ec33e10e3331315acd2c397b36065b591b0181de533cc"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6f7deae3feb4edfa2efaf7c574fe88cbf055038a6abdb40188e4fff66d5699f"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:823f82903d189af463d7df250ef1f7f696f3cee08cc8d91deb565e8d425f6506"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:01e93745f7f219b703b60ba7afead36cfc4242782be5af484673fc500df12da5"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:329fc3ccb63ad22d867d84c2adea759a64079a37ba4a343433b02c7a2816871e"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:bb57753e36e4855b8ca375069482250a6246372331a3e4f3407eaebb007443f5"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fce8cbd4997efeb450bd298b54f755dcdff18d496f7a5ddbb4867c6d7c88fdc3"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6c9cdde8becb25a7fde49924511aa2644d6f8081cc8df8e9452724303348d8e3"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9ac4444d8d4fd4c4bd08bf451ed3167aa9e7ec6cdb41b648794f1d1103652e36"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:f03ac127268b43ef4fe9e6ab6794a6794b49485a0cc0c1db79876d2f33f75bc7"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-win32.whl", hash = "sha256:1f5883d77fd409a261abb5dc8ccbe335720d798b1de4abb3b1d47ccbbc76b53b"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:4bea7f8ebe90bbd7f0e4a2de42ca6924ba23e3e76418c408ff82f1d46fabd687"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fbc597639158fd7c14d55e808718848319540f51b0e6746e3eefa59723a4a348"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71c909f353863b2b89c83de2ebed71ea6d0df8a6ef65a128193c5e650766bef"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7ac76cf9afd34929d76eb7fcb63be476a4853d8a96f0dcf2d0db68a0cbdf9885"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3a370082ce34d0612f421e15fe011c53bb1feff21a26d06ad4fb244dab5a375"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:256dd4d85d9e4dc595e2bc983c980e73f62ddeb3165c58b4c3dfe78c5c8548c1"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58d4aa13a59c969dbfdf9e6a9560e242cbfd9e8a8f50c2747714df1a423adf65"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0c6dfb5ca6723eeed15aa8e564a014d69fcb8812f94eef11fe3631e0508199f5"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c010f5581d9c612804cc59fcf7b524b707fbcb72828551237ab545bb5c7034af"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:52ec005752a56ae79547a05c0139ca2501a0c866390b6115008456b9f0e7cde1"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2bced4061f000f7187254a02ad3433ae17eaf991747ceea2f478422590a5bba9"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:9eea3ab2597a5e65fe65296e2d6a84570845a6b55532d90333d740d48bbc850a"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:496846868fea80e479324862fa877f02411f2fd0f83b79ccee2607aa68b2a032"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85d5855daafc240cc045c026d7a15fd198a09b0fc8ff6f5ecbb5297b509cb11e"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-win32.whl", hash = "sha256:58d3e12c88e0950bca850ae1f7c256055c097639c2edb9eb123af9807d8b15e4"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:acaf604462bf330b0d07e7a07c1d6e4adac79e5fb13e9c5140590542cafacc00"},
+ {file = "charset_normalizer-3.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:9085f87b0e38a2b92b8923059b4e8789fe40d9279712d15dcc670048d77079af"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2679de311c7946dde5d3b6f44941844133ff5c7cb86099c0061ab1e8901c20a8"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:baf3775a2635e5a11fbd5e4e64ee69c7e86875d224a5c72aca4c141064589a90"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ac8c94b6539074e0f40899301273ac8402b9b3e01c7b7ba269ff30340aaaf20"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fe532b3c966d1fb794e0698e4589d0444017ae77fc0b31edea13c0e35bcc449"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5c84bec0ab5ae0c64bfe73a7d2adcb5ce73b467523fc27fd6a28ab2aa6cbe35a"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:854066be00447fa8de2ccbbe893e2ffc4b123ef16d897af794c1e18bd4a714b0"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:21b82d8082f6f5e7f456ef0bd16323d08de1266efbfeb476e64b2a91d1471a4e"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:838648accb3a7fd9803fd45c87bce8509648eb0c11bc34e216141300977244f2"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:195ce897c6153c0700078142cf8efe3e6454ca4cf4357499e4078dfd83396626"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:978eab16f55b4ab2c2a745be9a0a840bf8f09a7f227d9c76eb30214d078865a5"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_s390x.whl", hash = "sha256:cc0329df4caaceb950d2f580b5ac716a377f7059624a0bafaeaf8a218c6ed774"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:687c9ca3035544b113bea2055e180af96fb63c0c476e22a9180f51925186e7b7"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-win32.whl", hash = "sha256:706bfd38730a5ac7a365793269a00f4e988178cec121391f4248d84ad8c972e9"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:92caef967d287a407085d61176fce4012b1dd62daed4eb6d5ceb26d3d2538712"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:5fc45d653ea8c9a20479167e11d4a0f8cb2fa3470737ab6f9c827532313187b7"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:59171c6e45bf07d0d5cab3b0bf81d945035530f6873398b3b531c31184d46663"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9dbdd9205662134957cf0c324f639bdc5031c0ca056e2369e238db75187c0f11"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e4b018dc5a0eee4676e38fe84a47a427816c590b93b55d9025274ec4d6ffc2dc"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ced3fdd71aaa83ce593746c2edb42b7a59cb4c19c8b5c407781c72e493aae55a"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:19a3dd5aa73cef1c99687c4fc57db016a9c17104ae1185da88ba566a5d3bebe4"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc5d36d96478aa9c60654bd932525bf32964c62a7281eafdf16d85003a8d6004"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:04368edf83514385ffc3e1cfd4546e595f4f1272dd23ba437a93a9cc3741d47b"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5db6052055d34d41230fb78d7c439c23dc536a9896f6cb039e8dd92cfc1263"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:252d099029bcbea642f2a06c4ed5046bdf8b5a8150b64afa5e027e88b106e5ee"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6199d5606e2bbf2b096cf64d03f8b6790c91081d5ac866b8e7bb6422738cc60c"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:77efcff2b23071c349402ac1066667a3d011f62398d81408c9b88ad991747c9e"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_s390x.whl", hash = "sha256:a5cbd90ecf0fc62e64726917ad083b73001f0563657a87ec3c0b504e277dc90d"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:4d26f14f041e83dd8edfd61f4cd4fa7285d31798b5bf1f28e70c367ba6c41d61"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-win32.whl", hash = "sha256:ac13b004224fb341e1e25a1ed5e19d32f57cdb2a403e01f003b46f051a550f6f"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:35aea775dc2bd5f54cd84a1cd2696cc3207c479cb9cf0bd346f0d343e4300ddb"},
+ {file = "charset_normalizer-3.5.1-cp315-cp315t-win_arm64.whl", hash = "sha256:fb78f6e7fcd8ad785d28cd577168bc1aaee827b25bb8755638f694794ea98f0a"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959"},
+ {file = "charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85de3134b5379856e323ba37c19c9256d39425f7b76a63af52b09fb4664c2e8f"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e5e1224c0a6a90e05843e07adfec669edebec17801c67072f51e59561d63c0b"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5e2d0e146dcb57034f8b97dc58d2d512cb90aba253960ce449f695fec6a82c6f"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e06efa066f7dbadbc84ebc126a97c452a6451dfcf589d89d788484949e1cf795"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:994e883d17c559cdfd38c84003c8b27d25424a1077272a17e7cd27bfe0bf57b2"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:789b8982559ae28dad2356519f841655756cdcd96616410590ae0b17454ee64f"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a951ad59cad9145664a730d3036b40b844e74d2d3683da40111463cd3a83845d"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:55261ac0d2941c42f196dd576f543d87a8ee03cd6f5e30dfb4d807b2e3b9121a"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5ca0555312ae2fe82715cada7fac375530c2f3349e1eaa1bcb33d0283ac79a18"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2e9cf9253119d8e5d111f05d71626786fd3d6193817316eab1ca088cdb8593cf"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:433c5a81eade63b47e522303bad236f59dba55ea6951746f5558355eeed8c75d"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:13e3afe97712e8887cd516e960c63f0b93122971e5b5e4b2622fe7701771e838"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb12fb2ba69ffa05f8695f61c69e591dc4b4a12ac3757ac8af8adb259bf56d17"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-win32.whl", hash = "sha256:56490c595a28b1bb27dfc583e816152a9767721ef58b2c03b13f954d2f707420"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:012a22b88a77ca2e59b98ac5889b0deb604147666032f45e6d6e217634d2550d"},
+ {file = "charset_normalizer-3.5.1-cp39-cp39-win_arm64.whl", hash = "sha256:29880d17a8eb0b5cfdfd8944b468322928059aa35f1f5fa8ff22b149ec0b42f8"},
+ {file = "charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6"},
+ {file = "charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3"},
]
[[package]]
name = "click"
-version = "8.2.1"
+version = "8.4.2"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"},
- {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"},
+ {file = "click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76"},
+ {file = "click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6"},
]
[package.dependencies]
@@ -476,20 +631,21 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
[[package]]
name = "cmem-cmempy"
-version = "25.3.0"
+version = "25.5.0"
description = "API for eccenca Corporate Memory"
optional = false
-python-versions = "<4.0,>=3.9"
+python-versions = "<4.0,>=3.10"
+groups = ["main"]
files = [
- {file = "cmem_cmempy-25.3.0-py3-none-any.whl", hash = "sha256:75f9c6900661b5573615b43086897eb4b5fccdb1ec953fa9e20cdaecaeea75c2"},
- {file = "cmem_cmempy-25.3.0.tar.gz", hash = "sha256:ccef1410bde7e248d4b89b37366e7c386c8a1558190a07090f0d3c11e3b16ff4"},
+ {file = "cmem_cmempy-25.5.0-py3-none-any.whl", hash = "sha256:b2f7e766a98c16a49c354a29e67a334c644c77cc659efbaa764579449ceaf8ea"},
+ {file = "cmem_cmempy-25.5.0.tar.gz", hash = "sha256:1260b5abe84ba846f317648bd1dc1b88ba4927286e4eafc4c5e7fe0ca04ed23d"},
]
[package.dependencies]
certifi = ">=2023.7.22"
pyparsing = ">=3.2.3,<4.0.0"
rdflib = ">=7.1.4,<8.0.0"
-requests = ">=2.32.4,<3.0.0"
+requests = ">=2.33.1,<3.0.0"
requests-toolbelt = ">=1.0.0,<2.0.0"
[[package]]
@@ -498,20 +654,23 @@ version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+groups = ["main", "dev"]
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
+markers = {dev = "sys_platform == \"win32\""}
[[package]]
name = "cssselect2"
-version = "0.8.0"
+version = "0.9.0"
description = "CSS selectors for Python ElementTree"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e"},
- {file = "cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a"},
+ {file = "cssselect2-0.9.0-py3-none-any.whl", hash = "sha256:6a99e5f91f9a016a304dd929b0966ca464bcfda15177b6fb4a118fc0fb5d9563"},
+ {file = "cssselect2-0.9.0.tar.gz", hash = "sha256:759aa22c216326356f65e62e791d66160a0f9c91d1424e8d8adc5e74dddfc6fb"},
]
[package.dependencies]
@@ -528,6 +687,7 @@ version = "0.7.1"
description = "XML bomb protection for Python stdlib modules"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+groups = ["main"]
files = [
{file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
{file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
@@ -535,115 +695,142 @@ files = [
[[package]]
name = "frozenlist"
-version = "1.7.0"
+version = "1.8.0"
description = "A list-like structure which implements collections.abc.MutableSequence"
optional = false
python-versions = ">=3.9"
-files = [
- {file = "frozenlist-1.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cc4df77d638aa2ed703b878dd093725b72a824c3c546c076e8fdf276f78ee84a"},
- {file = "frozenlist-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:716a9973a2cc963160394f701964fe25012600f3d311f60c790400b00e568b61"},
- {file = "frozenlist-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0fd1bad056a3600047fb9462cff4c5322cebc59ebf5d0a3725e0ee78955001d"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3789ebc19cb811163e70fe2bd354cea097254ce6e707ae42e56f45e31e96cb8e"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af369aa35ee34f132fcfad5be45fbfcde0e3a5f6a1ec0712857f286b7d20cca9"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac64b6478722eeb7a3313d494f8342ef3478dff539d17002f849101b212ef97c"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f89f65d85774f1797239693cef07ad4c97fdd0639544bad9ac4b869782eb1981"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1073557c941395fdfcfac13eb2456cb8aad89f9de27bae29fabca8e563b12615"},
- {file = "frozenlist-1.7.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed8d2fa095aae4bdc7fdd80351009a48d286635edffee66bf865e37a9125c50"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:24c34bea555fe42d9f928ba0a740c553088500377448febecaa82cc3e88aa1fa"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:69cac419ac6a6baad202c85aaf467b65ac860ac2e7f2ac1686dc40dbb52f6577"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:960d67d0611f4c87da7e2ae2eacf7ea81a5be967861e0c63cf205215afbfac59"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:41be2964bd4b15bf575e5daee5a5ce7ed3115320fb3c2b71fca05582ffa4dc9e"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:46d84d49e00c9429238a7ce02dc0be8f6d7cd0cd405abd1bebdc991bf27c15bd"},
- {file = "frozenlist-1.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15900082e886edb37480335d9d518cec978afc69ccbc30bd18610b7c1b22a718"},
- {file = "frozenlist-1.7.0-cp310-cp310-win32.whl", hash = "sha256:400ddd24ab4e55014bba442d917203c73b2846391dd42ca5e38ff52bb18c3c5e"},
- {file = "frozenlist-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:6eb93efb8101ef39d32d50bce242c84bcbddb4f7e9febfa7b524532a239b4464"},
- {file = "frozenlist-1.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa51e147a66b2d74de1e6e2cf5921890de6b0f4820b257465101d7f37b49fb5a"},
- {file = "frozenlist-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b35db7ce1cd71d36ba24f80f0c9e7cff73a28d7a74e91fe83e23d27c7828750"},
- {file = "frozenlist-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34a69a85e34ff37791e94542065c8416c1afbf820b68f720452f636d5fb990cd"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a646531fa8d82c87fe4bb2e596f23173caec9185bfbca5d583b4ccfb95183e2"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:79b2ffbba483f4ed36a0f236ccb85fbb16e670c9238313709638167670ba235f"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26f205c9ca5829cbf82bb2a84b5c36f7184c4316617d7ef1b271a56720d6b30"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcacfad3185a623fa11ea0e0634aac7b691aa925d50a440f39b458e41c561d98"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72c1b0fe8fe451b34f12dce46445ddf14bd2a5bcad7e324987194dc8e3a74c86"},
- {file = "frozenlist-1.7.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d1a5baeaac6c0798ff6edfaeaa00e0e412d49946c53fae8d4b8e8b3566c4ae"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7edf5c043c062462f09b6820de9854bf28cc6cc5b6714b383149745e287181a8"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d50ac7627b3a1bd2dcef6f9da89a772694ec04d9a61b66cf87f7d9446b4a0c31"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce48b2fece5aeb45265bb7a58259f45027db0abff478e3077e12b05b17fb9da7"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fe2365ae915a1fafd982c146754e1de6ab3478def8a59c86e1f7242d794f97d5"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:45a6f2fdbd10e074e8814eb98b05292f27bad7d1883afbe009d96abdcf3bc898"},
- {file = "frozenlist-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:21884e23cffabb157a9dd7e353779077bf5b8f9a58e9b262c6caad2ef5f80a56"},
- {file = "frozenlist-1.7.0-cp311-cp311-win32.whl", hash = "sha256:284d233a8953d7b24f9159b8a3496fc1ddc00f4db99c324bd5fb5f22d8698ea7"},
- {file = "frozenlist-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:387cbfdcde2f2353f19c2f66bbb52406d06ed77519ac7ee21be0232147c2592d"},
- {file = "frozenlist-1.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2"},
- {file = "frozenlist-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb"},
- {file = "frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e"},
- {file = "frozenlist-1.7.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08"},
- {file = "frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43"},
- {file = "frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3"},
- {file = "frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a"},
- {file = "frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee"},
- {file = "frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d"},
- {file = "frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60"},
- {file = "frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b"},
- {file = "frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e"},
- {file = "frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1"},
- {file = "frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba"},
- {file = "frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d"},
- {file = "frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d"},
- {file = "frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384"},
- {file = "frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104"},
- {file = "frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf"},
- {file = "frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81"},
- {file = "frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e"},
- {file = "frozenlist-1.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cea3dbd15aea1341ea2de490574a4a37ca080b2ae24e4b4f4b51b9057b4c3630"},
- {file = "frozenlist-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d536ee086b23fecc36c2073c371572374ff50ef4db515e4e503925361c24f71"},
- {file = "frozenlist-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dfcebf56f703cb2e346315431699f00db126d158455e513bd14089d992101e44"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:974c5336e61d6e7eb1ea5b929cb645e882aadab0095c5a6974a111e6479f8878"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c70db4a0ab5ab20878432c40563573229a7ed9241506181bba12f6b7d0dc41cb"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1137b78384eebaf70560a36b7b229f752fb64d463d38d1304939984d5cb887b6"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e793a9f01b3e8b5c0bc646fb59140ce0efcc580d22a3468d70766091beb81b35"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74739ba8e4e38221d2c5c03d90a7e542cb8ad681915f4ca8f68d04f810ee0a87"},
- {file = "frozenlist-1.7.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e63344c4e929b1a01e29bc184bbb5fd82954869033765bfe8d65d09e336a677"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ea2a7369eb76de2217a842f22087913cdf75f63cf1307b9024ab82dfb525938"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:836b42f472a0e006e02499cef9352ce8097f33df43baaba3e0a28a964c26c7d2"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e22b9a99741294b2571667c07d9f8cceec07cb92aae5ccda39ea1b6052ed4319"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:9a19e85cc503d958abe5218953df722748d87172f71b73cf3c9257a91b999890"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f22dac33bb3ee8fe3e013aa7b91dc12f60d61d05b7fe32191ffa84c3aafe77bd"},
- {file = "frozenlist-1.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ccec739a99e4ccf664ea0775149f2749b8a6418eb5b8384b4dc0a7d15d304cb"},
- {file = "frozenlist-1.7.0-cp39-cp39-win32.whl", hash = "sha256:b3950f11058310008a87757f3eee16a8e1ca97979833239439586857bc25482e"},
- {file = "frozenlist-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:43a82fce6769c70f2f5a06248b614a7d268080a9d20f7457ef10ecee5af82b63"},
- {file = "frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e"},
- {file = "frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f"},
+groups = ["dev"]
+files = [
+ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"},
+ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"},
+ {file = "frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad"},
+ {file = "frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2"},
+ {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186"},
+ {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e"},
+ {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450"},
+ {file = "frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef"},
+ {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4"},
+ {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff"},
+ {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c"},
+ {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f"},
+ {file = "frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7"},
+ {file = "frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a"},
+ {file = "frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6"},
+ {file = "frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e"},
+ {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84"},
+ {file = "frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9"},
+ {file = "frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93"},
+ {file = "frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f"},
+ {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695"},
+ {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52"},
+ {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581"},
+ {file = "frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567"},
+ {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b"},
+ {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92"},
+ {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d"},
+ {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd"},
+ {file = "frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967"},
+ {file = "frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25"},
+ {file = "frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b"},
+ {file = "frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a"},
+ {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1"},
+ {file = "frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b"},
+ {file = "frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4"},
+ {file = "frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383"},
+ {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4"},
+ {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8"},
+ {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b"},
+ {file = "frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52"},
+ {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29"},
+ {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3"},
+ {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143"},
+ {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608"},
+ {file = "frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa"},
+ {file = "frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf"},
+ {file = "frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746"},
+ {file = "frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd"},
+ {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a"},
+ {file = "frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7"},
+ {file = "frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40"},
+ {file = "frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027"},
+ {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822"},
+ {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121"},
+ {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5"},
+ {file = "frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e"},
+ {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11"},
+ {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1"},
+ {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1"},
+ {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8"},
+ {file = "frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed"},
+ {file = "frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496"},
+ {file = "frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231"},
+ {file = "frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888"},
+ {file = "frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042"},
+ {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0"},
+ {file = "frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f"},
+ {file = "frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c"},
+ {file = "frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2"},
+ {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8"},
+ {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686"},
+ {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e"},
+ {file = "frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a"},
+ {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128"},
+ {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f"},
+ {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7"},
+ {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30"},
+ {file = "frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7"},
+ {file = "frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806"},
+ {file = "frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0"},
+ {file = "frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd"},
+ {file = "frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79"},
+ {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8b7138e5cd0647e4523d6685b0eac5d4be9a184ae9634492f25c6eb38c12a47"},
+ {file = "frozenlist-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a6483e309ca809f1efd154b4d37dc6d9f61037d6c6a81c2dc7a15cb22c8c5dca"},
+ {file = "frozenlist-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b9290cf81e95e93fdf90548ce9d3c1211cf574b8e3f4b3b7cb0537cf2227068"},
+ {file = "frozenlist-1.8.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59a6a5876ca59d1b63af8cd5e7ffffb024c3dc1e9cf9301b21a2e76286505c95"},
+ {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6dc4126390929823e2d2d9dc79ab4046ed74680360fc5f38b585c12c66cdf459"},
+ {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:332db6b2563333c5671fecacd085141b5800cb866be16d5e3eb15a2086476675"},
+ {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9ff15928d62a0b80bb875655c39bf517938c7d589554cbd2669be42d97c2cb61"},
+ {file = "frozenlist-1.8.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7bf6cdf8e07c8151fba6fe85735441240ec7f619f935a5205953d58009aef8c6"},
+ {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:48e6d3f4ec5c7273dfe83ff27c91083c6c9065af655dc2684d2c200c94308bb5"},
+ {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:1a7607e17ad33361677adcd1443edf6f5da0ce5e5377b798fba20fae194825f3"},
+ {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3a935c3a4e89c733303a2d5a7c257ea44af3a56c8202df486b7f5de40f37e1"},
+ {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:940d4a017dbfed9daf46a3b086e1d2167e7012ee297fef9e1c545c4d022f5178"},
+ {file = "frozenlist-1.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b9be22a69a014bc47e78072d0ecae716f5eb56c15238acca0f43d6eb8e4a5bda"},
+ {file = "frozenlist-1.8.0-cp39-cp39-win32.whl", hash = "sha256:1aa77cb5697069af47472e39612976ed05343ff2e84a3dcf15437b232cbfd087"},
+ {file = "frozenlist-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:7398c222d1d405e796970320036b1b563892b65809d9e5261487bb2c7f7b5c6a"},
+ {file = "frozenlist-1.8.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f3b365f31c6cd4af24545ca0a244a53688cad8834e32f56831c4923b50a103"},
+ {file = "frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d"},
+ {file = "frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"},
]
[[package]]
@@ -652,6 +839,7 @@ version = "2.1.0"
description = "Copy your docs directly to the gh-pages branch."
optional = false
python-versions = "*"
+groups = ["main"]
files = [
{file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
{file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
@@ -669,6 +857,7 @@ version = "4.0.12"
description = "Git Object Database"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
{file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"},
{file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"},
@@ -679,21 +868,22 @@ smmap = ">=3.0.1,<6"
[[package]]
name = "gitpython"
-version = "3.1.44"
+version = "3.1.59"
description = "GitPython is a Python library used to interact with Git repositories"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
- {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"},
- {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"},
+ {file = "gitpython-3.1.59-py3-none-any.whl", hash = "sha256:67a82f537384578643624c8b2c531938a9b82be431663e575dcf638526631d4c"},
+ {file = "gitpython-3.1.59.tar.gz", hash = "sha256:0a1475cfdc38a5bfba1a3e9a4a9da52a39749ecec322b772915c019f94e5b7e4"},
]
[package.dependencies]
gitdb = ">=4.0.1,<5"
[package.extras]
-doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
-test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
+doc = ["sphinx (>=7.4.7,<8)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"]
+test = ["basedpyright (==1.39.9) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy (==1.18.2) ; python_version >= \"3.9\"", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""]
[[package]]
name = "hjson"
@@ -701,6 +891,7 @@ version = "3.1.0"
description = "Hjson, a user interface for JSON."
optional = false
python-versions = "*"
+groups = ["main"]
files = [
{file = "hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89"},
{file = "hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75"},
@@ -708,59 +899,18 @@ files = [
[[package]]
name = "idna"
-version = "3.10"
+version = "3.19"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
-python-versions = ">=3.6"
-files = [
- {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
- {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
-]
-
-[package.extras]
-all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
-
-[[package]]
-name = "importlib-metadata"
-version = "8.7.0"
-description = "Read metadata from Python packages"
-optional = false
python-versions = ">=3.9"
+groups = ["main", "dev"]
files = [
- {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"},
- {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"},
+ {file = "idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4"},
+ {file = "idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15"},
]
-[package.dependencies]
-zipp = ">=3.20"
-
[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
-cover = ["pytest-cov"]
-doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-enabler = ["pytest-enabler (>=2.2)"]
-perf = ["ipython"]
-test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
-type = ["pytest-mypy"]
-
-[[package]]
-name = "importlib-resources"
-version = "6.5.2"
-description = "Read resources from Python packages"
-optional = false
-python-versions = ">=3.9"
-files = [
- {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"},
- {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"},
-]
-
-[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
-cover = ["pytest-cov"]
-doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-enabler = ["pytest-enabler (>=2.2)"]
-test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"]
-type = ["pytest-mypy"]
+all = ["coverage (>=7.10.0)", "hypothesis (>=6.141.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.16.0)", "ty (>=0.0.37)"]
[[package]]
name = "iniconfig"
@@ -768,6 +918,7 @@ version = "2.3.0"
description = "brain-dead simple config-ini parsing"
optional = false
python-versions = ">=3.10"
+groups = ["dev"]
files = [
{file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"},
{file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"},
@@ -779,6 +930,7 @@ version = "3.1.6"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
{file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
{file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
@@ -796,6 +948,7 @@ version = "1.4.0"
description = "Check links for Markdown-based site"
optional = false
python-versions = ">=3.7"
+groups = ["dev"]
files = [
{file = "linkcheckmd-1.4.0.tar.gz", hash = "sha256:3a539c9a4e11697fc7fcc269d379accf93c8cccbf971f3cea0bae40912d9f609"},
]
@@ -810,87 +963,117 @@ tests = ["pytest"]
[[package]]
name = "markdown"
-version = "3.8.2"
+version = "3.10.3"
description = "Python implementation of John Gruber's Markdown."
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24"},
- {file = "markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45"},
+ {file = "markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea"},
+ {file = "markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f"},
]
[package.extras]
-docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"]
+docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python] (>=0.28.3)"]
testing = ["coverage", "pyyaml"]
[[package]]
name = "markupsafe"
-version = "3.0.2"
+version = "3.0.3"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.9"
-files = [
- {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"},
- {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
+groups = ["main"]
+files = [
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"},
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"},
+ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"},
]
[[package]]
@@ -899,6 +1082,7 @@ version = "1.3.4"
description = "A deep merge function for 🐍."
optional = false
python-versions = ">=3.6"
+groups = ["main"]
files = [
{file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
{file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
@@ -906,20 +1090,19 @@ files = [
[[package]]
name = "mike"
-version = "2.1.3"
+version = "2.2.0"
description = "Manage multiple versions of your MkDocs-powered documentation"
optional = false
python-versions = "*"
+groups = ["main"]
files = [
- {file = "mike-2.1.3-py3-none-any.whl", hash = "sha256:d90c64077e84f06272437b464735130d380703a76a5738b152932884c60c062a"},
- {file = "mike-2.1.3.tar.gz", hash = "sha256:abd79b8ea483fb0275b7972825d3082e5ae67a41820f8d8a0dc7a3f49944e810"},
+ {file = "mike-2.2.0-py3-none-any.whl", hash = "sha256:e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040"},
+ {file = "mike-2.2.0.tar.gz", hash = "sha256:1e3858e32c0f125aac14432fc7848434358f9ae0962c5c5cde387ad47f6ad25e"},
]
[package.dependencies]
-importlib-metadata = "*"
-importlib-resources = "*"
jinja2 = ">=2.7"
-mkdocs = ">=1.0"
+mkdocs = ">=1.0,<2.0"
pyparsing = ">=3.0"
pyyaml = ">=5.1"
pyyaml-env-tag = "*"
@@ -935,6 +1118,7 @@ version = "1.6.1"
description = "Project documentation with Markdown."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
{file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"},
{file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"},
@@ -957,7 +1141,7 @@ watchdog = ">=2.0"
[package.extras]
i18n = ["babel (>=2.9.0)"]
-min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
[[package]]
name = "mkdocs-autolinks-plugin"
@@ -965,6 +1149,7 @@ version = "0.7.1"
description = "An MkDocs plugin"
optional = false
python-versions = ">=3.4"
+groups = ["main"]
files = [
{file = "mkdocs-autolinks-plugin-0.7.1.tar.gz", hash = "sha256:445ddb9b417b7795856c30801bb430773186c1daf210bdeecf8305f55a47d151"},
{file = "mkdocs_autolinks_plugin-0.7.1-py3-none-any.whl", hash = "sha256:5c6c17f6649b68e79a9ef0b2648d59f3072e18002b90ee1586a64c505f11ab12"},
@@ -979,6 +1164,7 @@ version = "2.10.1"
description = "An MkDocs plugin that simplifies configuring page titles and their order"
optional = false
python-versions = ">=3.8.1"
+groups = ["main"]
files = [
{file = "mkdocs_awesome_pages_plugin-2.10.1-py3-none-any.whl", hash = "sha256:c6939dbea37383fc3cf8c0a4e892144ec3d2f8a585e16fdc966b34e7c97042a7"},
{file = "mkdocs_awesome_pages_plugin-2.10.1.tar.gz", hash = "sha256:cda2cb88c937ada81a4785225f20ef77ce532762f4500120b67a1433c1cdbb2f"},
@@ -991,13 +1177,14 @@ wcmatch = ">=7"
[[package]]
name = "mkdocs-get-deps"
-version = "0.2.0"
-description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file"
+version = "0.2.2"
+description = "An extra command for MkDocs that infers required PyPI packages from `plugins` in mkdocs.yml"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"},
- {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"},
+ {file = "mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650"},
+ {file = "mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1"},
]
[package.dependencies]
@@ -1007,20 +1194,21 @@ pyyaml = ">=5.1"
[[package]]
name = "mkdocs-git-revision-date-localized-plugin"
-version = "1.4.7"
+version = "1.5.3"
description = "Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "mkdocs_git_revision_date_localized_plugin-1.4.7-py3-none-any.whl", hash = "sha256:056c0a90242409148f1dc94d5c9d2c25b5b8ddd8de45489fa38f7fa7ccad2bc4"},
- {file = "mkdocs_git_revision_date_localized_plugin-1.4.7.tar.gz", hash = "sha256:10a49eff1e1c3cb766e054b9d8360c904ce4fe8c33ac3f6cc083ac6459c91953"},
+ {file = "mkdocs_git_revision_date_localized_plugin-1.5.3-py3-none-any.whl", hash = "sha256:cd96e432de6a7e59b31c7041574b22f84179c8636835419ff458877ecfaaaf05"},
+ {file = "mkdocs_git_revision_date_localized_plugin-1.5.3.tar.gz", hash = "sha256:873444b54cab4d47c69bd6e85da05ef5fbe81fee27e64508114c46a0e4f81e37"},
]
[package.dependencies]
babel = ">=2.7.0"
gitpython = ">=3.1.44"
-mkdocs = ">=1.0"
-pytz = ">=2025.1"
+mkdocs = ">=1.0,<2"
+tzdata = {version = ">=2023.3", markers = "sys_platform == \"win32\""}
[[package]]
name = "mkdocs-glightbox"
@@ -1028,6 +1216,7 @@ version = "0.4.0"
description = "MkDocs plugin supports image lightbox with GLightbox."
optional = false
python-versions = "*"
+groups = ["main"]
files = [
{file = "mkdocs-glightbox-0.4.0.tar.gz", hash = "sha256:392b34207bf95991071a16d5f8916d1d2f2cd5d5bb59ae2997485ccd778c70d9"},
{file = "mkdocs_glightbox-0.4.0-py3-none-any.whl", hash = "sha256:e0107beee75d3eb7380ac06ea2d6eac94c999eaa49f8c3cbab0e7be2ac006ccf"},
@@ -1035,13 +1224,14 @@ files = [
[[package]]
name = "mkdocs-macros-plugin"
-version = "1.3.7"
+version = "1.5.0"
description = "Unleash the power of MkDocs with macros and variables"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
- {file = "mkdocs_macros_plugin-1.3.7-py3-none-any.whl", hash = "sha256:02432033a5b77fb247d6ec7924e72fc4ceec264165b1644ab8d0dc159c22ce59"},
- {file = "mkdocs_macros_plugin-1.3.7.tar.gz", hash = "sha256:17c7fd1a49b94defcdb502fd453d17a1e730f8836523379d21292eb2be4cb523"},
+ {file = "mkdocs_macros_plugin-1.5.0-py3-none-any.whl", hash = "sha256:c10fabd812bf50f9170609d0ed518e54f1f0e12c334ac29141723a83c881dd6f"},
+ {file = "mkdocs_macros_plugin-1.5.0.tar.gz", hash = "sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f"},
]
[package.dependencies]
@@ -1052,11 +1242,13 @@ packaging = "*"
pathspec = "*"
python-dateutil = "*"
pyyaml = "*"
-super-collections = "*"
+requests = "*"
+super-collections = ">=0.6.2"
termcolor = "*"
[package.extras]
-test = ["mkdocs-d2-plugin", "mkdocs-include-markdown-plugin", "mkdocs-macros-test", "mkdocs-material (>=6.2)", "mkdocs-test"]
+doc = ["mkdocs-mermaid2-plugin"]
+test = ["mkdocs-d2-plugin", "mkdocs-include-markdown-plugin", "mkdocs-macros-test", "mkdocs-material (>=6.2)", "mkdocs-test (>=0.6.0)", "pytest"]
[[package]]
name = "mkdocs-material"
@@ -1064,6 +1256,7 @@ version = "9.6.14+insiders.4.53.16"
description = "Documentation that simply works"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = []
develop = false
@@ -1088,7 +1281,7 @@ recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.
[package.source]
type = "git"
-url = "git@github.com:eccenca/mkdocs-material-insiders.git"
+url = "ssh://git@github.com/eccenca/mkdocs-material-insiders.git"
reference = "9.6.14-insiders-4.53.16"
resolved_reference = "ce2cca8c5240ae520e09a67954de09949bd04efe"
@@ -1098,6 +1291,7 @@ version = "1.3.1"
description = "Extension pack for Python Markdown and MkDocs Material."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
{file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"},
{file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"},
@@ -1105,27 +1299,30 @@ files = [
[[package]]
name = "mkdocs-redirects"
-version = "1.2.2"
+version = "1.2.3"
description = "A MkDocs plugin for dynamic page redirects to prevent broken links"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5"},
- {file = "mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095"},
+ {file = "mkdocs_redirects-1.2.3-py3-none-any.whl", hash = "sha256:ec7312fff462d03ec16395d0c001006a418f8d0c21cdf2b47ff11cf839dc3ce0"},
+ {file = "mkdocs_redirects-1.2.3.tar.gz", hash = "sha256:5e980330999299729a2d6a125347d1af78023d68a23681a4de3053ce7dfe2e51"},
]
[package.dependencies]
-mkdocs = ">=1.1.1"
+mkdocs = ">=1.2,<=1.6.1"
+properdocs = ">=1.6.5"
[[package]]
name = "mkdocs-swagger-ui-tag"
-version = "0.7.1"
+version = "0.7.2"
description = "A MkDocs plugin supports for add Swagger UI in page."
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
- {file = "mkdocs_swagger_ui_tag-0.7.1-py3-none-any.whl", hash = "sha256:e4a1019c96ef333ec4dab0ef7d80068a345c7526a87fe8718f18852ee5ad34a5"},
- {file = "mkdocs_swagger_ui_tag-0.7.1.tar.gz", hash = "sha256:aed3c5f15297d74241f38cfba4763a5789bf10a410e005014763c66e79576b65"},
+ {file = "mkdocs_swagger_ui_tag-0.7.2-py3-none-any.whl", hash = "sha256:6e96e983f6990c5b7e96604c28a33f35984c862df18879ef31d96f3df2dbe5c7"},
+ {file = "mkdocs_swagger_ui_tag-0.7.2.tar.gz", hash = "sha256:d3030e70a3937b1b2c2a399cf5a77c54a13c2eb6dd88e7c45864a175bf3a283e"},
]
[package.dependencies]
@@ -1133,109 +1330,158 @@ beautifulsoup4 = ">=4.13.3"
[[package]]
name = "multidict"
-version = "6.6.0"
+version = "6.7.1"
description = "multidict implementation"
optional = false
python-versions = ">=3.9"
-files = [
- {file = "multidict-6.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d7913e6d0953b6d65c74290da65bc33d60d32a48bbe0bf2398ea1c5a2626e0b2"},
- {file = "multidict-6.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8552e89a546408d3f78f1efd1c48e46077b68e59b6d5607498dd0a44df60b87c"},
- {file = "multidict-6.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:54318d7991887e3e557e71e97fee3fc152db235a26edbbc62079a75e263d8fef"},
- {file = "multidict-6.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2cdd2a2b1d35debdc367aca97709d20fc6cfc18e88f5b85a47b478e19b990b54"},
- {file = "multidict-6.6.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0d60aeb062bf15d8ec5ec2547b2f5a06090692b79414c0b26fcc94709e64d650"},
- {file = "multidict-6.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e6e24583ab8e2b66370edd1a3b6cb2979b4866aff1e73b10bf61e46033c2dc1b"},
- {file = "multidict-6.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d710b49cdf38e158ba9ba6819ea9bf1041e87e3d36abcd577d2836b51a7eb373"},
- {file = "multidict-6.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f812ed66bfd06b7d67a1f3d46b1644b88bdfe8aea6b290a1411ab08bcd93f08a"},
- {file = "multidict-6.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7b62dc87d3a55d0e9753f5afdd7df67a5fb8ef1b43e449b9a8a2c4b8f71ecf1f"},
- {file = "multidict-6.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b524f005fc749bec8fd0997aff1de72be136d7fe8a528062f779f659765071fc"},
- {file = "multidict-6.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3f153e2cb8a5a9b34c95ffcdcc3eed0d62ea4b48a5c668b818c3d03c58061296"},
- {file = "multidict-6.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1b23869a750e9cb32b2c4a95edf081adc45cc684d4f8ebe0c15f830d5cb0e878"},
- {file = "multidict-6.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2fe3aa2280cd573eb26afa6c9030e66a6394c763f5325399d4cae76fca24c758"},
- {file = "multidict-6.6.0-cp310-cp310-win32.whl", hash = "sha256:3234b25ccf0d90666f10fceb2a8ae9d9a47b5d4e1e94eb32924d42e2ae369e74"},
- {file = "multidict-6.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd58e43381f943f9d613c87bf0f1cf7340964dd2bea86e3f7a21c81c50bbc9fb"},
- {file = "multidict-6.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:b7ee8eed2ba1e46d7f60a2ec5d9866285daec3c7e0685dcfa5dbfd0ed6a173d0"},
- {file = "multidict-6.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5eb5444dd0dc4c2e0f180d7e216fe2a713d45b5648fec2832ff4a78100270d6a"},
- {file = "multidict-6.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:522cafe660896c471fc667c53d5081416c435a7ab88e183d8bcd75c6f993fb27"},
- {file = "multidict-6.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b4898814f97d28c2a6a5989cb605840ad0545a8f2bad38a5d3a75071b673ec6"},
- {file = "multidict-6.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec93a0f75742ffcb14a0c15dedcafb37e69860a76fc009d0463c534701443f2f"},
- {file = "multidict-6.6.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db158941bbed55f980a30125cc9d027f272af76e11f4c7204e3c458c277a5098"},
- {file = "multidict-6.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:561164b6e0998a49b72b17dd9f484ef785bcf836a5ce525b58a0970c563cbb6e"},
- {file = "multidict-6.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aed62dc3bf5bba3c64f123e15d05005e22a18b3d95b990996b1c3a9aa12c4611"},
- {file = "multidict-6.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c38f0b501487246b1ac68cd6159459789af9f95ac6b35eb14f7f74e41b3f8eb5"},
- {file = "multidict-6.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5737e9abbde209f7f9805fed605f9623d65b7822bfa9e18cb0f94b6f8fa6c0fd"},
- {file = "multidict-6.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8fad001e4fbda4a14f6f6466e78c73f51dad18da0a831378a564050b9790b7de"},
- {file = "multidict-6.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0c9e7ce1fff62bd094b5adb349336fc965e29ae401e0db413986a85cfbfeb11d"},
- {file = "multidict-6.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1f9fb3a923d84843807a24f0250028f5802e97469c496a6ed0eee9ef7ed455a2"},
- {file = "multidict-6.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:50f62cd84cf042a7d586759bc83059d1c2b1c00ae3f2481d112cdf711e6cb15c"},
- {file = "multidict-6.6.0-cp311-cp311-win32.whl", hash = "sha256:855fc84169a98ee9dde3805716c3a18959a8803069866e48512edd6a5a59fffc"},
- {file = "multidict-6.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:e86d6f67647159f6b96df10504b7f00c17f12370588ea7202b78fc3867d1c900"},
- {file = "multidict-6.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:afbb6d962c355863a6f39a1558db875fcaa0cc1116acbb7086e8fa0e86a642ed"},
- {file = "multidict-6.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0b95809f30d197efa899b5e08a38cf8d6658f3acfa5f5c984e0fe6bc21245aeb"},
- {file = "multidict-6.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c146b37f0a719df5f82e0dccc2ecbcbcccae75e762d696b5b26990aef65e6ac4"},
- {file = "multidict-6.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d36d3cd27eba1f7aa209839ccce79b9601abbd82e9b503f33f16652072e347da"},
- {file = "multidict-6.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2e1676ed48d42e3db21a18030a149bff12ed564185453777814722ec8c67f26"},
- {file = "multidict-6.6.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1201db24a4b55921cf5db90cbd9a31a44c0bb2eba8ee5f50e330c0b2080fa00"},
- {file = "multidict-6.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9a2a7242da589b5879857646847e806dad51b6de6fab8de3c0330ea60656d915"},
- {file = "multidict-6.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8175c3ec6a7ed880ccf576a80a95f2b559a97158662698db6c8fbeffdf982123"},
- {file = "multidict-6.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a5e7c0e6ef7e98ea7601c672f067e491bd286531293c62930b10ade50120af2"},
- {file = "multidict-6.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cfb725d2379d7c54958cce23a0fd8ff5b3d8dd1f4e2741a44a548eddefad6eae"},
- {file = "multidict-6.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6dbff377ce9e67a5cae6c5989a4963816d70d52a9f6bf01dd04aadaa9ca31dba"},
- {file = "multidict-6.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b04670b6d3251dfc1761e8a8c58cd1ccb28c1fc8041ed7dc0b1e741bd7753b02"},
- {file = "multidict-6.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:20da2c7faa1bddc3fda31258debcbcc7033f33094f4d89b3b6269570bd7b132d"},
- {file = "multidict-6.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7a848558168b6c39bca54c57dacc27eac708b479b1ff92469a7465ead6619334"},
- {file = "multidict-6.6.0-cp312-cp312-win32.whl", hash = "sha256:a066dc45b29ce247a2ddbccc2cf20ce99f95e849a7624cf3cdfd7d50b1261098"},
- {file = "multidict-6.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:74fa779e729bb20dd7ce9bbc2b4b704f4134b6763ea8f4a13d259aed044812fd"},
- {file = "multidict-6.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:860ddc224123efb788812f16329d629722c68ca687c0d4410f4ad26a9197cc73"},
- {file = "multidict-6.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e26114b8e3da8137bb39e2820eef09005c0ab468b2cca384f429a2104c48f6d1"},
- {file = "multidict-6.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bf72082eba16b22f63ef8553e1d245c56bf92868976f089ae3f572e91e2dd197"},
- {file = "multidict-6.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:57afe4cdc5ee0c001af224f259a20b906df8ddbb9b9af932817a374bf98cd857"},
- {file = "multidict-6.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d18cde7f12df1f9d42bafbe01ed0af48e8f6605ee632aaf3788ada861193175"},
- {file = "multidict-6.6.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:11ccf3fa5cdf0475706307be90ab60bb1865cd8814c7cac6f3c9e54dda094a57"},
- {file = "multidict-6.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:690e7fd86c1def94f080ce514922fb6b62b6327ab10b229e1a8a7ecfc4e88200"},
- {file = "multidict-6.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1c92cb8bc15c3152ccdb53093c12eb56e661bf404f5674c055007dc979c869f7"},
- {file = "multidict-6.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:760a4970d6ce435b0c71a68c4a86fcd0fad50c760c948891d60af4d3486401f6"},
- {file = "multidict-6.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:606b94703e1949fd0044ea72aab11a7b9d92492e86fd5886c099d1a7655961ca"},
- {file = "multidict-6.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9c73131cd1f46669c9b28632be3ee3be611aef38c0fe5ee9f8d5632e9722229f"},
- {file = "multidict-6.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3f76f25eea979b6e39993380acb56422eb8a10c44e13ef4f5d3c82c797cb157d"},
- {file = "multidict-6.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b9a1135f8a0bf7959fb03bca6b98308521cecc6883e4a334a9ae4edecf3d90c"},
- {file = "multidict-6.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ff8f1043a727649ce698642065b279ee18b36e0d7cbdb7583d7edac6ae804392"},
- {file = "multidict-6.6.0-cp313-cp313-win32.whl", hash = "sha256:e53dcb79923cc0c7ef0ac41aac6e4ea4cf8aa1c7bc7f354c014cf386e9c28639"},
- {file = "multidict-6.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:c0ac2049db3dca5fade0390817f94e1945e248297c90bf0b7596127105f3f54f"},
- {file = "multidict-6.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:fe16f2823f50a10f13cf094cc09c9e76c3b483064975c482eda0d830175746bc"},
- {file = "multidict-6.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:55243ada517cd453ede3be68ab65260af5389adcb8be5f4c1c7cdec63bbeef5d"},
- {file = "multidict-6.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d614de950f7dd9d295590a5b3017dd1f0a5278a97d15a10d037a2f24e7f6d65b"},
- {file = "multidict-6.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d12ce09473c3f497d8944c210899043686f88b811970edc5eb6486f413caa267"},
- {file = "multidict-6.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d5a2c6f673c0b5f8bd1049208a313d7e038972aa2ab898bd486f1d29a8c62130"},
- {file = "multidict-6.6.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ff27fc5526b8740735612ea32d8fab2f79e83824b8f9e7f2b88c9e1db28d6f79"},
- {file = "multidict-6.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:279bfd45fecc0d9cdb6926b2a58381cae0514689d6fab67e39a88304301da90a"},
- {file = "multidict-6.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b28f421e6f8b444f636bbf4b99e01db5adeb673691ebb764eb39c17dc64179cd"},
- {file = "multidict-6.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11537e9e25241a98746f265230569d7230ad2d8f0d26e863f974e1c991ff5a45"},
- {file = "multidict-6.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e5b1647506370075513fb19424141853f5cc68dbba38559655dcaafce4d99f27"},
- {file = "multidict-6.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fe2bab539a912c3aa24dd3f96e4f6a45b9fac819184fa1d09aec8f289bd7f3ab"},
- {file = "multidict-6.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:9d30a1ef323867e71e96c62434cc52b072160e4f9be0169ec2fea516d61003dd"},
- {file = "multidict-6.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0b9cc871bc3e580224f9f3c0cd172a1d91e5f4e6c1164d039e3e6f9542f09bf3"},
- {file = "multidict-6.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:aa98b25a25eaefd8728cffab14066bdc10b30168d4dd32039c5191d2dc863631"},
- {file = "multidict-6.6.0-cp313-cp313t-win32.whl", hash = "sha256:b62d2907e8014c3e65b7725271029085aaf8885d34f5bab526cd960bcf40905f"},
- {file = "multidict-6.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:954591356227721d7557a9f9ea0f80235608f2dc99c5bb1869f654e890528358"},
- {file = "multidict-6.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:14b3d44838170996d217b168de2c9dd1cefbb9de6a18c8cfd07cec141b489e41"},
- {file = "multidict-6.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87de7abfcebdbed9bdb5d7fe1a7e8585057dffee752bd617d578dcf437fc7bb"},
- {file = "multidict-6.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:715e82e2afd84e7fb614fc1cb382e543796869036fb7af199abfb4237badf203"},
- {file = "multidict-6.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d344e6667a8a77deab4d18565e8494d720c3372461ab812f7e1edd4f6b5422aa"},
- {file = "multidict-6.6.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe61def5a869558956e242365492055288f9317ae7059b13cb44b13fb8bbaa89"},
- {file = "multidict-6.6.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:557b196480183ba62850c02af58f995a7436724470b9fe6571717b5bc3c953b5"},
- {file = "multidict-6.6.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8783c2e4290d25b4b4804796048b3ab531f37bffa178291805e2671128ea865f"},
- {file = "multidict-6.6.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ba928222e0d0e261d4059c074ed18d8103740184c81b3a4303950103808ee7e"},
- {file = "multidict-6.6.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12efd613c7ec9a8f90e8a586580c15ed325bb4d7fc98b57732ff6876e49849b8"},
- {file = "multidict-6.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a10f61cf9e5616833189a2a14a2713700160fbcbede8a8fa7ae38e86f6cfb6c"},
- {file = "multidict-6.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:c91d56070ceb776c12dfe52fdf07e6291c1044511674f6433c80f16a96e130a5"},
- {file = "multidict-6.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bbd8f9e6ea509fc7dcbbe7fedcdc6c5a3b14b199df037d545643a51c2e18b93f"},
- {file = "multidict-6.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:027048e15f907757137e66b2820aa3852e9f9680e81acda1b9fe1a9e5a9dcc89"},
- {file = "multidict-6.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a70531e2b53858787c5398cb7d2d05a99d243cc00f88b283e045dfd92bdde9fb"},
- {file = "multidict-6.6.0-cp39-cp39-win32.whl", hash = "sha256:179fe3828f51fe07e820796b4a613ac4996f0337f579ee87bcbd3d9d9b90070c"},
- {file = "multidict-6.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:00e0b40a915534b0dc122e3e72213d0aa0d8abedc7168c5f5d4fcece14371b32"},
- {file = "multidict-6.6.0-cp39-cp39-win_arm64.whl", hash = "sha256:0a902ed2836e2bd6ab37c5fe39686a81f0bb8190c69f5d7a952845ae6cf138c0"},
- {file = "multidict-6.6.0-py3-none-any.whl", hash = "sha256:447df643754e273681fda37764a89880d32c86cab102bfc05c1e8359ebcf0980"},
- {file = "multidict-6.6.0.tar.gz", hash = "sha256:460b213769cb8691b5ba2f12e53522acd95eb5b2602497d4d7e64069a61e5941"},
+groups = ["dev"]
+files = [
+ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"},
+ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"},
+ {file = "multidict-6.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdea2e7b2456cfb6694fb113066fd0ec7ea4d67e3a35e1f4cbeea0b448bf5872"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17207077e29342fdc2c9a82e4b306f1127bf1ea91f8b71e02d4798a70bb99991"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4f49cb5661344764e4c7c7973e92a47a59b8fc19b6523649ec9dc4960e58a03"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a9fc4caa29e2e6ae408d1c450ac8bf19892c5fca83ee634ecd88a53332c59981"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c5f0c21549ab432b57dcc82130f388d84ad8179824cc3f223d5e7cfbfd4143f6"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7dfb78d966b2c906ae1d28ccf6e6712a3cd04407ee5088cd276fe8cb42186190"},
+ {file = "multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b0d9b91d1aa44db9c1f1ecd0d9d2ae610b2f4f856448664e01a3b35899f3f92"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dd96c01a9dcd4889dcfcf9eb5544ca0c77603f239e3ffab0524ec17aea9a93ee"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:067343c68cd6612d375710f895337b3a98a033c94f14b9a99eff902f205424e2"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5884a04f4ff56c6120f6ccf703bdeb8b5079d808ba604d4d53aec0d55dc33568"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8affcf1c98b82bc901702eb73b6947a1bfa170823c153fe8a47b5f5f02e48e40"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0d17522c37d03e85c8098ec8431636309b2682cf12e58f4dbc76121fb50e4962"},
+ {file = "multidict-6.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24c0cf81544ca5e17cfcb6e482e7a82cd475925242b308b890c9452a074d4505"},
+ {file = "multidict-6.7.1-cp310-cp310-win32.whl", hash = "sha256:d82dd730a95e6643802f4454b8fdecdf08667881a9c5670db85bc5a56693f122"},
+ {file = "multidict-6.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cf37cbe5ced48d417ba045aca1b21bafca67489452debcde94778a576666a1df"},
+ {file = "multidict-6.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:59bc83d3f66b41dac1e7460aac1d196edc70c9ba3094965c467715a70ecb46db"},
+ {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d"},
+ {file = "multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e"},
+ {file = "multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0"},
+ {file = "multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0"},
+ {file = "multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa"},
+ {file = "multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a"},
+ {file = "multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b"},
+ {file = "multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6"},
+ {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172"},
+ {file = "multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd"},
+ {file = "multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a"},
+ {file = "multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a"},
+ {file = "multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba"},
+ {file = "multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511"},
+ {file = "multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19"},
+ {file = "multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf"},
+ {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23"},
+ {file = "multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2"},
+ {file = "multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed"},
+ {file = "multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d"},
+ {file = "multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33"},
+ {file = "multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3"},
+ {file = "multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5"},
+ {file = "multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df"},
+ {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1"},
+ {file = "multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963"},
+ {file = "multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd"},
+ {file = "multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52"},
+ {file = "multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108"},
+ {file = "multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32"},
+ {file = "multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8"},
+ {file = "multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118"},
+ {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee"},
+ {file = "multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2"},
+ {file = "multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37"},
+ {file = "multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1"},
+ {file = "multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b"},
+ {file = "multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d"},
+ {file = "multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f"},
+ {file = "multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5"},
+ {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581"},
+ {file = "multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a"},
+ {file = "multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d"},
+ {file = "multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9"},
+ {file = "multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2"},
+ {file = "multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7"},
+ {file = "multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5"},
+ {file = "multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2"},
+ {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:65573858d27cdeaca41893185677dc82395159aa28875a8867af66532d413a8f"},
+ {file = "multidict-6.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c524c6fb8fc342793708ab111c4dbc90ff9abd568de220432500e47e990c0358"},
+ {file = "multidict-6.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aa23b001d968faef416ff70dc0f1ab045517b9b42a90edd3e9bcdb06479e31d5"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6704fa2b7453b2fb121740555fa1ee20cd98c4d011120caf4d2b8d4e7c76eec0"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:121a34e5bfa410cdf2c8c49716de160de3b1dbcd86b49656f5681e4543bcd1a8"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:026d264228bcd637d4e060844e39cdc60f86c479e463d49075dedc21b18fbbe0"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e697826df7eb63418ee190fd06ce9f1803593bb4b9517d08c60d9b9a7f69d8f"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb08271280173720e9fea9ede98e5231defcbad90f1624bea26f32ec8a956e2f"},
+ {file = "multidict-6.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c6b3228e1d80af737b72925ce5fb4daf5a335e49cd7ab77ed7b9fdfbf58c526e"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3943debf0fbb57bdde5901695c11094a9a36723e5c03875f87718ee15ca2f4d2"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:98c5787b0a0d9a41d9311eae44c3b76e6753def8d8870ab501320efe75a6a5f8"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08ccb2a6dc72009093ebe7f3f073e5ec5964cba9a706fa94b1a1484039b87941"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb351f72c26dc9abe338ca7294661aa22969ad8ffe7ef7d5541d19f368dc854a"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ac1c665bad8b5d762f5f85ebe4d94130c26965f11de70c708c75671297c776de"},
+ {file = "multidict-6.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fa6609d0364f4f6f58351b4659a1f3e0e898ba2a8c5cac04cb2c7bc556b0bc5"},
+ {file = "multidict-6.7.1-cp39-cp39-win32.whl", hash = "sha256:6f77ce314a29263e67adadc7e7c1bc699fcb3a305059ab973d038f87caa42ed0"},
+ {file = "multidict-6.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:f537b55778cd3cbee430abe3131255d3a78202e0f9ea7ffc6ada893a4bcaeea4"},
+ {file = "multidict-6.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:749aa54f578f2e5f439538706a475aa844bfa8ef75854b1401e6e528e4937cf9"},
+ {file = "multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56"},
+ {file = "multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"},
]
[[package]]
@@ -1244,6 +1490,7 @@ version = "8.4.0"
description = "Simple yet flexible natural sorting in Python."
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
{file = "natsort-8.4.0-py3-none-any.whl", hash = "sha256:4732914fb471f56b5cce04d7bae6f164a592c7712e1c85f9ef585e197299521c"},
{file = "natsort-8.4.0.tar.gz", hash = "sha256:45312c4a0e5507593da193dedd04abb1469253b601ecaf63445ad80f0a1ea581"},
@@ -1255,13 +1502,14 @@ icu = ["PyICU (>=1.0.0)"]
[[package]]
name = "packaging"
-version = "25.0"
+version = "26.3"
description = "Core utilities for Python packages"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
+groups = ["main", "dev"]
files = [
- {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"},
- {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"},
+ {file = "packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c"},
+ {file = "packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79"},
]
[[package]]
@@ -1270,6 +1518,7 @@ version = "0.5.7"
description = "Divides large result sets into pages for easier browsing"
optional = false
python-versions = "*"
+groups = ["main"]
files = [
{file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"},
{file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"},
@@ -1281,136 +1530,165 @@ lint = ["black"]
[[package]]
name = "pathspec"
-version = "0.12.1"
+version = "1.1.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
- {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
+ {file = "pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189"},
+ {file = "pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"},
]
+[package.extras]
+hyperscan = ["hyperscan (>=0.7)"]
+optional = ["typing-extensions (>=4)"]
+re2 = ["google-re2 (>=1.1)"]
+
[[package]]
name = "pillow"
-version = "11.2.1"
+version = "11.3.0"
description = "Python Imaging Library (Fork)"
optional = false
python-versions = ">=3.9"
-files = [
- {file = "pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047"},
- {file = "pillow-11.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95"},
- {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ba4be812c7a40280629e55ae0b14a0aafa150dd6451297562e1764808bbe61"},
- {file = "pillow-11.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8bd62331e5032bc396a93609982a9ab6b411c05078a52f5fe3cc59234a3abd1"},
- {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:562d11134c97a62fe3af29581f083033179f7ff435f78392565a1ad2d1c2c45c"},
- {file = "pillow-11.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c97209e85b5be259994eb5b69ff50c5d20cca0f458ef9abd835e262d9d88b39d"},
- {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0c3e6d0f59171dfa2e25d7116217543310908dfa2770aa64b8f87605f8cacc97"},
- {file = "pillow-11.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc1c3bc53befb6096b84165956e886b1729634a799e9d6329a0c512ab651e579"},
- {file = "pillow-11.2.1-cp310-cp310-win32.whl", hash = "sha256:312c77b7f07ab2139924d2639860e084ec2a13e72af54d4f08ac843a5fc9c79d"},
- {file = "pillow-11.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9bc7ae48b8057a611e5fe9f853baa88093b9a76303937449397899385da06fad"},
- {file = "pillow-11.2.1-cp310-cp310-win_arm64.whl", hash = "sha256:2728567e249cdd939f6cc3d1f049595c66e4187f3c34078cbc0a7d21c47482d2"},
- {file = "pillow-11.2.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35ca289f712ccfc699508c4658a1d14652e8033e9b69839edf83cbdd0ba39e70"},
- {file = "pillow-11.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0409af9f829f87a2dfb7e259f78f317a5351f2045158be321fd135973fff7bf"},
- {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4e5c5edee874dce4f653dbe59db7c73a600119fbea8d31f53423586ee2aafd7"},
- {file = "pillow-11.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b93a07e76d13bff9444f1a029e0af2964e654bfc2e2c2d46bfd080df5ad5f3d8"},
- {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6def7eed9e7fa90fde255afaf08060dc4b343bbe524a8f69bdd2a2f0018f600"},
- {file = "pillow-11.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8f4f3724c068be008c08257207210c138d5f3731af6c155a81c2b09a9eb3a788"},
- {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0a6709b47019dff32e678bc12c63008311b82b9327613f534e496dacaefb71e"},
- {file = "pillow-11.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f6b0c664ccb879109ee3ca702a9272d877f4fcd21e5eb63c26422fd6e415365e"},
- {file = "pillow-11.2.1-cp311-cp311-win32.whl", hash = "sha256:cc5d875d56e49f112b6def6813c4e3d3036d269c008bf8aef72cd08d20ca6df6"},
- {file = "pillow-11.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:0f5c7eda47bf8e3c8a283762cab94e496ba977a420868cb819159980b6709193"},
- {file = "pillow-11.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:4d375eb838755f2528ac8cbc926c3e31cc49ca4ad0cf79cff48b20e30634a4a7"},
- {file = "pillow-11.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f"},
- {file = "pillow-11.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b"},
- {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d"},
- {file = "pillow-11.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4"},
- {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d"},
- {file = "pillow-11.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4"},
- {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443"},
- {file = "pillow-11.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c"},
- {file = "pillow-11.2.1-cp312-cp312-win32.whl", hash = "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3"},
- {file = "pillow-11.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941"},
- {file = "pillow-11.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb"},
- {file = "pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28"},
- {file = "pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830"},
- {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0"},
- {file = "pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1"},
- {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f"},
- {file = "pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155"},
- {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14"},
- {file = "pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b"},
- {file = "pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2"},
- {file = "pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691"},
- {file = "pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c"},
- {file = "pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22"},
- {file = "pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7"},
- {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16"},
- {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b"},
- {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406"},
- {file = "pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91"},
- {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751"},
- {file = "pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9"},
- {file = "pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd"},
- {file = "pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e"},
- {file = "pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681"},
- {file = "pillow-11.2.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:7491cf8a79b8eb867d419648fff2f83cb0b3891c8b36da92cc7f1931d46108c8"},
- {file = "pillow-11.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b02d8f9cb83c52578a0b4beadba92e37d83a4ef11570a8688bbf43f4ca50909"},
- {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:014ca0050c85003620526b0ac1ac53f56fc93af128f7546623cc8e31875ab928"},
- {file = "pillow-11.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3692b68c87096ac6308296d96354eddd25f98740c9d2ab54e1549d6c8aea9d79"},
- {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f781dcb0bc9929adc77bad571b8621ecb1e4cdef86e940fe2e5b5ee24fd33b35"},
- {file = "pillow-11.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2b490402c96f907a166615e9a5afacf2519e28295f157ec3a2bb9bd57de638cb"},
- {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dd6b20b93b3ccc9c1b597999209e4bc5cf2853f9ee66e3fc9a400a78733ffc9a"},
- {file = "pillow-11.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4b835d89c08a6c2ee7781b8dd0a30209a8012b5f09c0a665b65b0eb3560b6f36"},
- {file = "pillow-11.2.1-cp39-cp39-win32.whl", hash = "sha256:b10428b3416d4f9c61f94b494681280be7686bda15898a3a9e08eb66a6d92d67"},
- {file = "pillow-11.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:6ebce70c3f486acf7591a3d73431fa504a4e18a9b97ff27f5f47b7368e4b9dd1"},
- {file = "pillow-11.2.1-cp39-cp39-win_arm64.whl", hash = "sha256:c27476257b2fdcd7872d54cfd119b3a9ce4610fb85c8e32b70b42e3680a29a1e"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9b7b0d4fd2635f54ad82785d56bc0d94f147096493a79985d0ab57aedd563156"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa442755e31c64037aa7c1cb186e0b369f8416c567381852c63444dd666fb772"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d3348c95b766f54b76116d53d4cb171b52992a1027e7ca50c81b43b9d9e363"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85d27ea4c889342f7e35f6d56e7e1cb345632ad592e8c51b693d7b7556043ce0"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bf2c33d6791c598142f00c9c4c7d47f6476731c31081331664eb26d6ab583e01"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e616e7154c37669fc1dfc14584f11e284e05d1c650e1c0f972f281c4ccc53193"},
- {file = "pillow-11.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:39ad2e0f424394e3aebc40168845fee52df1394a4673a6ee512d840d14ab3013"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:80f1df8dbe9572b4b7abdfa17eb5d78dd620b1d55d9e25f834efdbee872d3aed"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ea926cfbc3957090becbcbbb65ad177161a2ff2ad578b5a6ec9bb1e1cd78753c"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:738db0e0941ca0376804d4de6a782c005245264edaa253ffce24e5a15cbdc7bd"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db98ab6565c69082ec9b0d4e40dd9f6181dab0dd236d26f7a50b8b9bfbd5076"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:036e53f4170e270ddb8797d4c590e6dd14d28e15c7da375c18978045f7e6c37b"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14f73f7c291279bd65fda51ee87affd7c1e097709f7fdd0188957a16c264601f"},
- {file = "pillow-11.2.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:208653868d5c9ecc2b327f9b9ef34e0e42a4cdd172c2988fd81d62d2bc9bc044"},
- {file = "pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6"},
+groups = ["main"]
+files = [
+ {file = "pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860"},
+ {file = "pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad"},
+ {file = "pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0"},
+ {file = "pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b"},
+ {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50"},
+ {file = "pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae"},
+ {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9"},
+ {file = "pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e"},
+ {file = "pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6"},
+ {file = "pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f"},
+ {file = "pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f"},
+ {file = "pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722"},
+ {file = "pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288"},
+ {file = "pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d"},
+ {file = "pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494"},
+ {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58"},
+ {file = "pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f"},
+ {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e"},
+ {file = "pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94"},
+ {file = "pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0"},
+ {file = "pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac"},
+ {file = "pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd"},
+ {file = "pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4"},
+ {file = "pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69"},
+ {file = "pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d"},
+ {file = "pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6"},
+ {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7"},
+ {file = "pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024"},
+ {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809"},
+ {file = "pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d"},
+ {file = "pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149"},
+ {file = "pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d"},
+ {file = "pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542"},
+ {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd"},
+ {file = "pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8"},
+ {file = "pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f"},
+ {file = "pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c"},
+ {file = "pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd"},
+ {file = "pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e"},
+ {file = "pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1"},
+ {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805"},
+ {file = "pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8"},
+ {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2"},
+ {file = "pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b"},
+ {file = "pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3"},
+ {file = "pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51"},
+ {file = "pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580"},
+ {file = "pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e"},
+ {file = "pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d"},
+ {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced"},
+ {file = "pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c"},
+ {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8"},
+ {file = "pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59"},
+ {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe"},
+ {file = "pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c"},
+ {file = "pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788"},
+ {file = "pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31"},
+ {file = "pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e"},
+ {file = "pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12"},
+ {file = "pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a"},
+ {file = "pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632"},
+ {file = "pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673"},
+ {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027"},
+ {file = "pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77"},
+ {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874"},
+ {file = "pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a"},
+ {file = "pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214"},
+ {file = "pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635"},
+ {file = "pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6"},
+ {file = "pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae"},
+ {file = "pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653"},
+ {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6"},
+ {file = "pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36"},
+ {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b"},
+ {file = "pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477"},
+ {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50"},
+ {file = "pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b"},
+ {file = "pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12"},
+ {file = "pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db"},
+ {file = "pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa"},
+ {file = "pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f"},
+ {file = "pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081"},
+ {file = "pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4"},
+ {file = "pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc"},
+ {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06"},
+ {file = "pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a"},
+ {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978"},
+ {file = "pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d"},
+ {file = "pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71"},
+ {file = "pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada"},
+ {file = "pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a"},
+ {file = "pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7"},
+ {file = "pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8"},
+ {file = "pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523"},
]
[package.extras]
-docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
+docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
fpx = ["olefile"]
mic = ["olefile"]
test-arrow = ["pyarrow"]
-tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"]
-typing = ["typing-extensions"]
+tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"]
+typing = ["typing-extensions ; python_version < \"3.10\""]
xmp = ["defusedxml"]
[[package]]
name = "platformdirs"
-version = "4.3.8"
+version = "4.11.3"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"},
- {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"},
+ {file = "platformdirs-4.11.3-py3-none-any.whl", hash = "sha256:5ed065d443751de711da036041a7a214122efc4a4de393b3f4137ba5576540e7"},
+ {file = "platformdirs-4.11.3.tar.gz", hash = "sha256:66a73d38a849810252df809a3d8bcbda8e26f6c189920e7535ad608a48dbb5ab"},
]
-[package.extras]
-docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"]
-type = ["mypy (>=1.14.1)"]
-
[[package]]
name = "pluggy"
version = "1.6.0"
description = "plugin and hook calling mechanisms for python"
optional = false
python-versions = ">=3.9"
+groups = ["dev"]
files = [
{file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"},
{file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"},
@@ -1422,263 +1700,342 @@ testing = ["coverage", "pytest", "pytest-benchmark"]
[[package]]
name = "propcache"
-version = "0.3.2"
+version = "0.5.2"
description = "Accelerated property cache"
optional = false
+python-versions = ">=3.10"
+groups = ["dev"]
+files = [
+ {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b"},
+ {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c"},
+ {file = "propcache-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bf3be92233808fcd338eba0fb4d0b59ec5772af4f4ecfcec450d1bfc0f8b5eb"},
+ {file = "propcache-0.5.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2f8ea531c794b9d6274acd4e8d2c2ebcac590a4361d27482edd3010b79f1325e"},
+ {file = "propcache-0.5.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:decfca4c79dd53ebab484b00cc4b6717d8c369f86e74aa4ca395a64ac651495e"},
+ {file = "propcache-0.5.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4621064bbf28fa77ff64dd5d94367c04684c67d3a5bf1dff25f0cd0d98a38f3b"},
+ {file = "propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b96db7141a592cbc968daf1feea83a118e6ab378af4abbc72b248c895414c22d"},
+ {file = "propcache-0.5.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ca071adabaab6e9219924bbe00af821f1ee7de113a9eca1cdc292de3d120f4d"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e4294d04a94dcab1b3bccd8b66d962dcad411a1d19414b2a41d1445f1de32ad0"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a0e399a2eccb91ed18721f86aa85757727400b6865c89e88934781deb9c8498b"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:823581fd5cb08b12a48bfa11fe962a7916766b6170c17b028fbdf762b85eb9bf"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:949c91d1a990cf3b2e8188dfcfb25005e0b834a06c63fa4ef9f360878ce21ecf"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc1177027eda740fdb152706bd215a3f124e3eea15afc39f2cb9fe351b50619e"},
+ {file = "propcache-0.5.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b05d643f944a8c3c4bd86d65ffd87bf3264b617f87791940302bc474d2ff5274"},
+ {file = "propcache-0.5.2-cp310-cp310-win32.whl", hash = "sha256:8114f28879e0904748e831c3a7774261bd9e75f49be089f389a76f959dcd13fe"},
+ {file = "propcache-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:5fcb98e7598b1ee0addab320d90f65b530297a867dbfe9de52ea838077e16e3d"},
+ {file = "propcache-0.5.2-cp310-cp310-win_arm64.whl", hash = "sha256:04dc2390d9edbbaef7461f33322555976ffddf0b650a038649d026358714e6c5"},
+ {file = "propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78"},
+ {file = "propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959"},
+ {file = "propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7"},
+ {file = "propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511"},
+ {file = "propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660"},
+ {file = "propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66"},
+ {file = "propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b"},
+ {file = "propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27"},
+ {file = "propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f"},
+ {file = "propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0"},
+ {file = "propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82"},
+ {file = "propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab"},
+ {file = "propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba"},
+ {file = "propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a"},
+ {file = "propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf"},
+ {file = "propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144"},
+ {file = "propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9"},
+ {file = "propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42"},
+ {file = "propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476"},
+ {file = "propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33"},
+ {file = "propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a"},
+ {file = "propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031"},
+ {file = "propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42"},
+ {file = "propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84"},
+ {file = "propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a"},
+ {file = "propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117"},
+ {file = "propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098"},
+ {file = "propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4"},
+ {file = "propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e"},
+ {file = "propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7"},
+ {file = "propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d"},
+ {file = "propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704"},
+ {file = "propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4"},
+ {file = "propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d"},
+ {file = "propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757"},
+ {file = "propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f"},
+ {file = "propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d"},
+ {file = "propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa"},
+ {file = "propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94"},
+ {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164"},
+ {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f"},
+ {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c"},
+ {file = "propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc"},
+ {file = "propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55"},
+ {file = "propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568"},
+ {file = "propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191"},
+ {file = "propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7"},
+ {file = "propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96"},
+ {file = "propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999"},
+ {file = "propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e"},
+ {file = "propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539"},
+ {file = "propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e"},
+ {file = "propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979"},
+ {file = "propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80"},
+ {file = "propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825"},
+ {file = "propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5"},
+ {file = "propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4"},
+ {file = "propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0"},
+ {file = "propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c"},
+ {file = "propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0"},
+ {file = "propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb"},
+ {file = "propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078"},
+ {file = "propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa"},
+ {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917"},
+ {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe"},
+ {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03"},
+ {file = "propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335"},
+ {file = "propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d"},
+ {file = "propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2"},
+ {file = "propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821"},
+ {file = "propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370"},
+ {file = "propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6"},
+ {file = "propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe"},
+ {file = "propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427"},
+]
+
+[[package]]
+name = "properdocs"
+version = "1.6.7"
+description = "Project documentation with Markdown."
+optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "propcache-0.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:22d9962a358aedbb7a2e36187ff273adeaab9743373a272976d2e348d08c7770"},
- {file = "propcache-0.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0d0fda578d1dc3f77b6b5a5dce3b9ad69a8250a891760a548df850a5e8da87f3"},
- {file = "propcache-0.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3def3da3ac3ce41562d85db655d18ebac740cb3fa4367f11a52b3da9d03a5cc3"},
- {file = "propcache-0.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bec58347a5a6cebf239daba9bda37dffec5b8d2ce004d9fe4edef3d2815137e"},
- {file = "propcache-0.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55ffda449a507e9fbd4aca1a7d9aa6753b07d6166140e5a18d2ac9bc49eac220"},
- {file = "propcache-0.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a67fb39229a8a8491dd42f864e5e263155e729c2e7ff723d6e25f596b1e8cb"},
- {file = "propcache-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da1cf97b92b51253d5b68cf5a2b9e0dafca095e36b7f2da335e27dc6172a614"},
- {file = "propcache-0.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f559e127134b07425134b4065be45b166183fdcb433cb6c24c8e4149056ad50"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:aff2e4e06435d61f11a428360a932138d0ec288b0a31dd9bd78d200bd4a2b339"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4927842833830942a5d0a56e6f4839bc484785b8e1ce8d287359794818633ba0"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6107ddd08b02654a30fb8ad7a132021759d750a82578b94cd55ee2772b6ebea2"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:70bd8b9cd6b519e12859c99f3fc9a93f375ebd22a50296c3a295028bea73b9e7"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2183111651d710d3097338dd1893fcf09c9f54e27ff1a8795495a16a469cc90b"},
- {file = "propcache-0.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fb075ad271405dcad8e2a7ffc9a750a3bf70e533bd86e89f0603e607b93aa64c"},
- {file = "propcache-0.3.2-cp310-cp310-win32.whl", hash = "sha256:404d70768080d3d3bdb41d0771037da19d8340d50b08e104ca0e7f9ce55fce70"},
- {file = "propcache-0.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:7435d766f978b4ede777002e6b3b6641dd229cd1da8d3d3106a45770365f9ad9"},
- {file = "propcache-0.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b8d2f607bd8f80ddc04088bc2a037fdd17884a6fcadc47a96e334d72f3717be"},
- {file = "propcache-0.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06766d8f34733416e2e34f46fea488ad5d60726bb9481d3cddf89a6fa2d9603f"},
- {file = "propcache-0.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2dc1f4a1df4fecf4e6f68013575ff4af84ef6f478fe5344317a65d38a8e6dc9"},
- {file = "propcache-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be29c4f4810c5789cf10ddf6af80b041c724e629fa51e308a7a0fb19ed1ef7bf"},
- {file = "propcache-0.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d61f6970ecbd8ff2e9360304d5c8876a6abd4530cb752c06586849ac8a9dc9"},
- {file = "propcache-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62180e0b8dbb6b004baec00a7983e4cc52f5ada9cd11f48c3528d8cfa7b96a66"},
- {file = "propcache-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c144ca294a204c470f18cf4c9d78887810d04a3e2fbb30eea903575a779159df"},
- {file = "propcache-0.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5c2a784234c28854878d68978265617aa6dc0780e53d44b4d67f3651a17a9a2"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5745bc7acdafa978ca1642891b82c19238eadc78ba2aaa293c6863b304e552d7"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c0075bf773d66fa8c9d41f66cc132ecc75e5bb9dd7cce3cfd14adc5ca184cb95"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5f57aa0847730daceff0497f417c9de353c575d8da3579162cc74ac294c5369e"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:eef914c014bf72d18efb55619447e0aecd5fb7c2e3fa7441e2e5d6099bddff7e"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a4092e8549031e82facf3decdbc0883755d5bbcc62d3aea9d9e185549936dcf"},
- {file = "propcache-0.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:85871b050f174bc0bfb437efbdb68aaf860611953ed12418e4361bc9c392749e"},
- {file = "propcache-0.3.2-cp311-cp311-win32.whl", hash = "sha256:36c8d9b673ec57900c3554264e630d45980fd302458e4ac801802a7fd2ef7897"},
- {file = "propcache-0.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53af8cb6a781b02d2ea079b5b853ba9430fcbe18a8e3ce647d5982a3ff69f39"},
- {file = "propcache-0.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10"},
- {file = "propcache-0.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154"},
- {file = "propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615"},
- {file = "propcache-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db"},
- {file = "propcache-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1"},
- {file = "propcache-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c"},
- {file = "propcache-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67"},
- {file = "propcache-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06"},
- {file = "propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1"},
- {file = "propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1"},
- {file = "propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c"},
- {file = "propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945"},
- {file = "propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252"},
- {file = "propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f"},
- {file = "propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33"},
- {file = "propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e"},
- {file = "propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1"},
- {file = "propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3"},
- {file = "propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206"},
- {file = "propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43"},
- {file = "propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02"},
- {file = "propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05"},
- {file = "propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b"},
- {file = "propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0"},
- {file = "propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e"},
- {file = "propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28"},
- {file = "propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a"},
- {file = "propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c"},
- {file = "propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725"},
- {file = "propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770"},
- {file = "propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330"},
- {file = "propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394"},
- {file = "propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198"},
- {file = "propcache-0.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7fad897f14d92086d6b03fdd2eb844777b0c4d7ec5e3bac0fbae2ab0602bbe5"},
- {file = "propcache-0.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1f43837d4ca000243fd7fd6301947d7cb93360d03cd08369969450cc6b2ce3b4"},
- {file = "propcache-0.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:261df2e9474a5949c46e962065d88eb9b96ce0f2bd30e9d3136bcde84befd8f2"},
- {file = "propcache-0.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e514326b79e51f0a177daab1052bc164d9d9e54133797a3a58d24c9c87a3fe6d"},
- {file = "propcache-0.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a996adb6904f85894570301939afeee65f072b4fd265ed7e569e8d9058e4ec"},
- {file = "propcache-0.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76cace5d6b2a54e55b137669b30f31aa15977eeed390c7cbfb1dafa8dfe9a701"},
- {file = "propcache-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31248e44b81d59d6addbb182c4720f90b44e1efdc19f58112a3c3a1615fb47ef"},
- {file = "propcache-0.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb7fa19dbf88d3857363e0493b999b8011eea856b846305d8c0512dfdf8fbb1"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d81ac3ae39d38588ad0549e321e6f773a4e7cc68e7751524a22885d5bbadf886"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:cc2782eb0f7a16462285b6f8394bbbd0e1ee5f928034e941ffc444012224171b"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:db429c19a6c7e8a1c320e6a13c99799450f411b02251fb1b75e6217cf4a14fcb"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:21d8759141a9e00a681d35a1f160892a36fb6caa715ba0b832f7747da48fb6ea"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2ca6d378f09adb13837614ad2754fa8afaee330254f404299611bce41a8438cb"},
- {file = "propcache-0.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34a624af06c048946709f4278b4176470073deda88d91342665d95f7c6270fbe"},
- {file = "propcache-0.3.2-cp39-cp39-win32.whl", hash = "sha256:4ba3fef1c30f306b1c274ce0b8baaa2c3cdd91f645c48f06394068f37d3837a1"},
- {file = "propcache-0.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:7a2368eed65fc69a7a7a40b27f22e85e7627b74216f0846b04ba5c116e191ec9"},
- {file = "propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f"},
- {file = "propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168"},
+ {file = "properdocs-1.6.7-py3-none-any.whl", hash = "sha256:6fa0cfa2e01bf338f684892c8a506cf70ea88ae7f3479c933b6fa20168101cbd"},
+ {file = "properdocs-1.6.7.tar.gz", hash = "sha256:adc7b16e562890af0e098a7e5b02e3a81c20894a87d6a28d345c9300de73c26e"},
]
+[package.dependencies]
+click = ">=7.0"
+colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
+ghp-import = ">=1.0"
+jinja2 = ">=2.11.1"
+markdown = ">=3.3.6"
+markupsafe = ">=2.0.1"
+packaging = ">=20.5"
+pathspec = ">=0.11.1"
+platformdirs = ">=2.2.0"
+pyyaml = ">=5.1"
+pyyaml-env-tag = ">=0.1"
+watchdog = ">=2.0"
+
+[package.extras]
+i18n = ["babel (>=2.9.0)"]
+
[[package]]
name = "pycparser"
-version = "2.22"
+version = "3.0"
description = "C parser in Python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
+markers = "implementation_name != \"PyPy\""
files = [
- {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
- {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
+ {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"},
+ {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"},
]
[[package]]
name = "pydantic"
-version = "2.11.7"
+version = "2.13.4"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b"},
- {file = "pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db"},
+ {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"},
+ {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"},
]
[package.dependencies]
annotated-types = ">=0.6.0"
-pydantic-core = "2.33.2"
-typing-extensions = ">=4.12.2"
-typing-inspection = ">=0.4.0"
+pydantic-core = "2.46.4"
+typing-extensions = ">=4.14.1"
+typing-inspection = ">=0.4.2"
[package.extras]
email = ["email-validator (>=2.0.0)"]
-timezone = ["tzdata"]
+timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""]
[[package]]
name = "pydantic-core"
-version = "2.33.2"
+version = "2.46.4"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.9"
-files = [
- {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"},
- {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"},
- {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"},
- {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"},
- {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"},
- {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"},
- {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"},
- {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"},
- {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"},
- {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"},
- {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"},
- {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"},
- {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"},
- {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"},
- {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"},
- {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"},
- {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"},
- {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"},
- {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"},
- {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"},
- {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"},
- {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"},
- {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"},
- {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"},
- {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"},
- {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"},
- {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"},
- {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"},
- {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"},
- {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"},
- {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"},
- {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"},
- {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"},
- {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"},
- {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"},
- {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"},
- {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"},
- {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"},
- {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"},
- {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"},
- {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"},
- {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"},
- {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"},
- {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"},
- {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"},
- {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"},
- {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"},
- {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"},
- {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"},
- {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"},
+groups = ["main"]
+files = [
+ {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"},
+ {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"},
+ {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"},
+ {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"},
+ {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"},
+ {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"},
+ {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-win32.whl", hash = "sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1"},
+ {file = "pydantic_core-2.46.4-cp39-cp39-win_amd64.whl", hash = "sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac"},
+ {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"},
+ {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"},
+ {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"},
+ {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"},
+ {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"},
+ {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"},
+ {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"},
+ {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"},
+ {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"},
+ {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"},
]
[package.dependencies]
-typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
+typing-extensions = ">=4.14.1"
[[package]]
name = "pygments"
-version = "2.19.2"
+version = "2.21.0"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
+groups = ["main", "dev"]
files = [
- {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"},
- {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"},
+ {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"},
+ {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"},
]
[package.extras]
@@ -1686,13 +2043,14 @@ windows-terminal = ["colorama (>=0.4.6)"]
[[package]]
name = "pymdown-extensions"
-version = "10.16"
+version = "10.21.3"
description = "Extension pack for Python Markdown."
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "pymdown_extensions-10.16-py3-none-any.whl", hash = "sha256:f5dd064a4db588cb2d95229fc4ee63a1b16cc8b4d0e6145c0899ed8723da1df2"},
- {file = "pymdown_extensions-10.16.tar.gz", hash = "sha256:71dac4fca63fabeffd3eb9038b756161a33ec6e8d230853d3cecf562155ab3de"},
+ {file = "pymdown_extensions-10.21.3-py3-none-any.whl", hash = "sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6"},
+ {file = "pymdown_extensions-10.21.3.tar.gz", hash = "sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354"},
]
[package.dependencies]
@@ -1704,13 +2062,14 @@ extra = ["pygments (>=2.19.1)"]
[[package]]
name = "pyparsing"
-version = "3.2.3"
-description = "pyparsing module - Classes and methods to define and execute parsing grammars"
+version = "3.3.2"
+description = "pyparsing - Classes and methods to define and execute parsing grammars"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
- {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"},
- {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"},
+ {file = "pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d"},
+ {file = "pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc"},
]
[package.extras]
@@ -1722,6 +2081,7 @@ version = "9.1.1"
description = "pytest: simple powerful testing with Python"
optional = false
python-versions = ">=3.10"
+groups = ["dev"]
files = [
{file = "pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"},
{file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"},
@@ -1743,6 +2103,7 @@ version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["main"]
files = [
{file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
{file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
@@ -1751,77 +2112,87 @@ files = [
[package.dependencies]
six = ">=1.5"
-[[package]]
-name = "pytz"
-version = "2025.2"
-description = "World timezone definitions, modern and historical"
-optional = false
-python-versions = "*"
-files = [
- {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"},
- {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"},
-]
-
[[package]]
name = "pyyaml"
-version = "6.0.2"
+version = "6.0.3"
description = "YAML parser and emitter for Python"
optional = false
python-versions = ">=3.8"
-files = [
- {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
- {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
- {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
- {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
- {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
- {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
- {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
- {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
- {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
- {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
- {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
- {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
- {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
- {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
- {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
- {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
- {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
- {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
- {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
- {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
- {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
- {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
- {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
- {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
- {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
- {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
- {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
- {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
- {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
- {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
- {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
- {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
- {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
- {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
- {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
- {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
- {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
- {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
- {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
- {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
- {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
+groups = ["main"]
+files = [
+ {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"},
+ {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"},
+ {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"},
+ {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"},
+ {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"},
+ {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"},
+ {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"},
+ {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"},
+ {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"},
+ {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"},
+ {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"},
+ {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"},
+ {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"},
+ {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"},
+ {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"},
+ {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"},
+ {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"},
+ {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"},
+ {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"},
+ {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"},
+ {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"},
+ {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"},
+ {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"},
+ {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"},
+ {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"},
+ {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"},
+ {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"},
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"},
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"},
+ {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"},
+ {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"},
+ {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"},
+ {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"},
+ {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"},
+ {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"},
+ {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"},
+ {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"},
+ {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"},
+ {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"},
+ {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"},
+ {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"},
+ {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"},
+ {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"},
+ {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"},
+ {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"},
+ {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"},
+ {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"},
+ {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"},
+ {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"},
+ {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"},
+ {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"},
+ {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"},
+ {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"},
+ {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"},
+ {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"},
+ {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"},
+ {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"},
+ {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"},
+ {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"},
+ {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"},
+ {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"},
+ {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"},
+ {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"},
+ {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"},
+ {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"},
]
[[package]]
@@ -1830,6 +2201,7 @@ version = "1.1"
description = "A custom YAML tag for referencing environment variables in YAML files."
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
{file = "pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04"},
{file = "pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff"},
@@ -1840,13 +2212,14 @@ pyyaml = "*"
[[package]]
name = "rdflib"
-version = "7.1.4"
+version = "7.6.0"
description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information."
optional = false
-python-versions = "<4.0.0,>=3.8.1"
+python-versions = ">=3.8.1"
+groups = ["main"]
files = [
- {file = "rdflib-7.1.4-py3-none-any.whl", hash = "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997"},
- {file = "rdflib-7.1.4.tar.gz", hash = "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174"},
+ {file = "rdflib-7.6.0-py3-none-any.whl", hash = "sha256:30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd"},
+ {file = "rdflib-7.6.0.tar.gz", hash = "sha256:6c831288d5e4a5a7ece85d0ccde9877d512a3d0f02d7c06455d00d6d0ea379df"},
]
[package.dependencies]
@@ -1854,31 +2227,34 @@ pyparsing = ">=2.1.0,<4"
[package.extras]
berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"]
+graphdb = ["httpx (>=0.28.1,<0.29.0)"]
html = ["html5rdf (>=1.2,<2)"]
lxml = ["lxml (>=4.3,<6.0)"]
networkx = ["networkx (>=2,<4)"]
orjson = ["orjson (>=3.9.14,<4)"]
+rdf4j = ["httpx (>=0.28.1,<0.29.0)"]
[[package]]
name = "requests"
-version = "2.32.4"
+version = "2.34.2"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"},
- {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"},
+ {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"},
+ {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"},
]
[package.dependencies]
-certifi = ">=2017.4.17"
+certifi = ">=2023.5.7"
charset_normalizer = ">=2,<4"
idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<3"
+urllib3 = ">=1.26,<3"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
-use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<8)"]
[[package]]
name = "requests-toolbelt"
@@ -1886,6 +2262,7 @@ version = "1.0.0"
description = "A utility belt for advanced users of python-requests"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+groups = ["main"]
files = [
{file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
{file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
@@ -1900,6 +2277,7 @@ version = "0.0.194"
description = "A fast Markdown linter written in Rust"
optional = false
python-versions = ">=3.7"
+groups = ["dev"]
files = [
{file = "rumdl-0.0.194-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dbfdf073349795d06ef9b9b1b506495ea848a0074c1645a10056fb4ec633eaea"},
{file = "rumdl-0.0.194-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b07b2c1e8ed5b2dcba5772259d3bee0a47711341d11055e289abcb9ca4348c0b"},
@@ -1917,6 +2295,7 @@ version = "1.17.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+groups = ["main"]
files = [
{file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"},
{file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"},
@@ -1924,52 +2303,56 @@ files = [
[[package]]
name = "smmap"
-version = "5.0.2"
+version = "5.0.3"
description = "A pure Python implementation of a sliding window memory map manager"
optional = false
python-versions = ">=3.7"
+groups = ["main"]
files = [
- {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"},
- {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"},
+ {file = "smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f"},
+ {file = "smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c"},
]
[[package]]
name = "soupsieve"
-version = "2.7"
+version = "2.9.2"
description = "A modern CSS selector implementation for Beautiful Soup."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"},
- {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"},
+ {file = "soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823"},
+ {file = "soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74"},
]
[[package]]
name = "super-collections"
-version = "0.5.3"
+version = "0.6.2"
description = "file: README.md"
optional = false
python-versions = ">=3.8"
+groups = ["main"]
files = [
- {file = "super_collections-0.5.3-py3-none-any.whl", hash = "sha256:907d35b25dc4070910e8254bf2f5c928348af1cf8a1f1e8259e06c666e902cff"},
- {file = "super_collections-0.5.3.tar.gz", hash = "sha256:94c1ec96c0a0d5e8e7d389ed8cde6882ac246940507c5e6b86e91945c2968d46"},
+ {file = "super_collections-0.6.2-py3-none-any.whl", hash = "sha256:291b74d26299e9051d69ad9d89e61b07b6646f86a57a2f5ab3063d206eee9c56"},
+ {file = "super_collections-0.6.2.tar.gz", hash = "sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a"},
]
[package.dependencies]
hjson = "*"
[package.extras]
-test = ["pytest (>=7.0)"]
+test = ["pytest (>=7.0)", "pyyaml", "rich"]
[[package]]
name = "termcolor"
-version = "3.1.0"
+version = "3.3.0"
description = "ANSI color formatting for output in terminal"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"},
- {file = "termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970"},
+ {file = "termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5"},
+ {file = "termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5"},
]
[package.extras]
@@ -1977,63 +2360,81 @@ tests = ["pytest", "pytest-cov"]
[[package]]
name = "tinycss2"
-version = "1.4.0"
+version = "1.5.1"
description = "A tiny CSS parser"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"},
- {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"},
+ {file = "tinycss2-1.5.1-py3-none-any.whl", hash = "sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661"},
+ {file = "tinycss2-1.5.1.tar.gz", hash = "sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957"},
]
[package.dependencies]
webencodings = ">=0.4"
[package.extras]
-doc = ["sphinx", "sphinx_rtd_theme"]
+doc = ["furo", "sphinx"]
test = ["pytest", "ruff"]
[[package]]
name = "typing-extensions"
-version = "4.14.0"
+version = "4.16.0"
description = "Backported and Experimental Type Hints for Python 3.9+"
optional = false
python-versions = ">=3.9"
+groups = ["main", "dev"]
files = [
- {file = "typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af"},
- {file = "typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4"},
+ {file = "typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8"},
+ {file = "typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5"},
]
+markers = {dev = "python_version < \"3.13\""}
[[package]]
name = "typing-inspection"
-version = "0.4.1"
+version = "0.4.4"
description = "Runtime typing introspection tools"
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51"},
- {file = "typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28"},
+ {file = "typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147"},
+ {file = "typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47"},
]
[package.dependencies]
-typing-extensions = ">=4.12.0"
+typing-extensions = ">=4.15.0"
+
+[[package]]
+name = "tzdata"
+version = "2026.3"
+description = "Provider of IANA time zone data"
+optional = false
+python-versions = ">=2"
+groups = ["main"]
+markers = "sys_platform == \"win32\""
+files = [
+ {file = "tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931"},
+ {file = "tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415"},
+]
[[package]]
name = "urllib3"
-version = "2.5.0"
+version = "2.7.0"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"},
- {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"},
+ {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"},
+ {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"},
]
[package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""]
h2 = ["h2 (>=4,<5)"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
-zstd = ["zstandard (>=0.18.0)"]
+zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""]
[[package]]
name = "verspec"
@@ -2041,6 +2442,7 @@ version = "0.1.0"
description = "Flexible version handling"
optional = false
python-versions = "*"
+groups = ["main"]
files = [
{file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"},
{file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"},
@@ -2055,6 +2457,7 @@ version = "6.0.0"
description = "Filesystem events monitoring"
optional = false
python-versions = ">=3.9"
+groups = ["main"]
files = [
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"},
{file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"},
@@ -2093,140 +2496,147 @@ watchmedo = ["PyYAML (>=3.10)"]
[[package]]
name = "wcmatch"
-version = "10.1"
+version = "11.0.1"
description = "Wildcard/glob file name matcher."
optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "wcmatch-10.1-py3-none-any.whl", hash = "sha256:5848ace7dbb0476e5e55ab63c6bbd529745089343427caa5537f230cc01beb8a"},
- {file = "wcmatch-10.1.tar.gz", hash = "sha256:f11f94208c8c8484a16f4f48638a85d771d9513f4ab3f37595978801cb9465af"},
+ {file = "wcmatch-11.0.1-py3-none-any.whl", hash = "sha256:fd149ecddb9f0a88ea780017d6dde17c994e494e7f7303d4e3c9d6251f978f4b"},
+ {file = "wcmatch-11.0.1.tar.gz", hash = "sha256:1ea2b4fa678b8ca268253798d5963935df39132d47c3e241c0a0732224005e7d"},
]
[package.dependencies]
-bracex = ">=2.1.1"
+bracex = ">=3.0"
[[package]]
name = "webencodings"
-version = "0.5.1"
+version = "0.6.1"
description = "Character encoding aliases for legacy web content"
optional = false
-python-versions = "*"
+python-versions = ">=3.10"
+groups = ["main"]
files = [
- {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
- {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+ {file = "webencodings-0.6.1-py3-none-any.whl", hash = "sha256:7fab6269c8bf237c657876b52058ccb182e861518d1c695c1a9aaa8c1c105d5b"},
+ {file = "webencodings-0.6.1.tar.gz", hash = "sha256:565f9ad031c702dae404e27a099e3e09186a3ab1b9520f06d215502b651fd910"},
]
+[package.extras]
+doc = ["furo", "sphinx"]
+test = ["pytest", "ruff"]
+
[[package]]
name = "yarl"
-version = "1.20.1"
+version = "1.24.5"
description = "Yet another URL library"
optional = false
-python-versions = ">=3.9"
-files = [
- {file = "yarl-1.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6032e6da6abd41e4acda34d75a816012717000fa6839f37124a47fcefc49bec4"},
- {file = "yarl-1.20.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c7b34d804b8cf9b214f05015c4fee2ebe7ed05cf581e7192c06555c71f4446a"},
- {file = "yarl-1.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c869f2651cc77465f6cd01d938d91a11d9ea5d798738c1dc077f3de0b5e5fed"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62915e6688eb4d180d93840cda4110995ad50c459bf931b8b3775b37c264af1e"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:41ebd28167bc6af8abb97fec1a399f412eec5fd61a3ccbe2305a18b84fb4ca73"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21242b4288a6d56f04ea193adde174b7e347ac46ce6bc84989ff7c1b1ecea84e"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bea21cdae6c7eb02ba02a475f37463abfe0a01f5d7200121b03e605d6a0439f8"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f8a891e4a22a89f5dde7862994485e19db246b70bb288d3ce73a34422e55b23"},
- {file = "yarl-1.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd803820d44c8853a109a34e3660e5a61beae12970da479cf44aa2954019bf70"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b982fa7f74c80d5c0c7b5b38f908971e513380a10fecea528091405f519b9ebb"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:33f29ecfe0330c570d997bcf1afd304377f2e48f61447f37e846a6058a4d33b2"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:835ab2cfc74d5eb4a6a528c57f05688099da41cf4957cf08cad38647e4a83b30"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:46b5e0ccf1943a9a6e766b2c2b8c732c55b34e28be57d8daa2b3c1d1d4009309"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:df47c55f7d74127d1b11251fe6397d84afdde0d53b90bedb46a23c0e534f9d24"},
- {file = "yarl-1.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76d12524d05841276b0e22573f28d5fbcb67589836772ae9244d90dd7d66aa13"},
- {file = "yarl-1.20.1-cp310-cp310-win32.whl", hash = "sha256:6c4fbf6b02d70e512d7ade4b1f998f237137f1417ab07ec06358ea04f69134f8"},
- {file = "yarl-1.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:aef6c4d69554d44b7f9d923245f8ad9a707d971e6209d51279196d8e8fe1ae16"},
- {file = "yarl-1.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47ee6188fea634bdfaeb2cc420f5b3b17332e6225ce88149a17c413c77ff269e"},
- {file = "yarl-1.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0f6500f69e8402d513e5eedb77a4e1818691e8f45e6b687147963514d84b44b"},
- {file = "yarl-1.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a8900a42fcdaad568de58887c7b2f602962356908eedb7628eaf6021a6e435b"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bad6d131fda8ef508b36be3ece16d0902e80b88ea7200f030a0f6c11d9e508d4"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:df018d92fe22aaebb679a7f89fe0c0f368ec497e3dda6cb81a567610f04501f1"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f969afbb0a9b63c18d0feecf0db09d164b7a44a053e78a7d05f5df163e43833"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:812303eb4aa98e302886ccda58d6b099e3576b1b9276161469c25803a8db277d"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c4a7d166635147924aa0bf9bfe8d8abad6fffa6102de9c99ea04a1376f91e8"},
- {file = "yarl-1.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12e768f966538e81e6e7550f9086a6236b16e26cd964cf4df35349970f3551cf"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe41919b9d899661c5c28a8b4b0acf704510b88f27f0934ac7a7bebdd8938d5e"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8601bc010d1d7780592f3fc1bdc6c72e2b6466ea34569778422943e1a1f3c389"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:daadbdc1f2a9033a2399c42646fbd46da7992e868a5fe9513860122d7fe7a73f"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:03aa1e041727cb438ca762628109ef1333498b122e4c76dd858d186a37cec845"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:642980ef5e0fa1de5fa96d905c7e00cb2c47cb468bfcac5a18c58e27dbf8d8d1"},
- {file = "yarl-1.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:86971e2795584fe8c002356d3b97ef6c61862720eeff03db2a7c86b678d85b3e"},
- {file = "yarl-1.20.1-cp311-cp311-win32.whl", hash = "sha256:597f40615b8d25812f14562699e287f0dcc035d25eb74da72cae043bb884d773"},
- {file = "yarl-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:26ef53a9e726e61e9cd1cda6b478f17e350fb5800b4bd1cd9fe81c4d91cfeb2e"},
- {file = "yarl-1.20.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9"},
- {file = "yarl-1.20.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a"},
- {file = "yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd"},
- {file = "yarl-1.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a"},
- {file = "yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004"},
- {file = "yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5"},
- {file = "yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698"},
- {file = "yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a"},
- {file = "yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3"},
- {file = "yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5"},
- {file = "yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b"},
- {file = "yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1"},
- {file = "yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7"},
- {file = "yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c"},
- {file = "yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d"},
- {file = "yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf"},
- {file = "yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3"},
- {file = "yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458"},
- {file = "yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e"},
- {file = "yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d"},
- {file = "yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f"},
- {file = "yarl-1.20.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e42ba79e2efb6845ebab49c7bf20306c4edf74a0b20fc6b2ccdd1a219d12fad3"},
- {file = "yarl-1.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:41493b9b7c312ac448b7f0a42a089dffe1d6e6e981a2d76205801a023ed26a2b"},
- {file = "yarl-1.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5a5928ff5eb13408c62a968ac90d43f8322fd56d87008b8f9dabf3c0f6ee983"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30c41ad5d717b3961b2dd785593b67d386b73feca30522048d37298fee981805"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:59febc3969b0781682b469d4aca1a5cab7505a4f7b85acf6db01fa500fa3f6ba"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2b6fb3622b7e5bf7a6e5b679a69326b4279e805ed1699d749739a61d242449e"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:749d73611db8d26a6281086f859ea7ec08f9c4c56cec864e52028c8b328db723"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9427925776096e664c39e131447aa20ec738bdd77c049c48ea5200db2237e000"},
- {file = "yarl-1.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff70f32aa316393eaf8222d518ce9118148eddb8a53073c2403863b41033eed5"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c7ddf7a09f38667aea38801da8b8d6bfe81df767d9dfc8c88eb45827b195cd1c"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:57edc88517d7fc62b174fcfb2e939fbc486a68315d648d7e74d07fac42cec240"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:dab096ce479d5894d62c26ff4f699ec9072269d514b4edd630a393223f45a0ee"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14a85f3bd2d7bb255be7183e5d7d6e70add151a98edf56a770d6140f5d5f4010"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c89b5c792685dd9cd3fa9761c1b9f46fc240c2a3265483acc1565769996a3f8"},
- {file = "yarl-1.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:69e9b141de5511021942a6866990aea6d111c9042235de90e08f94cf972ca03d"},
- {file = "yarl-1.20.1-cp39-cp39-win32.whl", hash = "sha256:b5f307337819cdfdbb40193cad84978a029f847b0a357fbe49f712063cfc4f06"},
- {file = "yarl-1.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:eae7bfe2069f9c1c5b05fc7fe5d612e5bbc089a39309904ee8b829e322dcad00"},
- {file = "yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77"},
- {file = "yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac"},
+python-versions = ">=3.10"
+groups = ["dev"]
+files = [
+ {file = "yarl-1.24.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88f50c94e21a0a7f14042c015b0eba1881af78562e7bf007e0033e624da59750"},
+ {file = "yarl-1.24.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6efbccc3d7f75d5b03105172a8dc86d82ba4da86817952529dd93185f4a88be2"},
+ {file = "yarl-1.24.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0ebfaffe1a16cb72141c8e09f18cc76856dbe58639f393a4f2b26e474b96b871"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac73abdc7ab75610f95a8fd994c6457e87752b02a63987e188f937a1fc180f0"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4d97a951a81039050e45f04e96689b58b8243fa5e62aa14fe67cb6075300885e"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fe7b7bb170daccbba19ad33012d2b15f1e7942296fd4d45fc1b79013da8cc0f2"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:89a1bbb58e0e3f7a283653d854b1e95d65e5cfd4af224dac5f02629ec1a3e621"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7fa5e51397466ea7e98de493fa2ff1b8193cfef8a7b0f9b4842f92d342df0dba"},
+ {file = "yarl-1.24.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4103b77b8a8225e413107d2349b65eb3c1c52627b5cc5c3c4c1c6a798b218950"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9f3e9c8a9ecffa57bef8fb4fa19e5fa4d2d8307cf6bac5b1fca5e5860f4ba00"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0ebc836c47a6477e182169c6a476fc691d12b518894bf7dd2572f0d59f1c7ed"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:96d30286dd02679e32a39aa8f0b7498fc847fcda46cfc09df5513e82ce252440"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:fd8c81f346b58f45818d09ea11db69a8d5fd34a224b79871f6d44f12cd7977b1"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:5c55256dee8f4b27bfbf636c8363383c7c8db7890c7cba5217d7bd5f5f21dab6"},
+ {file = "yarl-1.24.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9f4d8cf085a4c6a40fb97ea0f46938a8df43c85d31f9d45e2a8867ea9293790d"},
+ {file = "yarl-1.24.5-cp310-cp310-win_amd64.whl", hash = "sha256:240cbec09667c1fed4c6cd0060b9ec57332427d7441289a2ed8875dc9fb2b224"},
+ {file = "yarl-1.24.5-cp310-cp310-win_arm64.whl", hash = "sha256:8a6987eaad834cb32dd57d9d582225f0054a5d1af706ccfbbdba735af4927e13"},
+ {file = "yarl-1.24.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2c1fe720934a16ea8e7146175cba2126f87f54912c8c5435e7f7c7a51ef808d3"},
+ {file = "yarl-1.24.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c687ed078e145f5fd53a14854beff320e1d2ab76df03e2009c98f39a0f68f39a"},
+ {file = "yarl-1.24.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:709f1efed56c4a145793c046cd4939f9959bcd818979a787b77d8e09c57a0840"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874019bd513008b009f58657134e5d0c5e030b3559bd0553976837adf52fe966"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a4582acf7ef76482f6f511ebaf1946dae7f2e85ec4728b81a678c01df63bd723"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2cabe6546e41dabe439999a23fcb5246e0c3b595b4315b96ef755252be90caeb"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:17f57620f5475b3c69109376cc87e42a7af5db13c9398e4292772a706ff10780"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:570fec8fbd22b032733625f03f10b7ff023bc399213db15e72a7acaef28c2f4e"},
+ {file = "yarl-1.24.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5fede79c6f73ff2c3ef822864cb1ada23196e62756df53bc6231d351a49516a2"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8ccf9aca873b767977c73df497a85dbedee4ee086ae9ae49dc461333b9b79f58"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ad5d8201d310b031e6cd839d9bac2d4e5a01533ce5d3d5b50b7de1ef3af1de61"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:841f0852f48fefea3b12c9dfec00704dfa3aef5215d0e3ce564bb3d7cd8d57c6"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:9baafc71b04f8f4bb0703b21d6fc9f0c30b346c636a532ff16ec8491a5ea4b1f"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d897129df1a22b12aeed2c2c98df0785a2e8e6e0bde87b389491d0025c187077"},
+ {file = "yarl-1.24.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd625535328fd9882374356269227670189adfcc6a2d90284f323c05862eecbd"},
+ {file = "yarl-1.24.5-cp311-cp311-win_amd64.whl", hash = "sha256:f4239bbec5a3577ddb49e4b50aeb32d8e5792098262ae2f63723f916a29b1a25"},
+ {file = "yarl-1.24.5-cp311-cp311-win_arm64.whl", hash = "sha256:3ac6aff147deb9c09461b2d4bbdf6256831198f5d8a23f5d37138213090b6d8a"},
+ {file = "yarl-1.24.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d693396e5aea78db03decd60aec9ece16c9b40ba00a587f089615ff4e718a81d"},
+ {file = "yarl-1.24.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3363fcc96e665878946ad7a106b9a13eac0541766a690ef287c0232ac768b6ec"},
+ {file = "yarl-1.24.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9d399bdcfb4a0f659b9b3788bbc89babe63d9a6a65aacdf4d4e7065ff2e6316c"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90333fd89b43c0d08ac85f3f1447593fc2c66de18c3d6378d7125ea118dc7a54"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:665b0a2c463cc9423dd647e0bfd9f4ccc9b50f768c55304d5e9f80b177c1de12"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e006d3a974c4ee19512e5f058abedb6eef36a5e553c14812bdeba1758d812e6d"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e7d42c531243450ef0d4d9c172e7ed6ef052640f195629065041b5add4e058d1"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f08c7513ecef5aad65687bfdf6bc601ae9fccd04a42904501f8f7141abad9eb9"},
+ {file = "yarl-1.24.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c95b17fe34ed802f17e205112e6e10db92275c34fee290aa9bdc55a9c724027"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56b149b22de33b23b0c6077ab9518c6dcb538ad462e1830e68d06591ccf6e38b"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a8fe66b8f300da93798025a785a5b90b42f3810dc2b72283ff84a41aaaebc293"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:377fe3732edbaf78ee74efdf2c9f49f6e99f20e7f9d2649fda3eb4badd77d76e"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e8ffa78582120024f476a611d7befc123cee59e47e8309d470cf667d806e613b"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:daba5e594f06114e37db186efd2dd916609071e59daca901a0a2e71f02b142ce"},
+ {file = "yarl-1.24.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:65be18ec59496c13908f02a2472751d9ef840b4f3fb5726f129306bf6a2a7bba"},
+ {file = "yarl-1.24.5-cp312-cp312-win_amd64.whl", hash = "sha256:a929d878fec099030c292803b31e5d5540a7b6a31e6a3cc76cb4685fc2a2f51b"},
+ {file = "yarl-1.24.5-cp312-cp312-win_arm64.whl", hash = "sha256:7ce27823052e2013b597e0c738b13e7e36b8ccb9400df8959417b052ab0fd92c"},
+ {file = "yarl-1.24.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:79af890482fc94648e8cde4c68620378f7fef60932710fa17a66abc039244da2"},
+ {file = "yarl-1.24.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46c2f213e23a04b93a392942d782eb9e413e6ef6bf7c8c53884e599a5c174dcb"},
+ {file = "yarl-1.24.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92ab3e11448f2ff7bf53c5a26eff0edc086898ec8b21fb154b85839ce1d88075"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ebb0ec7f17803063d5aeb982f3b1bd2b2f4e4fae6751226cbd6ba1fcfe9e63ff"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:82632daed195dcc8ea664e8556dc9bdbd671960fb3776bd92806ce05792c2448"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:53e549287ef628fecba270045c9701b0c564563a9b0577d24a4ec75b8ab8040f"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fcd3b77e2f17bbe4ca56ec7bcb07992647d19d0b9c05d84886dcd6f9eb810afd"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d46b86567dd4e248c6c159fcbcdcce01e0a5c8a7cd2334a0fff759d0fa075b16"},
+ {file = "yarl-1.24.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f72c74aa99359e27a2ee8d6613fefa28b5f76a983c083074dfc2aaa4ab46213"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f45789ce415a7ec0820dc4f82925f9b5f7732070be1dec1f5f23ec381435a24"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6e73e7fe93f17a7b191f52ec9da9dd8c06a8fe735a1ecbd13b97d1c723bff385"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4a36f9becdd4c5c52a20c3e9484128b070b1dcfc8944c006f3a528295a359a9c"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:7bcbe0fcf850eae67b6b01749815a4f7161c560a844c769ad7b48fcd99f791c4"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:24e861e9630e0daddcb9191fb187f60f034e17a4426f8101279f0c475cd74144"},
+ {file = "yarl-1.24.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9335a099ad87287c37fe5d1a982ff392fa5efe5d14b40a730b1ec1d6a41382b4"},
+ {file = "yarl-1.24.5-cp313-cp313-win_amd64.whl", hash = "sha256:2dbe06fc16bc91502bca713704022182e5729861ae00277c3a23354b40929740"},
+ {file = "yarl-1.24.5-cp313-cp313-win_arm64.whl", hash = "sha256:6b8536851f9f65e7f00c7a1d49ba7f2be0ffe2c11555367fc9f50d9f842410a1"},
+ {file = "yarl-1.24.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2729fcfc4f6a596fb0c50f32090400aa9367774ac296a00387e65098c0befa76"},
+ {file = "yarl-1.24.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ff330d3c30db4eb6b01d79e29d2d0b407a7ecad39cfd9ec993ece57396a2ec0d"},
+ {file = "yarl-1.24.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e42d75862735da90e7fc5a7b23db0c976f737113a54b3c9777a9b665e9cbff75"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3732e66413163e72508da9eff9ce9d2846fde51fae45d3605393d3e6cd303e9"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5b8ee53be440a0cffc991a27be3057e0530122548dbe7c0892df08822fce5ede"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:af3aefa655adb5869491fa907e652290386800ae99cc50095cba71e2c6aefdca"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2120b96872df4a117cde97d270bac96aea7cc52205d305cf4611df694a487027"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:66410eb6345d467151934b49bfa70fb32f5b35a6140baa40ad97d6436abea2e9"},
+ {file = "yarl-1.24.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4af7b7e1be0a69bee8210735fe6dcfc38879adfac6d62e789d53ba432d1ffa41"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa139875ff98ab97da323cfadfaff08900d1ad42f1b5087b0b812a55c5a06373"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0055afc45e864b92729ac7600e2d102c17bef060647e74bca75fa84d66b9ff36"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f0e466ed7511fe9d459a819edbc6c2585c0b6eabde9fa8a8947552468a7a6ef0"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f141474e85b7e54998ec5180530a7cda99ab29e282fa50e0756d89981a9b43c5"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:e2935f8c39e3b03e83519292d78f075189978f3f4adc15a78144c7c8e2a1cba5"},
+ {file = "yarl-1.24.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9d1216a7f6f77836617dba35687c5b78a4170afc3c3f18fc788f785ba26565c4"},
+ {file = "yarl-1.24.5-cp314-cp314-win_amd64.whl", hash = "sha256:5ba4f78df2bcc19f764a4b26a8a4f5049c110090ad5825993aacb052bf8003ad"},
+ {file = "yarl-1.24.5-cp314-cp314-win_arm64.whl", hash = "sha256:9e4e16c73d717c5cf27626c524d0a2e261ad20e46932b2670f64ad5dde23e26f"},
+ {file = "yarl-1.24.5-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e1ae548a9d901adca07899a4147a7c826bbcc06239d3ce9a59f57886a28a4c88"},
+ {file = "yarl-1.24.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff405d91509d88e8d44129cd87b18d70acd1f0c1aeabd7bc3c46792b1fe2acba"},
+ {file = "yarl-1.24.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:47e98aab9d8d82ff682e7b0b5dded33bf138a32b817fcf7fa3b27b2d7c412928"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0a658a6d3fafee5c6f63c58f3e785c8c43c93fbc02bf9f2b6663f8185e0971f"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4377407001ca3c057773f44d8ddd6358fa5f691407c1ba92210bd3cf8d9e4c95"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7c0494a31a1ac5461a226e7947a9c9b78c44e1dc7185164fa7e9651557a5d9bc"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a7cff474ab7cd149765bb784cf6d78b32e18e20473fb7bda860bce98ab58e9da"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cbb833ccacdb5519eff9b8b71ee618cc2801c878e77e288775d77c3a2ced858a"},
+ {file = "yarl-1.24.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:82f75e05912e84b7a0fe57075d9c59de3cb352b928330f2eb69b2e1f54c3e1f0"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16a2f5010280020e90f5330257e6944bc33e73593b136cc5a241e6c1dc292498"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ffcd54362564dc1a30fb74d8b8a6e5a6b11ebd5e27266adc3b7427a21a6c9104"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0465ec8cedc2349b97a6b595ace64084a50c6e839eca40aa0626f38b8350e331"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4db9aecb141cb7a5447171b57aa1ed3a8fee06af40b992ffc31206c0b0121550"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f540c013589084679a6c7fac07096b10159737918174f5dfc5e11bf5bca4dfe6"},
+ {file = "yarl-1.24.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a61834fb15d81322d872eaafd333838ae7c9cea84067f232656f75965933d047"},
+ {file = "yarl-1.24.5-cp314-cp314t-win_amd64.whl", hash = "sha256:5c88e5815a49d289e599f3513aa7fde0bc2092ff188f99c940f007f90f53d104"},
+ {file = "yarl-1.24.5-cp314-cp314t-win_arm64.whl", hash = "sha256:cf139c02f5f23ef6532040a30ff662c00a318c952334f211046b8e60b7f17688"},
+ {file = "yarl-1.24.5-py3-none-any.whl", hash = "sha256:a33700d13d9b7d84fd10947b09ff69fb9a792e519c8cb9764a3ca70baa6c23a7"},
+ {file = "yarl-1.24.5.tar.gz", hash = "sha256:e81b83143bee16329c23db3c1b2d82b29892fcbcb849186d2f6e98a5abe9a57f"},
]
[package.dependencies]
@@ -2234,26 +2644,7 @@ idna = ">=2.0"
multidict = ">=4.0"
propcache = ">=0.2.1"
-[[package]]
-name = "zipp"
-version = "3.23.0"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-optional = false
-python-versions = ">=3.9"
-files = [
- {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"},
- {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"},
-]
-
-[package.extras]
-check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
-cover = ["pytest-cov"]
-doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-enabler = ["pytest-enabler (>=2.2)"]
-test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
-type = ["pytest-mypy"]
-
[metadata]
-lock-version = "2.0"
+lock-version = "2.1"
python-versions = "^3.11"
content-hash = "b29564f7e517705f8e3acab382a355450ede6affa5d79e085c0200fe8284f134"