identity-plan-kit 0.2.7__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/PKG-INFO +1 -1
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/pyproject.toml +2 -2
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/__init__.py +12 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/exceptions.py +21 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/__init__.py +8 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/exceptions.py +11 -1
- identity_plan_kit-0.3.0/src/identity_plan_kit/shared/README.md +733 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/error_formatter.py +10 -8
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/exception_handlers.py +93 -2
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/exceptions.py +13 -5
- identity_plan_kit-0.3.0/tests/shared/test_exception_handlers.py +746 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/uv.lock +1 -1
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/.gitignore +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/Makefile +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/README.md +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/env.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/script.py.mako +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/versions/20250124_000000_initial_schema.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/versions/20250127_000000_add_password_hash.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic.ini +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/fastapi_integration.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/sample_alembic_env.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/webhook_integration.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/admin_usage.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/basic_usage.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/custom_error_formats.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/extending_models.html +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/extension_example.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/.env.production.example +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/Dockerfile +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/docker-compose.yml +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/nginx.conf +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/production_setup.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/prometheus.yml +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/README.md +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/config.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/locustfile.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_auth.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_database_stress.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_mixed_scenarios.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_plans_quota.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_quota_direct.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_rbac_cache.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/utils.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/auth.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/views.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dependencies.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/entities.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/requests.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/responses.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/handlers/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/handlers/oauth_routes.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/refresh_token.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/user.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/user_provider.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/token_repo.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/user_repo.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/auth_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/oauth_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/uow.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/cli.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/config.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/kit.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/migrations.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/plan_cache.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/user_plan_cache.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dependencies.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/entities.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/exceptions.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/responses.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/usage.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/handlers/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/handlers/plan_routes.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/feature.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/feature_usage.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan_limit.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan_permission.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/user_plan.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/plan_repo.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/usage_repo.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/services/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/services/plan_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/uow.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/cache/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/cache/permission_cache.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/dependencies.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/entities.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/permission.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/role.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/role_permission.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/repositories/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/repositories/rbac_repo.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/services/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/services/rbac_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/uow.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/audit.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/circuit_breaker.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/cleanup_scheduler.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/database.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/graceful_shutdown.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/health.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/http_utils.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/lockout.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/logging.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/metrics.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/models.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/rate_limiter.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/request_id.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/schemas.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/security.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/state_store.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/uow.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/uuid7.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_auth_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_circuit_breaker.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_csrf_state.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_dependencies.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_domain_entities.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_http_utils.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_lockout.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_lockout_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_oauth_service_resilience.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_security_comprehensive.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_token_security.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/conftest.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/conftest.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_limit_merge.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_plan_operations.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_token_operations.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_user_creation.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_user_deactivation.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_limit_boundaries.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_plan_cache_race.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_quota_concurrency.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_token_cleanup.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_token_repository.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_usage_periods.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_user_repository.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_domain_entities.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_period_edge_cases.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_plan_cache_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_plan_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/__init__.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_permission_cache.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_permission_cache_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_rbac_cache_stampede.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_rbac_service.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_audit_pii_masking.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_circuit_breaker_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_cleanup_scheduler_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_config_validation.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_http_utils_security.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_rate_limiter.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_rate_limiter_concurrent.py +0 -0
- {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_state_store_concurrent.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "identity-plan-kit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
4
4
|
description = "Modern FastAPI library for authentication, RBAC, subscription plans, and usage tracking"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -140,7 +140,7 @@ testpaths = ["tests"]
|
|
|
140
140
|
addopts = "-v --tb=short"
|
|
141
141
|
|
|
142
142
|
[tool.bumpversion]
|
|
143
|
-
current_version = "0.
|
|
143
|
+
current_version = "0.3.0"
|
|
144
144
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
|
145
145
|
serialize = ["{major}.{minor}.{patch}"]
|
|
146
146
|
tag = true
|
|
@@ -5,8 +5,14 @@ from identity_plan_kit.auth.domain.entities import RefreshToken, User, UserProvi
|
|
|
5
5
|
from identity_plan_kit.auth.domain.exceptions import (
|
|
6
6
|
AuthError,
|
|
7
7
|
InvalidCredentialsError,
|
|
8
|
+
OAuthError,
|
|
8
9
|
PasswordValidationError,
|
|
10
|
+
ProviderNotConfiguredError,
|
|
11
|
+
RefreshTokenExpiredError,
|
|
12
|
+
RefreshTokenInvalidError,
|
|
13
|
+
RefreshTokenMissingError,
|
|
9
14
|
TokenExpiredError,
|
|
15
|
+
TokenInvalidError,
|
|
10
16
|
UserInactiveError,
|
|
11
17
|
UserNotFoundError,
|
|
12
18
|
)
|
|
@@ -22,12 +28,18 @@ __all__ = [
|
|
|
22
28
|
# Dependencies
|
|
23
29
|
"CurrentUser",
|
|
24
30
|
"InvalidCredentialsError",
|
|
31
|
+
"OAuthError",
|
|
25
32
|
"OptionalUser",
|
|
26
33
|
"PasswordValidationError",
|
|
34
|
+
"ProviderNotConfiguredError",
|
|
27
35
|
"RefreshToken",
|
|
36
|
+
"RefreshTokenExpiredError",
|
|
37
|
+
"RefreshTokenInvalidError",
|
|
38
|
+
"RefreshTokenMissingError",
|
|
28
39
|
# Repositories (for direct use with external sessions)
|
|
29
40
|
"RefreshTokenRepository",
|
|
30
41
|
"TokenExpiredError",
|
|
42
|
+
"TokenInvalidError",
|
|
31
43
|
# Entities
|
|
32
44
|
"User",
|
|
33
45
|
"UserInactiveError",
|
{identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/exceptions.py
RENAMED
|
@@ -35,6 +35,27 @@ class TokenInvalidError(AuthError):
|
|
|
35
35
|
message = "Invalid token"
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
class RefreshTokenMissingError(AuthError):
|
|
39
|
+
"""Refresh token not provided."""
|
|
40
|
+
|
|
41
|
+
code = "REFRESH_TOKEN_MISSING"
|
|
42
|
+
message = "Refresh token not provided"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class RefreshTokenInvalidError(AuthError):
|
|
46
|
+
"""Refresh token is invalid."""
|
|
47
|
+
|
|
48
|
+
code = "REFRESH_TOKEN_INVALID"
|
|
49
|
+
message = "Invalid refresh token"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class RefreshTokenExpiredError(AuthError):
|
|
53
|
+
"""Refresh token has expired."""
|
|
54
|
+
|
|
55
|
+
code = "REFRESH_TOKEN_EXPIRED"
|
|
56
|
+
message = "Refresh token has expired"
|
|
57
|
+
|
|
58
|
+
|
|
38
59
|
class UserNotFoundError(NotFoundError):
|
|
39
60
|
"""User not found."""
|
|
40
61
|
|
|
@@ -9,6 +9,10 @@ from identity_plan_kit.plans.domain.entities import Feature, Plan, PlanLimit, Us
|
|
|
9
9
|
from identity_plan_kit.plans.domain.exceptions import (
|
|
10
10
|
FeatureNotAvailableError,
|
|
11
11
|
FeatureNotFoundError,
|
|
12
|
+
InvalidCustomLimitsError,
|
|
13
|
+
InvalidPlanDatesError,
|
|
14
|
+
PlanAssignmentError,
|
|
15
|
+
PlanAuthorizationError,
|
|
12
16
|
PlanExpiredError,
|
|
13
17
|
PlanNotFoundError,
|
|
14
18
|
QuotaExceededError,
|
|
@@ -26,7 +30,11 @@ __all__ = [
|
|
|
26
30
|
# Exceptions
|
|
27
31
|
"FeatureNotAvailableError",
|
|
28
32
|
"FeatureNotFoundError",
|
|
33
|
+
"InvalidCustomLimitsError",
|
|
34
|
+
"InvalidPlanDatesError",
|
|
29
35
|
"Plan",
|
|
36
|
+
"PlanAssignmentError",
|
|
37
|
+
"PlanAuthorizationError",
|
|
30
38
|
"PlanExpiredError",
|
|
31
39
|
"PlanLimit",
|
|
32
40
|
"PlanNotFoundError",
|
{identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/exceptions.py
RENAMED
|
@@ -21,10 +21,20 @@ class PermissionDeniedError(RBACError):
|
|
|
21
21
|
permission: str | None = None,
|
|
22
22
|
message: str | None = None,
|
|
23
23
|
) -> None:
|
|
24
|
-
self.
|
|
24
|
+
self._permission = permission
|
|
25
25
|
msg = message or (f"Permission denied: {permission}" if permission else "Permission denied")
|
|
26
26
|
super().__init__(message=msg, details={"permission": permission} if permission else None)
|
|
27
27
|
|
|
28
|
+
@property
|
|
29
|
+
def permission(self) -> str | None:
|
|
30
|
+
"""Get the permission code."""
|
|
31
|
+
return self._permission
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def permission_code(self) -> str | None:
|
|
35
|
+
"""Alias for permission to support permission_code naming convention."""
|
|
36
|
+
return self._permission
|
|
37
|
+
|
|
28
38
|
|
|
29
39
|
class RoleNotFoundError(NotFoundError):
|
|
30
40
|
"""Role not found."""
|