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"