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.
Files changed (178) hide show
  1. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/PKG-INFO +1 -1
  2. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/pyproject.toml +2 -2
  3. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/__init__.py +12 -0
  4. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/exceptions.py +21 -0
  5. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/__init__.py +8 -0
  6. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/exceptions.py +11 -1
  7. identity_plan_kit-0.3.0/src/identity_plan_kit/shared/README.md +733 -0
  8. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/error_formatter.py +10 -8
  9. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/exception_handlers.py +93 -2
  10. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/exceptions.py +13 -5
  11. identity_plan_kit-0.3.0/tests/shared/test_exception_handlers.py +746 -0
  12. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/uv.lock +1 -1
  13. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/.gitignore +0 -0
  14. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/Makefile +0 -0
  15. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/README.md +0 -0
  16. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/env.py +0 -0
  17. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/script.py.mako +0 -0
  18. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/versions/20250124_000000_initial_schema.py +0 -0
  19. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic/versions/20250127_000000_add_password_hash.py +0 -0
  20. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/alembic.ini +0 -0
  21. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/__init__.py +0 -0
  22. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/fastapi_integration.py +0 -0
  23. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/sample_alembic_env.py +0 -0
  24. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/integration/webhook_integration.py +0 -0
  25. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/admin_usage.py +0 -0
  26. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/basic_usage.py +0 -0
  27. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/custom_error_formats.py +0 -0
  28. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/extending_models.html +0 -0
  29. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/playing/extension_example.py +0 -0
  30. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/.env.production.example +0 -0
  31. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/Dockerfile +0 -0
  32. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/docker-compose.yml +0 -0
  33. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/nginx.conf +0 -0
  34. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/production_setup.py +0 -0
  35. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/examples/prod/prometheus.yml +0 -0
  36. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/README.md +0 -0
  37. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/__init__.py +0 -0
  38. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/config.py +0 -0
  39. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/locustfile.py +0 -0
  40. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_auth.py +0 -0
  41. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_database_stress.py +0 -0
  42. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_mixed_scenarios.py +0 -0
  43. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_plans_quota.py +0 -0
  44. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_quota_direct.py +0 -0
  45. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/test_rbac_cache.py +0 -0
  46. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/loadtests/utils.py +0 -0
  47. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/__init__.py +0 -0
  48. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/__init__.py +0 -0
  49. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/auth.py +0 -0
  50. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/admin/views.py +0 -0
  51. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dependencies.py +0 -0
  52. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/__init__.py +0 -0
  53. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/domain/entities.py +0 -0
  54. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/__init__.py +0 -0
  55. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/requests.py +0 -0
  56. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/dto/responses.py +0 -0
  57. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/handlers/__init__.py +0 -0
  58. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/handlers/oauth_routes.py +0 -0
  59. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/__init__.py +0 -0
  60. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/refresh_token.py +0 -0
  61. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/user.py +0 -0
  62. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/models/user_provider.py +0 -0
  63. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/__init__.py +0 -0
  64. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/token_repo.py +0 -0
  65. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/repositories/user_repo.py +0 -0
  66. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/__init__.py +0 -0
  67. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/auth_service.py +0 -0
  68. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/services/oauth_service.py +0 -0
  69. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/auth/uow.py +0 -0
  70. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/cli.py +0 -0
  71. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/config.py +0 -0
  72. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/kit.py +0 -0
  73. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/migrations.py +0 -0
  74. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/__init__.py +0 -0
  75. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/plan_cache.py +0 -0
  76. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/cache/user_plan_cache.py +0 -0
  77. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dependencies.py +0 -0
  78. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/__init__.py +0 -0
  79. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/entities.py +0 -0
  80. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/domain/exceptions.py +0 -0
  81. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/__init__.py +0 -0
  82. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/responses.py +0 -0
  83. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/dto/usage.py +0 -0
  84. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/handlers/__init__.py +0 -0
  85. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/handlers/plan_routes.py +0 -0
  86. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/__init__.py +0 -0
  87. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/feature.py +0 -0
  88. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/feature_usage.py +0 -0
  89. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan.py +0 -0
  90. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan_limit.py +0 -0
  91. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/plan_permission.py +0 -0
  92. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/models/user_plan.py +0 -0
  93. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/__init__.py +0 -0
  94. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/plan_repo.py +0 -0
  95. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/repositories/usage_repo.py +0 -0
  96. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/services/__init__.py +0 -0
  97. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/services/plan_service.py +0 -0
  98. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/plans/uow.py +0 -0
  99. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/__init__.py +0 -0
  100. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/cache/__init__.py +0 -0
  101. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/cache/permission_cache.py +0 -0
  102. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/dependencies.py +0 -0
  103. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/__init__.py +0 -0
  104. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/domain/entities.py +0 -0
  105. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/__init__.py +0 -0
  106. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/permission.py +0 -0
  107. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/role.py +0 -0
  108. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/models/role_permission.py +0 -0
  109. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/repositories/__init__.py +0 -0
  110. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/repositories/rbac_repo.py +0 -0
  111. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/services/__init__.py +0 -0
  112. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/services/rbac_service.py +0 -0
  113. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/rbac/uow.py +0 -0
  114. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/__init__.py +0 -0
  115. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/audit.py +0 -0
  116. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/circuit_breaker.py +0 -0
  117. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/cleanup_scheduler.py +0 -0
  118. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/database.py +0 -0
  119. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/graceful_shutdown.py +0 -0
  120. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/health.py +0 -0
  121. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/http_utils.py +0 -0
  122. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/lockout.py +0 -0
  123. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/logging.py +0 -0
  124. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/metrics.py +0 -0
  125. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/models.py +0 -0
  126. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/rate_limiter.py +0 -0
  127. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/request_id.py +0 -0
  128. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/schemas.py +0 -0
  129. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/security.py +0 -0
  130. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/state_store.py +0 -0
  131. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/uow.py +0 -0
  132. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/src/identity_plan_kit/shared/uuid7.py +0 -0
  133. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/__init__.py +0 -0
  134. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/__init__.py +0 -0
  135. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_auth_service.py +0 -0
  136. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_circuit_breaker.py +0 -0
  137. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_csrf_state.py +0 -0
  138. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_dependencies.py +0 -0
  139. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_domain_entities.py +0 -0
  140. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_http_utils.py +0 -0
  141. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_lockout.py +0 -0
  142. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_lockout_concurrent.py +0 -0
  143. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_oauth_service_resilience.py +0 -0
  144. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_security_comprehensive.py +0 -0
  145. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/auth/test_token_security.py +0 -0
  146. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/conftest.py +0 -0
  147. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/__init__.py +0 -0
  148. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/conftest.py +0 -0
  149. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_limit_merge.py +0 -0
  150. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_plan_operations.py +0 -0
  151. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_token_operations.py +0 -0
  152. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_user_creation.py +0 -0
  153. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_concurrent_user_deactivation.py +0 -0
  154. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_limit_boundaries.py +0 -0
  155. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_plan_cache_race.py +0 -0
  156. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_quota_concurrency.py +0 -0
  157. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_token_cleanup.py +0 -0
  158. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_token_repository.py +0 -0
  159. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_usage_periods.py +0 -0
  160. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/integration/test_user_repository.py +0 -0
  161. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/__init__.py +0 -0
  162. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_domain_entities.py +0 -0
  163. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_period_edge_cases.py +0 -0
  164. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_plan_cache_concurrent.py +0 -0
  165. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/plans/test_plan_service.py +0 -0
  166. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/__init__.py +0 -0
  167. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_permission_cache.py +0 -0
  168. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_permission_cache_concurrent.py +0 -0
  169. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_rbac_cache_stampede.py +0 -0
  170. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/rbac/test_rbac_service.py +0 -0
  171. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_audit_pii_masking.py +0 -0
  172. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_circuit_breaker_concurrent.py +0 -0
  173. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_cleanup_scheduler_concurrent.py +0 -0
  174. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_config_validation.py +0 -0
  175. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_http_utils_security.py +0 -0
  176. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_rate_limiter.py +0 -0
  177. {identity_plan_kit-0.2.7 → identity_plan_kit-0.3.0}/tests/shared/test_rate_limiter_concurrent.py +0 -0
  178. {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
  Metadata-Version: 2.4
2
2
  Name: identity-plan-kit
3
- Version: 0.2.7
3
+ Version: 0.3.0
4
4
  Summary: Modern FastAPI library for authentication, RBAC, subscription plans, and usage tracking
5
5
  Author-email: harut <harut.avetisyan2002@gmail.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "identity-plan-kit"
3
- version = "0.2.7"
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.2.7"
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",
@@ -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",
@@ -21,10 +21,20 @@ class PermissionDeniedError(RBACError):
21
21
  permission: str | None = None,
22
22
  message: str | None = None,
23
23
  ) -> None:
24
- self.permission = permission
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."""