imbi-api 2.13.0__tar.gz → 2.13.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {imbi_api-2.13.0 → imbi_api-2.13.2}/PKG-INFO +2 -2
- {imbi_api-2.13.0 → imbi_api-2.13.2}/pyproject.toml +2 -2
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_configuration.py +6 -1
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_configuration.py +81 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/uv.lock +5 -5
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.github/workflows/deploy.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.github/workflows/docs.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.github/workflows/testing.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.gitignore +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.pre-commit-config.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/.python-version +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/CLAUDE.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/LICENSE +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/README.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/coderabbit.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/compose.yaml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0001-record-architecture-decisions.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0002-authentication-and-authorization-architecture.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0003-email-sending-architecture.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0004-phase-5-authentication-enhancements.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0005-file-upload-storage-architecture.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0006-project-identity-and-multi-type.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0007-relationship-blueprints.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0008-plugin-system-architecture.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0009-database-driven-oauth-providers.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0010-identity-plugin-architecture.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0011-graph-based-project-scoring.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0012-plugin-manifest-service-template.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0013-deployment-plugin-type.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0014-generic-plugin-entity-abstraction.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0015-cyclonedx-1.7-sbom-standard.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0016-delegated-execution-for-scheduled-jobs.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/configuration.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/index.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/docs/restore-backup.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/justfile +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/mkdocs.yml +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/mypy.ini +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/app.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/authorization_codes.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/local_auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/login_providers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/membership.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/oauth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/oauth_clients.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/password.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/permissions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/seed.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/sessions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/tokens.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/auth/totp.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/backfill_embeddings.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/blueprint_attributes.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/blueprint_compliance.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/commit_sync/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/commit_sync/queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/commit_sync/service.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/domain/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/domain/models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/domain/scoring.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/client.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/dependencies.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/base.html +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/base.txt +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/password_reset.html +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/password_reset.txt +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/welcome.html +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates/welcome.txt +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/email/templates.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/_credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/_helpers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/_json_fields.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/_pagination.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/_request_urls.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/admin.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/admin_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/api_keys.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/auth_providers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/blueprints.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/client_credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/comments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/dashboard.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/document_templates.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/documents.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/environments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/events.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/graph_query.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/integrations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/link_definitions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/local_auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/maintenance.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/mcp_servers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/mfa.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/oauth_metadata.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/operations_log.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/organizations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/plugin_edges.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/plugin_entities.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_analysis.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_commit_sync.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_deployments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_incidents.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_integrations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_lifecycle.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_logs.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_pr_sync.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/project_types.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/projects.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/pull_requests.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/releases.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/roles.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/sa_api_keys.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/scoring.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/scoring_policies.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/search.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/service_accounts.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/status.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/tags.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/teams.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/uploads.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/user_activity.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/users.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/endpoints/webhooks.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/entrypoint.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/graph_sql.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/attribution.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/endpoints.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/errors.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/flows.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/host_integration.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/repository.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/resolution.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/state.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/identity/sweeper.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/lifespans.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/llm/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/llm/dependencies.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/maintenance/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/maintenance/operations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/maintenance/registry.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/maintenance/state.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/maintenance/worker.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/mcp_test.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/middleware/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/middleware/rate_limit.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/openapi.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/patch.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/assignment_writer.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/assignments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/installer.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/lifecycle.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/lifecycle_dispatch.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/reload.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/resolution.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/plugins/schemas.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/pr_sync/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/pr_sync/queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/pr_sync/service.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/prompts/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/prompts/release_notes_system.md +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/py.typed +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/relationships.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/sbom.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/scoring/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/scoring/queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/settings.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/storage/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/storage/client.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/storage/dependencies.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/storage/thumbnails.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/src/imbi_api/storage/validation.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_api_key_auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_authentication.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_authorization.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_encryption.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_login_providers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_membership.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_oauth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_oauth_server.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_permissions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_seed.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_sessions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/auth/test_totp.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/clickhouse/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/clickhouse/test_client.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/clickhouse/test_init.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/clickhouse/test_privacy.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/test_client.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/test_init.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/test_integration.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/test_models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/email/test_templates.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_admin.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_admin_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_api_keys.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_auth_providers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_blueprints.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_client_credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_comments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_dashboard.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_document_templates.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_documents.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_environments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_events.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_graph_query.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_init.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_integrations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_json_fields.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_link_definitions.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_local_auth.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_maintenance.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_mcp_servers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_mfa.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_operations_log.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_organizations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_pagination.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_plugin_label_validation.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_analysis.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_commit_sync.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_deployments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_incidents.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_integrations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_lifecycle.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_logs.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_response_surfacing.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_project_types.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_projects.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_projects_helpers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_pull_requests.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_releases.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_request_urls.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_roles.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_sa_api_keys.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_scoring.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_scoring_policies.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_search.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_service_accounts.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_service_writeback.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_status.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_tags.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_teams.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_uploads.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_user_activity.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_users.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/endpoints/test_webhooks.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/fixtures/sbom/npm-realistic.json +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/fixtures/sbom/pypi-realistic.json +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/fixtures/sbom/tiny.json +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_endpoints.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_errors.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_flows.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_host_integration.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_repository.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_resolution.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_state.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/identity/test_sweeper.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/middleware/test_rate_limit.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/storage/__init__.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/storage/test_client.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/storage/test_init.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/storage/test_thumbnails.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/storage/test_validation.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/support.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_app.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_assignment_writer.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_backfill_embeddings.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_blueprint_attributes.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_blueprint_compliance.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_blueprints.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_commit_sync_queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_commit_sync_service.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_entrypoint.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_graph_sql.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_identity_attribution.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_init.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_installer.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_lifecycle_dispatch.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_lifespans.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_maintenance_operations.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_maintenance_state.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_maintenance_worker.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_models.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_openapi.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_patch.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_plugin_schemas.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_plugins.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_plugins_assignments.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_plugins_credentials.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_pr_sync_queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_pr_sync_service.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_sbom.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_scoring_queue.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_scoring_triggers.py +0 -0
- {imbi_api-2.13.0 → imbi_api-2.13.2}/tests/test_settings.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: imbi-api
|
|
3
|
-
Version: 2.13.
|
|
3
|
+
Version: 2.13.2
|
|
4
4
|
Summary: Imbi is a DevOps Service Management Platform designed to provide an efficient way to manage a large environment that contains many services and applications.
|
|
5
5
|
Author-email: Alex Campbell <alexc@aweber.com>, Dave Shawley <daves@aweber.com>, "Gavin M. Roy" <gavinr@aweber.com>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -20,7 +20,7 @@ Requires-Dist: cyclonedx-python-lib<12,>=11.7
|
|
|
20
20
|
Requires-Dist: fastapi
|
|
21
21
|
Requires-Dist: filetype
|
|
22
22
|
Requires-Dist: httpx<1,>=0.28.1
|
|
23
|
-
Requires-Dist: imbi-common[databases,llm,sentry,server]==2.13.
|
|
23
|
+
Requires-Dist: imbi-common[databases,llm,sentry,server]==2.13.2
|
|
24
24
|
Requires-Dist: jinja2
|
|
25
25
|
Requires-Dist: jsonpatch>=1.33
|
|
26
26
|
Requires-Dist: mcp>=1.26.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "imbi-api"
|
|
3
|
-
version = "2.13.
|
|
3
|
+
version = "2.13.2"
|
|
4
4
|
description = "Imbi is a DevOps Service Management Platform designed to provide an efficient way to manage a large environment that contains many services and applications."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.14"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"fastapi",
|
|
29
29
|
"filetype",
|
|
30
30
|
"httpx>=0.28.1,<1",
|
|
31
|
-
"imbi-common[databases,llm,sentry,server]==2.13.
|
|
31
|
+
"imbi-common[databases,llm,sentry,server]==2.13.2",
|
|
32
32
|
"jinja2",
|
|
33
33
|
"jsonpatch>=1.33",
|
|
34
34
|
"mcp>=1.26.0",
|
|
@@ -19,7 +19,10 @@ from imbi_common.plugins.base import (
|
|
|
19
19
|
|
|
20
20
|
from imbi_api.auth import permissions
|
|
21
21
|
from imbi_api.domain import models
|
|
22
|
-
from imbi_api.endpoints._helpers import
|
|
22
|
+
from imbi_api.endpoints._helpers import (
|
|
23
|
+
lookup_project_slugs,
|
|
24
|
+
lookup_project_type_slugs,
|
|
25
|
+
)
|
|
23
26
|
from imbi_api.identity.host_integration import call_with_identity_retry
|
|
24
27
|
from imbi_api.plugins import call_with_timeout
|
|
25
28
|
from imbi_api.plugins.resolution import ResolvedCapability, resolve_capability
|
|
@@ -97,12 +100,14 @@ async def _resolve_and_prepare(
|
|
|
97
100
|
db, project_id, 'configuration', source
|
|
98
101
|
)
|
|
99
102
|
project_slug, team_slug = await lookup_project_slugs(db, project_id)
|
|
103
|
+
project_type_slugs = await lookup_project_type_slugs(db, project_id)
|
|
100
104
|
ctx = PluginContext(
|
|
101
105
|
project_id=project_id,
|
|
102
106
|
project_slug=project_slug,
|
|
103
107
|
org_slug=org_slug,
|
|
104
108
|
team_slug=team_slug,
|
|
105
109
|
environment=environment,
|
|
110
|
+
project_type_slugs=project_type_slugs,
|
|
106
111
|
assignment_options=resolved.capability_options,
|
|
107
112
|
integration_options=resolved.integration_options,
|
|
108
113
|
capability_options=resolved.capability_options,
|
|
@@ -28,6 +28,7 @@ from imbi_common.plugins.base import (
|
|
|
28
28
|
ConfigKeyWithValue,
|
|
29
29
|
ConfigurationCapability,
|
|
30
30
|
Plugin,
|
|
31
|
+
PluginContext,
|
|
31
32
|
PluginManifest,
|
|
32
33
|
)
|
|
33
34
|
from imbi_common.plugins.registry import RegistryEntry
|
|
@@ -385,6 +386,86 @@ class ProjectConfigurationEndpointTestCase(unittest.TestCase):
|
|
|
385
386
|
# And it must have populated the scoped key.
|
|
386
387
|
self.assertIsNotNone(scoped_cached)
|
|
387
388
|
|
|
389
|
+
def test_context_includes_project_type_slugs(self) -> None:
|
|
390
|
+
# The plugin context must carry the project's type slugs so
|
|
391
|
+
# option templates like ``${project_type_slug}`` expand — an
|
|
392
|
+
# empty list expands to '' and produces invalid paths (e.g. an
|
|
393
|
+
# SSM path_prefix of ``/pse//imbi``).
|
|
394
|
+
self._list_cache_key() # register for cleanup; ensures fresh id
|
|
395
|
+
captured: list[PluginContext] = []
|
|
396
|
+
|
|
397
|
+
class _RecordingHandler(_FakeConfigurationHandler):
|
|
398
|
+
async def list_keys(self, ctx, credentials): # type: ignore[override]
|
|
399
|
+
captured.append(ctx)
|
|
400
|
+
return await super().list_keys(ctx, credentials)
|
|
401
|
+
|
|
402
|
+
entry = RegistryEntry(
|
|
403
|
+
plugin_cls=_FakePlugin,
|
|
404
|
+
manifest=PluginManifest(
|
|
405
|
+
slug='ssm',
|
|
406
|
+
name='SSM',
|
|
407
|
+
capabilities=[
|
|
408
|
+
Capability(
|
|
409
|
+
kind='configuration',
|
|
410
|
+
label='Configuration',
|
|
411
|
+
handler=_RecordingHandler,
|
|
412
|
+
)
|
|
413
|
+
],
|
|
414
|
+
),
|
|
415
|
+
package_name='imbi-plugin-ssm',
|
|
416
|
+
package_version='1.0.0',
|
|
417
|
+
)
|
|
418
|
+
resolved = ResolvedCapability(
|
|
419
|
+
integration_id=self.plugin_id,
|
|
420
|
+
integration_slug='ssm-prod',
|
|
421
|
+
plugin_slug='ssm',
|
|
422
|
+
kind='configuration',
|
|
423
|
+
entry=entry,
|
|
424
|
+
capability_cls=_RecordingHandler,
|
|
425
|
+
integration={
|
|
426
|
+
'id': self.plugin_id,
|
|
427
|
+
'slug': 'ssm-prod',
|
|
428
|
+
'plugin': 'ssm',
|
|
429
|
+
},
|
|
430
|
+
integration_options={},
|
|
431
|
+
capability_options={},
|
|
432
|
+
encrypted_credentials={},
|
|
433
|
+
)
|
|
434
|
+
|
|
435
|
+
async def _execute(
|
|
436
|
+
query: str,
|
|
437
|
+
params: dict[str, typing.Any],
|
|
438
|
+
columns: list[str] | None = None,
|
|
439
|
+
) -> list[dict[str, typing.Any]]:
|
|
440
|
+
if 'ProjectType' in query:
|
|
441
|
+
return [{'slug': 'apis'}, {'slug': 'consumer-apis'}]
|
|
442
|
+
return [{'slug': 'my-project', 'team_slug': 'my-team'}]
|
|
443
|
+
|
|
444
|
+
self.mock_db.execute.side_effect = _execute
|
|
445
|
+
with testclient.TestClient(self.test_app) as client:
|
|
446
|
+
with (
|
|
447
|
+
mock.patch(
|
|
448
|
+
'imbi_api.endpoints.project_configuration.resolve_capability',
|
|
449
|
+
return_value=resolved,
|
|
450
|
+
),
|
|
451
|
+
mock.patch(
|
|
452
|
+
'imbi_api.endpoints.project_configuration'
|
|
453
|
+
'.decrypt_integration_credentials',
|
|
454
|
+
return_value={'token': 'x'},
|
|
455
|
+
),
|
|
456
|
+
):
|
|
457
|
+
response = client.get(
|
|
458
|
+
f'/organizations/myorg/projects/{self.project_id}'
|
|
459
|
+
'/configuration/'
|
|
460
|
+
)
|
|
461
|
+
self.assertEqual(response.status_code, 200)
|
|
462
|
+
self.assertEqual(len(captured), 1)
|
|
463
|
+
self.assertEqual(
|
|
464
|
+
captured[0].project_type_slugs, ['apis', 'consumer-apis']
|
|
465
|
+
)
|
|
466
|
+
self.assertEqual(captured[0].project_slug, 'my-project')
|
|
467
|
+
self.assertEqual(captured[0].team_slug, 'my-team')
|
|
468
|
+
|
|
388
469
|
# ----- value fetch ------------------------------------------------
|
|
389
470
|
|
|
390
471
|
def test_fetch_values(self) -> None:
|
|
@@ -1016,7 +1016,7 @@ wheels = [
|
|
|
1016
1016
|
|
|
1017
1017
|
[[package]]
|
|
1018
1018
|
name = "imbi-api"
|
|
1019
|
-
version = "2.13.
|
|
1019
|
+
version = "2.13.2"
|
|
1020
1020
|
source = { editable = "." }
|
|
1021
1021
|
dependencies = [
|
|
1022
1022
|
{ name = "aioboto3" },
|
|
@@ -1088,7 +1088,7 @@ requires-dist = [
|
|
|
1088
1088
|
{ name = "fastapi" },
|
|
1089
1089
|
{ name = "filetype" },
|
|
1090
1090
|
{ name = "httpx", specifier = ">=0.28.1,<1" },
|
|
1091
|
-
{ name = "imbi-common", extras = ["databases", "llm", "sentry", "server"], specifier = "==2.13.
|
|
1091
|
+
{ name = "imbi-common", extras = ["databases", "llm", "sentry", "server"], specifier = "==2.13.2" },
|
|
1092
1092
|
{ name = "jinja2" },
|
|
1093
1093
|
{ name = "jsonpatch", specifier = ">=1.33" },
|
|
1094
1094
|
{ name = "mcp", specifier = ">=1.26.0" },
|
|
@@ -1136,7 +1136,7 @@ docs = [
|
|
|
1136
1136
|
|
|
1137
1137
|
[[package]]
|
|
1138
1138
|
name = "imbi-common"
|
|
1139
|
-
version = "2.13.
|
|
1139
|
+
version = "2.13.2"
|
|
1140
1140
|
source = { registry = "https://pypi.org/simple" }
|
|
1141
1141
|
dependencies = [
|
|
1142
1142
|
{ name = "cryptography" },
|
|
@@ -1152,9 +1152,9 @@ dependencies = [
|
|
|
1152
1152
|
{ name = "python-slugify" },
|
|
1153
1153
|
{ name = "typer" },
|
|
1154
1154
|
]
|
|
1155
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1155
|
+
sdist = { url = "https://files.pythonhosted.org/packages/12/a4/19da1bb91b348725d58190a932b2434938d309107c625a59f17800c80693/imbi_common-2.13.2.tar.gz", hash = "sha256:2ab5f0ebac6c5e0fa6ba343e4065d6ea2239f51206d2391f94fc677bc2065c32", size = 360809, upload-time = "2026-07-14T18:31:10.896Z" }
|
|
1156
1156
|
wheels = [
|
|
1157
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1157
|
+
{ url = "https://files.pythonhosted.org/packages/6d/8f/bbbf05cdeb103cabcb92e2285b155e28fc0b44917e4f0399a9d06c49a644/imbi_common-2.13.2-py3-none-any.whl", hash = "sha256:8ee186330192577656ede7bf497b1afbb267a0c98473fbd5379ceff100e113e7", size = 120609, upload-time = "2026-07-14T18:31:09.536Z" },
|
|
1158
1158
|
]
|
|
1159
1159
|
|
|
1160
1160
|
[package.optional-dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{imbi_api-2.13.0 → imbi_api-2.13.2}/docs/adr/0002-authentication-and-authorization-architecture.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|