Coverage report: 66%

Files Functions Classes

coverage.py v7.15.4, created at 2026-08-26 00:58 +0800

File function   statements missing excluded   coverage
src/lexigram/auth/__init__.py __getattr__   8 0 0   100%
src/lexigram/auth/__init__.py __dir__   1 1 0   0%
src/lexigram/auth/__init__.py (no function)   9 0 20   100%
src/lexigram/auth/admin/__init__.py (no function)   4 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.__init__   1 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.on_admin_boot   7 7 0   0%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.get_dashboard_widgets   1 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.get_navigation_items   1 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.get_health_definitions   1 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.get_actions   1 0 0   100%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.get_management_pages   1 1 0   0%
src/lexigram/auth/admin/contributor.py AuthAdminContributor.render_widget   7 1 0   86%
src/lexigram/auth/admin/contributor.py (no function)   30 0 2   100%
src/lexigram/auth/admin/handlers/__init__.py (no function)   5 0 0   100%
src/lexigram/auth/admin/handlers/active_sessions.py ActiveSessionsWidgetHandler.__init__   1 0 0   100%
src/lexigram/auth/admin/handlers/active_sessions.py ActiveSessionsWidgetHandler.get_data   5 0 0   100%
src/lexigram/auth/admin/handlers/active_sessions.py ActiveSessionsWidgetHandler._build_content   4 1 0   75%
src/lexigram/auth/admin/handlers/active_sessions.py (no function)   11 0 0   100%
src/lexigram/auth/admin/handlers/failed_logins.py FailedLoginsWidgetHandler.__init__   1 0 0   100%
src/lexigram/auth/admin/handlers/failed_logins.py FailedLoginsWidgetHandler.get_data   3 0 0   100%
src/lexigram/auth/admin/handlers/failed_logins.py FailedLoginsWidgetHandler._build_content   5 0 0   100%
src/lexigram/auth/admin/handlers/failed_logins.py (no function)   10 0 0   100%
src/lexigram/auth/admin/handlers/token_refresh_rate.py TokenRefreshRateWidgetHandler.__init__   1 0 0   100%
src/lexigram/auth/admin/handlers/token_refresh_rate.py TokenRefreshRateWidgetHandler.get_data   3 0 0   100%
src/lexigram/auth/admin/handlers/token_refresh_rate.py TokenRefreshRateWidgetHandler._build_content   4 0 0   100%
src/lexigram/auth/admin/handlers/token_refresh_rate.py (no function)   10 0 0   100%
src/lexigram/auth/admin/pages/__init__.py (no function)   6 6 0   0%
src/lexigram/auth/admin/pages/overview.py AuthOverviewPage.__init__   2 2 0   0%
src/lexigram/auth/admin/pages/overview.py AuthOverviewPage.handle   14 14 0   0%
src/lexigram/auth/admin/pages/overview.py (no function)   12 12 0   0%
src/lexigram/auth/admin/pages/sessions.py AuthSessionsPage.__init__   1 1 0   0%
src/lexigram/auth/admin/pages/sessions.py AuthSessionsPage.handle   11 11 0   0%
src/lexigram/auth/admin/pages/sessions.py (no function)   11 11 0   0%
src/lexigram/auth/admin/pages/tokens.py AuthTokensPage.__init__   1 1 0   0%
src/lexigram/auth/admin/pages/tokens.py AuthTokensPage.handle   10 10 0   0%
src/lexigram/auth/admin/pages/tokens.py (no function)   10 10 0   0%
src/lexigram/auth/admin/pages/users.py AuthUsersPage.__init__   1 1 0   0%
src/lexigram/auth/admin/pages/users.py AuthUsersPage.handle   11 11 0   0%
src/lexigram/auth/admin/pages/users.py (no function)   10 10 0   0%
src/lexigram/auth/authn/__init__.py (no function)   17 0 0   100%
src/lexigram/auth/authn/_binding.py compute_binding_hash   8 8 0   0%
src/lexigram/auth/authn/_binding.py verify_binding   7 7 0   0%
src/lexigram/auth/authn/_binding.py (no function)   11 0 0   100%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.__init__   1 0 0   100%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.current_key_id   0 0 2   100%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin._get_signing_key   0 0 2   100%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.create_access_token   12 3 0   75%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.create_refresh_token   10 3 0   70%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.create_token_pair   6 0 0   100%
src/lexigram/auth/authn/_jwt_creation.py _JWTCreationMixin.create_token   1 0 0   100%
src/lexigram/auth/authn/_jwt_creation.py (no function)   21 0 3   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.keys   0 0 2   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.current_key_id   0 0 2   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin._get_verification_key   0 0 2   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.create_token_pair   0 0 2   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin._emit_action   3 0 0   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.refresh_token   9 9 0   0%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.refresh_with_rotation   11 0 0   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.verify_token   62 11 0   82%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.logout   9 2 0   78%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.logout_all_user_tokens   1 0 0   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin._is_token_blacklisted   1 0 0   100%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.refresh_access_token   25 2 0   92%
src/lexigram/auth/authn/_jwt_lifecycle.py _JWTLifecycleMixin.get_user_from_token   1 1 0   0%
src/lexigram/auth/authn/_jwt_lifecycle.py (no function)   31 0 18   100%
src/lexigram/auth/authn/_key_utils.py normalize_jwt_keys   17 4 0   76%
src/lexigram/auth/authn/_key_utils.py (no function)   5 0 0   100%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.__init__   2 0 0   100%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.generate_verification_token   3 0 0   100%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.send_verification   13 0 0   100%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.verify   11 11 0   0%
src/lexigram/auth/authn/account_verification.py AccountVerificationService._find_user_by_token   7 7 0   0%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.resend_verification   6 0 0   100%
src/lexigram/auth/authn/account_verification.py AccountVerificationService.__repr__   1 1 0   0%
src/lexigram/auth/authn/account_verification.py (no function)   24 0 3   100%
src/lexigram/auth/authn/api_key.py APIKeyConfig.__post_init__   1 0 0   100%
src/lexigram/auth/authn/api_key.py APIKeyAuthenticator.__init__   1 0 0   100%
src/lexigram/auth/authn/api_key.py APIKeyAuthenticator._extract_key   7 0 0   100%
src/lexigram/auth/authn/api_key.py APIKeyAuthenticator._resolve_user   8 0 0   100%
src/lexigram/auth/authn/api_key.py APIKeyAuthenticator.authenticate   11 0 0   100%
src/lexigram/auth/authn/api_key.py (no function)   22 0 2   100%
src/lexigram/auth/authn/apikeys.py APIKeyManager.__init__   1 0 0   100%
src/lexigram/auth/authn/apikeys.py APIKeyManager.generate_raw_key   3 0 0   100%
src/lexigram/auth/authn/apikeys.py APIKeyManager.create_key   11 0 0   100%
src/lexigram/auth/authn/apikeys.py APIKeyManager.validate_key   11 2 0   82%
src/lexigram/auth/authn/apikeys.py APIKeyManager.revoke_key   4 0 0   100%
src/lexigram/auth/authn/apikeys.py APIKeyManager.list_keys   2 0 0   100%
src/lexigram/auth/authn/apikeys.py (no function)   21 0 0   100%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.__init__   8 0 0   100%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.attach_cache   2 2 0   0%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.attach_cache_resolver   1 0 0   100%
src/lexigram/auth/authn/blacklist.py JWTBlacklist._effective_cache   7 5 0   29%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.revoke   24 4 0   83%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.revoke_all_for_user   13 0 0   100%
src/lexigram/auth/authn/blacklist.py JWTBlacklist.is_blacklisted   13 0 0   100%
src/lexigram/auth/authn/blacklist.py (no function)   16 0 5   100%
src/lexigram/auth/authn/core.py (no function)   3 0 0   100%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService.__init__   11 1 0   91%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService.verify_token   9 7 0   22%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService.verify_id_token   18 4 0   78%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService.verify_userinfo_token   6 1 0   83%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService.verify_tokeninfo   11 11 0   0%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._get_jwks   7 7 0   0%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._select_jwk   10 4 0   60%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._request_json   8 5 0   38%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._response_json   13 5 0   62%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._claims_from_payload   7 1 0   86%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._timestamp_to_datetime   6 2 0   67%
src/lexigram/auth/authn/google_oauth.py GoogleOAuthService._looks_like_jwt   1 0 0   100%
src/lexigram/auth/authn/google_oauth.py (no function)   30 0 2   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.__init__   38 9 0   76%
src/lexigram/auth/authn/jwt.py JWTTokenManager.keys   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager._key_meta   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.current_key_id   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.set_blacklist_resolver   2 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.set_blacklist_cache   1 1 0   0%
src/lexigram/auth/authn/jwt.py JWTTokenManager.current_key_id   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.__repr__   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.set_hook_registry   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.rotate_key   3 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager._cleanup_old_keys   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.list_keys   1 1 0   0%
src/lexigram/auth/authn/jwt.py JWTTokenManager._get_signing_key   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager._get_verification_key   1 0 0   100%
src/lexigram/auth/authn/jwt.py JWTTokenManager.get_user_from_token   1 0 0   100%
src/lexigram/auth/authn/jwt.py (no function)   37 0 8   100%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore.__init__   4 0 0   100%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore.rotate   6 0 0   100%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore._cleanup_old_keys   14 2 0   86%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore.get_signing_key   4 0 0   100%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore.get_verification_key   7 1 0   86%
src/lexigram/auth/authn/key_rotation.py JWTKeyStore.list_keys   1 1 0   0%
src/lexigram/auth/authn/key_rotation.py (no function)   14 0 0   100%
src/lexigram/auth/authn/ldap.py LDAPManager.__init__   7 7 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager.__repr__   1 1 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager.authenticate_user   22 22 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager.get_user_info   11 11 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager.check_group_membership   28 28 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._get_user_dn   15 15 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._get_group_dn   17 17 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._bind_with_credentials   7 7 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._get_user_attributes   18 18 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._get_connection   9 9 0   0%
src/lexigram/auth/authn/ldap.py LDAPManager._return_connection   6 6 0   0%
src/lexigram/auth/authn/ldap.py (no function)   48 48 0   0%
src/lexigram/auth/authn/mfa.py _int_to_bytes   1 0 0   100%
src/lexigram/auth/authn/mfa.py generate_totp_secret   3 0 0   100%
src/lexigram/auth/authn/mfa.py _hotp   7 0 0   100%
src/lexigram/auth/authn/mfa.py _normalize_base32   3 0 0   100%
src/lexigram/auth/authn/mfa.py generate_totp_code   4 0 0   100%
src/lexigram/auth/authn/mfa.py verify_totp   10 2 0   80%
src/lexigram/auth/authn/mfa.py get_provisioning_uri   2 0 0   100%
src/lexigram/auth/authn/mfa.py generate_backup_codes   5 0 0   100%
src/lexigram/auth/authn/mfa.py hash_backup_codes   5 0 0   100%
src/lexigram/auth/authn/mfa.py (no function)   21 0 2   100%
src/lexigram/auth/authn/oauth2.py OAuth2IdentityProvider.__init__   9 0 0   100%
src/lexigram/auth/authn/oauth2.py OAuth2Manager.__init__   5 0 0   100%
src/lexigram/auth/authn/oauth2.py OAuth2Manager.__repr__   1 0 0   100%
src/lexigram/auth/authn/oauth2.py OAuth2Manager.get_authorization_url   20 4 0   80%
src/lexigram/auth/authn/oauth2.py OAuth2Manager.exchange_code_for_token   19 3 0   84%
src/lexigram/auth/authn/oauth2.py OAuth2Manager.get_user_info   24 7 0   71%
src/lexigram/auth/authn/oauth2.py OAuth2AuthProvider.__init__   3 0 0   100%
src/lexigram/auth/authn/oauth2.py OAuth2AuthProvider.authenticate_with_oauth2   6 1 0   83%
src/lexigram/auth/authn/oauth2.py OAuth2AuthProvider._find_or_create_oauth_user   20 1 0   95%
src/lexigram/auth/authn/oauth2.py OAuth2AuthProvider._find_by_oauth_identity   7 0 0   100%
src/lexigram/auth/authn/oauth2.py OAuth2AuthProvider._link_oauth_identity   3 1 0   67%
src/lexigram/auth/authn/oauth2.py (no function)   31 2 3   94%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.__init__   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.request   15 15 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.get   4 1 0   75%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.post   4 1 0   75%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.put   4 4 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.delete   4 4 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.patch   4 4 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectSession.head   4 4 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.__init__   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.status_code   5 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.headers   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.json   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.text   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.raise_for_status   1 0 0   100%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.close   3 3 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.__aenter__   1 1 0   0%
src/lexigram/auth/authn/oauth2_session.py LexigramConnectResponse.__aexit__   1 1 0   0%
src/lexigram/auth/authn/oauth2_session.py (no function)   24 0 2   100%
src/lexigram/auth/authn/passkeys.py _PendingStore.__init__   2 0 0   100%
src/lexigram/auth/authn/passkeys.py _PendingStore.set   4 0 0   100%
src/lexigram/auth/authn/passkeys.py _PendingStore.get   17 2 0   88%
src/lexigram/auth/authn/passkeys.py _PendingStore.delete   4 0 0   100%
src/lexigram/auth/authn/passkeys.py PasskeyService.__init__   5 0 0   100%
src/lexigram/auth/authn/passkeys.py PasskeyService._gen_challenge   1 0 0   100%
src/lexigram/auth/authn/passkeys.py PasskeyService._validate_origin   5 0 0   100%
src/lexigram/auth/authn/passkeys.py PasskeyService.start_registration   5 0 0   100%
src/lexigram/auth/authn/passkeys.py PasskeyService.finish_registration   39 12 0   69%
src/lexigram/auth/authn/passkeys.py PasskeyService.start_authentication   10 1 0   90%
src/lexigram/auth/authn/passkeys.py PasskeyService.finish_authentication   36 7 0   81%
src/lexigram/auth/authn/passkeys.py (no function)   24 0 3   100%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.__init__   3 1 0   67%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.derive   2 0 0   100%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.derive._derive_sync   1 0 0   100%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.verify   2 2 0   0%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.verify._verify_sync   5 5 0   0%
src/lexigram/auth/authn/password_hasher.py Argon2idKeyDerivation.hash   1 1 0   0%
src/lexigram/auth/authn/password_hasher.py Argon2idPasswordHasher.__init__   1 0 0   100%
src/lexigram/auth/authn/password_hasher.py Argon2idPasswordHasher.hash   1 0 0   100%
src/lexigram/auth/authn/password_hasher.py Argon2idPasswordHasher.verify   1 1 0   0%
src/lexigram/auth/authn/password_hasher.py Argon2idPasswordHasher.needs_rehash   11 4 0   64%
src/lexigram/auth/authn/password_hasher.py Argon2idPasswordHasher.rehash_if_needed   5 5 0   0%
src/lexigram/auth/authn/password_hasher.py ComposedPasswordHasher.__init__   2 0 0   100%
src/lexigram/auth/authn/password_hasher.py ComposedPasswordHasher.hash   1 0 0   100%
src/lexigram/auth/authn/password_hasher.py ComposedPasswordHasher.verify   5 2 0   60%
src/lexigram/auth/authn/password_hasher.py ComposedPasswordHasher.needs_rehash   5 1 0   80%
src/lexigram/auth/authn/password_hasher.py ComposedPasswordHasher.rehash_if_needed   5 2 0   60%
src/lexigram/auth/authn/password_hasher.py (no function)   36 3 2   92%
src/lexigram/auth/authn/password_reset.py PasswordResetService.__init__   2 2 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService.generate_reset_token   3 3 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService.request_reset   8 8 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService.confirm_reset   10 10 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService._find_user_by_token   7 7 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService.invalidate_token   5 5 0   0%
src/lexigram/auth/authn/password_reset.py PasswordResetService.__repr__   1 1 0   0%
src/lexigram/auth/authn/password_reset.py (no function)   25 0 2   100%
src/lexigram/auth/authn/relay.py RelayApiKeyVerifier.__init__   2 0 0   100%
src/lexigram/auth/authn/relay.py RelayApiKeyVerifier.authenticate   18 1 0   94%
src/lexigram/auth/authn/relay.py RelayApiKeyVerifier._extract_key   11 0 0   100%
src/lexigram/auth/authn/relay.py _as_dict   5 0 0   100%
src/lexigram/auth/authn/relay.py _normalize   4 1 0   75%
src/lexigram/auth/authn/relay.py (no function)   14 0 0   100%
src/lexigram/auth/authn/revocation.py PersistentTokenRevocationStore.__init__   2 2 0   0%
src/lexigram/auth/authn/revocation.py PersistentTokenRevocationStore._make_key   1 1 0   0%
src/lexigram/auth/authn/revocation.py PersistentTokenRevocationStore.revoke   13 13 0   0%
src/lexigram/auth/authn/revocation.py PersistentTokenRevocationStore.is_revoked   2 2 0   0%
src/lexigram/auth/authn/revocation.py (no function)   14 14 2   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapper.map_attribute   0 0 1   100%
src/lexigram/auth/authn/saml.py EmailAttributeMapper.map_attribute   2 2 0   0%
src/lexigram/auth/authn/saml.py NameAttributeMapper.map_attribute   4 4 0   0%
src/lexigram/auth/authn/saml.py FirstNameAttributeMapper.map_attribute   4 4 0   0%
src/lexigram/auth/authn/saml.py LastNameAttributeMapper.map_attribute   4 4 0   0%
src/lexigram/auth/authn/saml.py GroupsAttributeMapper.map_attribute   4 4 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.__init__   2 2 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.with_defaults   3 3 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry._register_default_mappers   1 1 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.register_mapper   2 2 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.clear_mappers   2 2 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.get_mappers   2 2 0   0%
src/lexigram/auth/authn/saml.py SAMLAttributeMapperRegistry.map_attributes   4 4 0   0%
src/lexigram/auth/authn/saml.py SAMLProvider.__init__   10 10 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.__init__   7 7 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.__repr__   1 1 0   0%
src/lexigram/auth/authn/saml.py SAMLManager._create_saml_client   3 3 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.get_login_url   10 10 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.process_assertion   9 9 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.get_logout_url   12 12 0   0%
src/lexigram/auth/authn/saml.py SAMLManager.process_logout_response   5 5 0   0%
src/lexigram/auth/authn/saml.py (no function)   57 57 2   0%
src/lexigram/auth/authn/schemas/__init__.py (no function)   5 0 0   100%
src/lexigram/auth/authn/schemas/requests.py RegisterRequest.validate_passwords_match   2 2 0   0%
src/lexigram/auth/authn/schemas/requests.py PasswordResetConfirm.validate_passwords_match   2 2 0   0%
src/lexigram/auth/authn/schemas/requests.py (no function)   45 0 0   100%
src/lexigram/auth/authn/schemas/responses.py (no function)   12 0 0   100%
src/lexigram/auth/authn/schemas/user.py (no function)   20 0 0   100%
src/lexigram/auth/authn/security.py _prehash   1 0 0   100%
src/lexigram/auth/authn/security.py _prepare_password_bytes   9 2 0   78%
src/lexigram/auth/authn/security.py PasswordHasher.__init__   1 0 0   100%
src/lexigram/auth/authn/security.py PasswordHasher.hash   5 1 0   80%
src/lexigram/auth/authn/security.py PasswordHasher.hash._hash_sync   4 0 0   100%
src/lexigram/auth/authn/security.py PasswordHasher.verify   8 2 0   75%
src/lexigram/auth/authn/security.py PasswordHasher.verify._verify_sync   5 0 0   100%
src/lexigram/auth/authn/security.py PasswordHasher.needs_rehash   10 3 0   70%
src/lexigram/auth/authn/security.py PasswordHasher.rehash_if_needed   5 1 0   80%
src/lexigram/auth/authn/security.py PasswordPolicy.__init__   12 0 0   100%
src/lexigram/auth/authn/security.py PasswordPolicy.from_config   1 0 0   100%
src/lexigram/auth/authn/security.py PasswordPolicy._load_common_passwords   9 5 0   44%
src/lexigram/auth/authn/security.py PasswordPolicy._get_common_passwords   3 0 0   100%
src/lexigram/auth/authn/security.py PasswordPolicy.validate   21 4 0   81%
src/lexigram/auth/authn/security.py PasswordPolicy.is_valid   5 5 0   0%
src/lexigram/auth/authn/security.py (no function)   47 5 2   89%
src/lexigram/auth/authn/services.py LockoutConfig.__post_init__   3 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker.__init__   4 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker.is_locked   3 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker.record_failure   3 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker.clear   3 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker._is_locked_cache   9 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker._record_failure_cache   10 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker._is_locked_local   4 0 0   100%
src/lexigram/auth/authn/services.py LoginAttemptTracker._record_failure_local   4 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService.__init__   10 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService.__repr__   1 1 0   0%
src/lexigram/auth/authn/services.py AuthenticationService._emit   5 3 0   40%
src/lexigram/auth/authn/services.py AuthenticationService.set_hook_registry   1 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService._emit_action   3 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService.authenticate_user   26 2 0   92%
src/lexigram/auth/authn/services.py AuthenticationService._rehash_password_if_needed   9 5 0   44%
src/lexigram/auth/authn/services.py AuthenticationService.register_user   13 2 0   85%
src/lexigram/auth/authn/services.py AuthenticationService.create_token   1 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService.verify_token   1 0 0   100%
src/lexigram/auth/authn/services.py AuthenticationService.refresh_token   9 9 0   0%
src/lexigram/auth/authn/services.py AuthenticationService.get_user_from_token   1 1 0   0%
src/lexigram/auth/authn/services.py AuthenticationService.shutdown   6 6 0   0%
src/lexigram/auth/authn/services.py (no function)   47 0 11   100%
src/lexigram/auth/authn/user_service.py UserService.__init__   4 0 0   100%
src/lexigram/auth/authn/user_service.py UserService._emit   5 3 0   40%
src/lexigram/auth/authn/user_service.py UserService.create_user   12 6 0   50%
src/lexigram/auth/authn/user_service.py UserService.get_user   1 0 0   100%
src/lexigram/auth/authn/user_service.py UserService.update_user   7 7 0   0%
src/lexigram/auth/authn/user_service.py UserService.delete_user   7 7 0   0%
src/lexigram/auth/authn/user_service.py UserService.lock_user   7 7 0   0%
src/lexigram/auth/authn/user_service.py UserService.unlock_user   7 7 0   0%
src/lexigram/auth/authn/user_service.py UserService.change_user_password   24 4 0   83%
src/lexigram/auth/authn/user_service.py UserService.set_user_password   23 10 0   57%
src/lexigram/auth/authn/user_service.py UserService.list_users   1 1 0   0%
src/lexigram/auth/authn/user_service.py UserService.count_users   1 1 0   0%
src/lexigram/auth/authn/user_service.py UserService.__repr__   1 1 0   0%
src/lexigram/auth/authn/user_service.py UserService.shutdown   6 6 0   0%
src/lexigram/auth/authn/user_service.py (no function)   29 0 2   100%
src/lexigram/auth/authz/__init__.py __getattr__   3 3 0   0%
src/lexigram/auth/authz/__init__.py __dir__   1 1 0   0%
src/lexigram/auth/authz/__init__.py (no function)   8 0 0   100%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._parse_list   1 0 0   100%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.check_access   59 51 0   14%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.has_any_role   14 14 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.has_any_permission   21 21 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can   2 2 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can_view   1 1 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can_create   1 1 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can_update   1 1 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can_delete   1 1 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.can_execute_action   1 1 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin.authorize   5 0 0   100%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._get_effective_roles   17 17 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._get_user_permissions   12 12 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._has_permission   13 13 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._has_permission.matches   5 5 0   0%
src/lexigram/auth/authz/_check_mixin.py _AuthCheckMixin._flatten_roles   22 22 0   0%
src/lexigram/auth/authz/_check_mixin.py (no function)   32 0 3   100%
src/lexigram/auth/authz/_parsers.py ValueParser.can_parse   0 0 1   100%
src/lexigram/auth/authz/_parsers.py ValueParser.parse   0 0 1   100%
src/lexigram/auth/authz/_parsers.py StringValueParser.can_parse   1 0 0   100%
src/lexigram/auth/authz/_parsers.py StringValueParser.parse   5 5 0   0%
src/lexigram/auth/authz/_parsers.py ListValueParser.can_parse   1 0 0   100%
src/lexigram/auth/authz/_parsers.py ListValueParser.parse   1 0 0   100%
src/lexigram/auth/authz/_parsers.py NoneValueParser.can_parse   1 1 0   0%
src/lexigram/auth/authz/_parsers.py NoneValueParser.parse   1 1 0   0%
src/lexigram/auth/authz/_parsers.py ValueParserRegistry.__init__   3 0 0   100%
src/lexigram/auth/authz/_parsers.py ValueParserRegistry._register_default_parsers   1 0 0   100%
src/lexigram/auth/authz/_parsers.py ValueParserRegistry.register_parser   2 2 0   0%
src/lexigram/auth/authz/_parsers.py ValueParserRegistry.parse   5 1 0   80%
src/lexigram/auth/authz/_parsers.py (no function)   23 0 3   100%
src/lexigram/auth/authz/guards.py _find_request   4 0 0   100%
src/lexigram/auth/authz/guards.py AuthorizationGuard.__init__   3 0 0   100%
src/lexigram/auth/authz/guards.py AuthorizationGuard.check_authorization   13 0 0   100%
src/lexigram/auth/authz/guards.py AuthorizationGuard.get_error_message   6 0 0   100%
src/lexigram/auth/authz/guards.py RouteGuard.__init__   1 0 0   100%
src/lexigram/auth/authz/guards.py RouteGuard.check_access   1 0 0   100%
src/lexigram/auth/authz/guards.py RouteGuard.get_deny_response   1 0 0   100%
src/lexigram/auth/authz/guards.py require_auth   4 0 0   100%
src/lexigram/auth/authz/guards.py require_auth.decorator   2 0 0   100%
src/lexigram/auth/authz/guards.py require_auth.decorator.wrapper   15 2 0   87%
src/lexigram/auth/authz/guards.py require_roles   1 0 0   100%
src/lexigram/auth/authz/guards.py require_permissions   1 0 0   100%
src/lexigram/auth/authz/guards.py optional_auth   3 0 1   100%
src/lexigram/auth/authz/guards.py optional_auth.wrapper   1 0 0   100%
src/lexigram/auth/authz/guards.py (no function)   21 0 4   100%
src/lexigram/auth/authz/scopes.py ScopeManager.__init__   2 0 0   100%
src/lexigram/auth/authz/scopes.py ScopeManager.get_scope_permissions   2 0 0   100%
src/lexigram/auth/authz/scopes.py ScopeManager.get_scopes_for_permissions   7 0 0   100%
src/lexigram/auth/authz/scopes.py ScopeManager.validate_scopes   3 0 0   100%
src/lexigram/auth/authz/scopes.py ScopeManager.expand_scope_permissions   5 0 0   100%
src/lexigram/auth/authz/scopes.py (no function)   20 0 0   100%
src/lexigram/auth/authz/service.py AuthorizationService.__init__   11 0 0   100%
src/lexigram/auth/authz/service.py AuthorizationService.set_policies   2 2 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.set_roles   3 3 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.__repr__   1 1 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.register_role   8 8 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.get_role   1 1 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.sync_from_db   28 28 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.create_role   1 1 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.add_role_permission   21 21 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.get_role_permissions   2 2 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.remove_role   4 4 0   0%
src/lexigram/auth/authz/service.py AuthorizationService.invalidate_user   2 2 0   0%
src/lexigram/auth/authz/service.py __getattr__   3 1 0   67%
src/lexigram/auth/authz/service.py (no function)   29 0 2   100%
src/lexigram/auth/cli/__init__.py (no function)   0 0 0   100%
src/lexigram/auth/cli/checks.py check_auth_service   1 1 0   0%
src/lexigram/auth/cli/checks.py (no function)   3 3 2   0%
src/lexigram/auth/cli/commands.py create_auth_app   16 16 0   0%
src/lexigram/auth/cli/commands.py create_auth_app.token_generate   1 1 0   0%
src/lexigram/auth/cli/commands.py create_auth_app.token_verify   1 1 0   0%
src/lexigram/auth/cli/commands.py create_auth_app.roles_list   1 1 0   0%
src/lexigram/auth/cli/commands.py create_auth_app.sessions_list   1 1 0   0%
src/lexigram/auth/cli/commands.py create_auth_app.sessions_revoke   1 1 0   0%
src/lexigram/auth/cli/commands.py (no function)   3 3 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.contributor_id   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_generators   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_commands   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_health_checks   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_doctor_checks   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_shell_context   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_hooks   1 1 0   0%
src/lexigram/auth/cli/contributor.py AuthCliContributor.get_schema_setup   1 1 0   0%
src/lexigram/auth/cli/contributor.py (no function)   15 15 0   0%
src/lexigram/auth/cli/doctor.py check_jwt_secret   3 3 0   0%
src/lexigram/auth/cli/doctor.py check_auth_config   1 1 0   0%
src/lexigram/auth/cli/doctor.py (no function)   4 4 0   0%
src/lexigram/auth/cli/generators/__init__.py (no function)   0 0 0   100%
src/lexigram/auth/cli/generators/auth_guard.py AuthGuardGenerator.generate   1 1 0   0%
src/lexigram/auth/cli/generators/auth_guard.py (no function)   6 6 0   0%
src/lexigram/auth/cli/generators/auth_policy.py AuthPolicyGenerator.generate   1 1 0   0%
src/lexigram/auth/cli/generators/auth_policy.py (no function)   6 6 0   0%
src/lexigram/auth/cli/generators/guard.py AuthGuardGenerator.generate   17 0 0   100%
src/lexigram/auth/cli/generators/guard.py (no function)   9 0 0   100%
src/lexigram/auth/cli/hooks.py log_auth_command   0 0 0   100%
src/lexigram/auth/cli/hooks.py (no function)   2 2 0   0%
src/lexigram/auth/cli/schema_setup.py ensure_oauth_identities   7 0 0   100%
src/lexigram/auth/cli/schema_setup.py (no function)   5 0 0   100%
src/lexigram/auth/cli/shell.py provide_auth   1 1 0   0%
src/lexigram/auth/cli/shell.py (no function)   4 4 2   0%
src/lexigram/auth/config.py AuthUserConfig._handle_username   3 1 0   67%
src/lexigram/auth/config.py JWTConfig.validate_jwt_security   14 1 0   93%
src/lexigram/auth/config.py PasswordConfig.validate_cost_factors   8 0 0   100%
src/lexigram/auth/config.py AuthConfig.validate_security   8 0 0   100%
src/lexigram/auth/config.py (no function)   100 0 0   100%
src/lexigram/auth/constants.py (no function)   24 2 0   92%
src/lexigram/auth/decorators.py _extract_request   4 4 0   0%
src/lexigram/auth/decorators.py require_auth   3 3 0   0%
src/lexigram/auth/decorators.py require_auth.wrapper   4 4 0   0%
src/lexigram/auth/decorators.py require_roles   3 3 1   0%
src/lexigram/auth/decorators.py require_roles.decorator   2 2 0   0%
src/lexigram/auth/decorators.py require_roles.decorator.wrapper   8 8 0   0%
src/lexigram/auth/decorators.py (no function)   10 10 0   0%
src/lexigram/auth/di/__init__.py (no function)   7 0 0   100%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.__init__   17 5 0   71%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.from_config   1 1 0   0%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.register   3 0 0   100%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.boot   3 0 0   100%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.shutdown   3 0 0   100%
src/lexigram/auth/di/bundle_provider.py AuthBundleProvider.health_check   3 3 0   0%
src/lexigram/auth/di/bundle_provider.py (no function)   24 0 2   100%
src/lexigram/auth/di/provider.py AuthProvider.__init__   2 2 0   0%
src/lexigram/auth/di/provider.py AuthProvider.from_config   1 1 0   0%
src/lexigram/auth/di/provider.py AuthProvider.register   11 11 0   0%
src/lexigram/auth/di/provider.py AuthProvider.boot   0 0 0   100%
src/lexigram/auth/di/provider.py AuthProvider.shutdown   0 0 0   100%
src/lexigram/auth/di/provider.py AuthProvider.health_check   1 1 0   0%
src/lexigram/auth/di/provider.py (no function)   23 23 2   0%
src/lexigram/auth/di/sub_providers/__init__.py (no function)   11 0 0   100%
src/lexigram/auth/di/sub_providers/admin_provider.py AuthAdminProvider.__init__   2 0 0   100%
src/lexigram/auth/di/sub_providers/admin_provider.py AuthAdminProvider.register   10 0 0   100%
src/lexigram/auth/di/sub_providers/admin_provider.py AuthAdminProvider.boot   7 2 0   71%
src/lexigram/auth/di/sub_providers/admin_provider.py (no function)   11 0 3   100%
src/lexigram/auth/di/sub_providers/authentication_provider.py _build_token_manager   24 3 0   88%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.__init__   15 1 0   93%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.password_hasher   4 0 0   100%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.service   3 0 0   100%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.get_user   1 1 0   0%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.register   8 0 0   100%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.boot   13 1 0   92%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.shutdown   1 0 0   100%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.verify_token   4 1 0   75%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.validate_session   3 3 0   0%
src/lexigram/auth/di/sub_providers/authentication_provider.py AuthenticationProvider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/authentication_provider.py (no function)   34 0 6   100%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.__init__   3 0 0   100%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.auth_config   1 0 0   100%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.register   7 1 0   86%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.boot   1 0 0   100%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.shutdown   1 0 0   100%
src/lexigram/auth/di/sub_providers/authorization_provider.py AuthorizationProvider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/authorization_provider.py (no function)   19 0 3   100%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.__init__   4 0 0   100%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.service   1 1 0   0%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.register   17 3 0   82%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.boot   1 1 0   0%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.shutdown   1 1 0   0%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py GoogleOAuthProvider.health_check   2 2 0   0%
src/lexigram/auth/di/sub_providers/google_oauth_provider.py (no function)   20 0 3   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py MFAProvider.__init__   1 0 0   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py MFAProvider.register   0 0 0   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py MFAProvider.boot   1 0 0   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py MFAProvider.shutdown   1 0 0   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py MFAProvider.health_check   1 0 0   100%
src/lexigram/auth/di/sub_providers/mfa_provider.py (no function)   15 0 2   100%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.__init__   4 4 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.identity_resolver   1 1 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.register   8 8 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.boot   1 1 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.shutdown   1 1 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py OAuth2Provider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/oauth2_provider.py (no function)   20 0 4   100%
src/lexigram/auth/di/sub_providers/oauth_provider.py detect_oauth_providers_from_config   1 1 0   0%
src/lexigram/auth/di/sub_providers/oauth_provider.py (no function)   3 0 0   100%
src/lexigram/auth/di/sub_providers/passkey_provider.py PasskeyProvider.__init__   1 1 0   0%
src/lexigram/auth/di/sub_providers/passkey_provider.py PasskeyProvider.register   0 0 0   100%
src/lexigram/auth/di/sub_providers/passkey_provider.py PasskeyProvider.boot   1 1 0   0%
src/lexigram/auth/di/sub_providers/passkey_provider.py PasskeyProvider.shutdown   1 1 0   0%
src/lexigram/auth/di/sub_providers/passkey_provider.py PasskeyProvider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/passkey_provider.py (no function)   15 0 2   100%
src/lexigram/auth/di/sub_providers/session_provider.py SessionProvider.__init__   2 0 0   100%
src/lexigram/auth/di/sub_providers/session_provider.py SessionProvider.register   8 1 0   88%
src/lexigram/auth/di/sub_providers/session_provider.py SessionProvider.boot   1 0 0   100%
src/lexigram/auth/di/sub_providers/session_provider.py SessionProvider.shutdown   1 0 0   100%
src/lexigram/auth/di/sub_providers/session_provider.py SessionProvider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/session_provider.py (no function)   16 0 3   100%
src/lexigram/auth/di/sub_providers/token_provider.py TokenProvider.__init__   23 1 0   96%
src/lexigram/auth/di/sub_providers/token_provider.py TokenProvider.register   23 15 0   35%
src/lexigram/auth/di/sub_providers/token_provider.py TokenProvider.boot   3 0 0   100%
src/lexigram/auth/di/sub_providers/token_provider.py TokenProvider.shutdown   1 0 0   100%
src/lexigram/auth/di/sub_providers/token_provider.py TokenProvider.health_check   1 1 0   0%
src/lexigram/auth/di/sub_providers/token_provider.py (no function)   21 0 3   100%
src/lexigram/auth/events.py (no function)   49 0 0   100%
src/lexigram/auth/exceptions.py InvalidCredentialsError.__init__   1 0 0   100%
src/lexigram/auth/exceptions.py AccountLockedError.__init__   2 0 0   100%
src/lexigram/auth/exceptions.py UserNotFoundError.__init__   1 0 0   100%
src/lexigram/auth/exceptions.py TokenExpiredError.__init__   5 1 0   80%
src/lexigram/auth/exceptions.py TokenBlacklistedError.__init__   1 0 0   100%
src/lexigram/auth/exceptions.py TokenInvalidError.__init__   5 1 0   80%
src/lexigram/auth/exceptions.py TokenAudienceError.__init__   7 2 0   71%
src/lexigram/auth/exceptions.py TokenNotFoundError.__init__   5 5 0   0%
src/lexigram/auth/exceptions.py TokenExpiredVerificationError.__init__   5 5 0   0%
src/lexigram/auth/exceptions.py AlreadyVerifiedError.__init__   5 1 0   80%
src/lexigram/auth/exceptions.py SessionNotFoundError.__init__   1 0 0   100%
src/lexigram/auth/exceptions.py (no function)   66 0 0   100%
src/lexigram/auth/hooks.py (no function)   23 0 0   100%
src/lexigram/auth/mfa/__init__.py (no function)   4 0 0   100%
src/lexigram/auth/mfa/hooks.py (no function)   16 0 0   100%
src/lexigram/auth/mfa/manager.py MFAManager.__init__   1 0 0   100%
src/lexigram/auth/mfa/manager.py MFAManager.enable_totp   15 1 0   93%
src/lexigram/auth/mfa/manager.py MFAManager.verify_totp   21 1 0   95%
src/lexigram/auth/mfa/manager.py MFAManager.disable_totp   10 1 0   90%
src/lexigram/auth/mfa/manager.py MFAManager.__repr__   1 1 0   0%
src/lexigram/auth/mfa/manager.py (no function)   16 0 2   100%
src/lexigram/auth/mfa/totp_vectors.py TOTPTestVectors.get_all   1 1 0   0%
src/lexigram/auth/mfa/totp_vectors.py TOTPTestVectors.get_by_algorithm   1 1 0   0%
src/lexigram/auth/mfa/totp_vectors.py TOTPTestVectors.get_by_digits   1 1 0   0%
src/lexigram/auth/mfa/totp_vectors.py generate_test_vector   1 1 0   0%
src/lexigram/auth/mfa/totp_vectors.py (no function)   27 27 0   0%
src/lexigram/auth/models/__init__.py (no function)   4 0 0   100%
src/lexigram/auth/models/apikey.py APIKey.is_active   3 3 0   0%
src/lexigram/auth/models/apikey.py (no function)   19 0 0   100%
src/lexigram/auth/models/mfa.py (no function)   14 0 0   100%
src/lexigram/auth/models/session.py UserSession.is_expired   4 1 0   75%
src/lexigram/auth/models/session.py UserSession.is_valid   1 1 0   0%
src/lexigram/auth/models/session.py UserSession.remaining_ttl   5 5 0   0%
src/lexigram/auth/models/session.py UserSession.refresh   3 3 0   0%
src/lexigram/auth/models/session.py (no function)   25 0 0   100%
src/lexigram/auth/models/token.py (no function)   14 0 2   100%
src/lexigram/auth/models/user.py User.has_role   1 0 0   100%
src/lexigram/auth/models/user.py User.has_permission   1 0 0   100%
src/lexigram/auth/models/user.py User.with_role   3 1 0   67%
src/lexigram/auth/models/user.py User.without_role   3 3 0   0%
src/lexigram/auth/models/user.py User.with_permission   3 3 0   0%
src/lexigram/auth/models/user.py User.without_permission   3 3 0   0%
src/lexigram/auth/models/user.py User.record_login   1 0 0   100%
src/lexigram/auth/models/user.py User.to_public_dict   1 1 0   0%
src/lexigram/auth/models/user.py User.from_dict   3 3 0   0%
src/lexigram/auth/models/user.py (no function)   40 0 0   100%
src/lexigram/auth/module.py AuthModule.configure   6 0 0   100%
src/lexigram/auth/module.py AuthModule.stub   3 3 0   0%
src/lexigram/auth/module.py (no function)   12 0 0   100%
src/lexigram/auth/policies/__init__.py (no function)   7 0 0   100%
src/lexigram/auth/policies/engine.py PatternMatcher.can_match   0 0 1   100%
src/lexigram/auth/policies/engine.py PatternMatcher.matches   0 0 1   100%
src/lexigram/auth/policies/engine.py ExactPatternMatcher.can_match   1 0 0   100%
src/lexigram/auth/policies/engine.py ExactPatternMatcher.matches   1 0 0   100%
src/lexigram/auth/policies/engine.py WildcardPatternMatcher.can_match   1 0 0   100%
src/lexigram/auth/policies/engine.py WildcardPatternMatcher.matches   2 0 0   100%
src/lexigram/auth/policies/engine.py GlobPatternMatcher.can_match   1 1 0   0%
src/lexigram/auth/policies/engine.py GlobPatternMatcher.matches   3 3 0   0%
src/lexigram/auth/policies/engine.py PatternMatcherRegistry.__init__   2 0 0   100%
src/lexigram/auth/policies/engine.py PatternMatcherRegistry.with_defaults   3 0 0   100%
src/lexigram/auth/policies/engine.py PatternMatcherRegistry._register_default_matchers   1 0 0   100%
src/lexigram/auth/policies/engine.py PatternMatcherRegistry.register_matcher   2 2 0   0%
src/lexigram/auth/policies/engine.py PatternMatcherRegistry.matches   6 1 0   83%
src/lexigram/auth/policies/engine.py PolicyEngine.__init__   8 0 0   100%
src/lexigram/auth/policies/engine.py PolicyEngine.__repr__   1 1 0   0%
src/lexigram/auth/policies/engine.py PolicyEngine._rebuild_resource_index   14 1 0   93%
src/lexigram/auth/policies/engine.py PolicyEngine.load_from_store   7 5 0   29%
src/lexigram/auth/policies/engine.py PolicyEngine.save_policy   7 7 0   0%
src/lexigram/auth/policies/engine.py PolicyEngine.evaluate   41 14 0   66%
src/lexigram/auth/policies/engine.py PolicyEngine._matches   10 2 0   80%
src/lexigram/auth/policies/engine.py PolicyEngine._pattern_match   6 0 0   100%
src/lexigram/auth/policies/engine.py (no function)   37 0 5   100%
src/lexigram/auth/policies/evaluator.py OperatorHandlerProtocol.compare   0 0 1   100%
src/lexigram/auth/policies/evaluator.py EqualsOperator.compare   1 0 0   100%
src/lexigram/auth/policies/evaluator.py NotEqualsOperator.compare   1 0 0   100%
src/lexigram/auth/policies/evaluator.py ContainsOperator.compare   1 0 0   100%
src/lexigram/auth/policies/evaluator.py NotContainsOperator.compare   1 1 0   0%
src/lexigram/auth/policies/evaluator.py InOperator.compare   1 0 0   100%
src/lexigram/auth/policies/evaluator.py NotInOperator.compare   1 1 0   0%
src/lexigram/auth/policies/evaluator.py MatchesOperator.compare   1 0 0   100%
src/lexigram/auth/policies/evaluator.py GreaterThanOperator.compare   4 2 0   50%
src/lexigram/auth/policies/evaluator.py LessThanOperator.compare   4 2 0   50%
src/lexigram/auth/policies/evaluator.py GreaterThanOrEqualsOperator.compare   4 4 0   0%
src/lexigram/auth/policies/evaluator.py LessThanOrEqualsOperator.compare   4 4 0   0%
src/lexigram/auth/policies/evaluator.py OperatorRegistry.__init__   2 0 0   100%
src/lexigram/auth/policies/evaluator.py OperatorRegistry.with_defaults   3 0 0   100%
src/lexigram/auth/policies/evaluator.py OperatorRegistry._register_default_handlers   1 0 0   100%
src/lexigram/auth/policies/evaluator.py OperatorRegistry.register_handler   2 2 0   0%
src/lexigram/auth/policies/evaluator.py OperatorRegistry.compare   5 0 0   100%
src/lexigram/auth/policies/evaluator.py ConditionEvaluator.__init__   2 0 0   100%
src/lexigram/auth/policies/evaluator.py ConditionEvaluator._compile_path   3 0 0   100%
src/lexigram/auth/policies/evaluator.py ConditionEvaluator._compile_path.accessor   10 4 0   60%
src/lexigram/auth/policies/evaluator.py ConditionEvaluator.evaluate   6 0 0   100%
src/lexigram/auth/policies/evaluator.py ConditionEvaluator._resolve_attribute   5 0 0   100%
src/lexigram/auth/policies/evaluator.py (no function)   42 0 5   100%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.__init__   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.get_all   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.get_by_id   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.get_by_name   4 4 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.save   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.delete   4 4 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.exists   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py InMemoryPolicyStore.clear   1 1 0   0%
src/lexigram/auth/policies/in_memory_store.py (no function)   12 0 2   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.get_all   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.get_by_id   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.get_by_name   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.save   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.delete   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyStoreProtocol.exists   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyLoader.load   0 0 1   100%
src/lexigram/auth/policies/store.py PolicyLoader.reload   0 0 1   100%
src/lexigram/auth/policies/store.py (no function)   15 0 12   100%
src/lexigram/auth/policies/types.py (no function)   39 0 0   100%
src/lexigram/auth/protocols.py TokenValidatorProtocol.validate   0 0 1   100%
src/lexigram/auth/protocols.py TokenValidatorProtocol.revoke   0 0 1   100%
src/lexigram/auth/protocols.py IdentityResolverProtocol.resolve   0 0 1   100%
src/lexigram/auth/protocols.py (no function)   9 9 6   0%
src/lexigram/auth/services/__init__.py (no function)   4 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker.__init__   6 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker.record_failed_login   3 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker.record_refresh   3 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker.failed_login_summary   4 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker.refresh_summary   5 0 0   100%
src/lexigram/auth/services/activity_tracker.py AuthActivityTracker._prune   8 2 0   75%
src/lexigram/auth/services/activity_tracker.py (no function)   14 0 0   100%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.__init__   2 0 0   100%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.validate_password   15 3 0   80%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.verify_credentials   12 4 0   67%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.get_cached_token   14 14 0   0%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.cache_token   11 6 0   45%
src/lexigram/auth/services/result_pattern_service.py AuthServiceWithResultPattern.invalidate_token   11 6 0   45%
src/lexigram/auth/services/result_pattern_service.py (no function)   15 0 4   100%
src/lexigram/auth/session/__init__.py (no function)   5 0 0   100%
src/lexigram/auth/session/cookie_backend.py SessionCookieBackend.__init__   8 0 0   100%
src/lexigram/auth/session/cookie_backend.py SessionCookieBackend.authenticate   14 0 0   100%
src/lexigram/auth/session/cookie_backend.py SessionCookieBackend.login   6 0 0   100%
src/lexigram/auth/session/cookie_backend.py SessionCookieBackend.logout   5 0 0   100%
src/lexigram/auth/session/cookie_backend.py (no function)   16 0 1   100%
src/lexigram/auth/session/fingerprint.py generate_device_id   2 0 0   100%
src/lexigram/auth/session/fingerprint.py (no function)   6 0 0   100%
src/lexigram/auth/session/hooks.py (no function)   20 0 0   100%
src/lexigram/auth/session/manager.py SessionManagerImpl.__init__   6 0 0   100%
src/lexigram/auth/session/manager.py SessionManagerImpl.__repr__   1 1 0   0%
src/lexigram/auth/session/manager.py SessionManagerImpl.create_session   15 1 0   93%
src/lexigram/auth/session/manager.py SessionManagerImpl.validate_session   17 0 0   100%
src/lexigram/auth/session/manager.py SessionManagerImpl._prune_activity_write_cache   4 0 0   100%
src/lexigram/auth/session/manager.py SessionManagerImpl.revoke_session   14 7 0   50%
src/lexigram/auth/session/manager.py SessionManagerImpl.verify_mfa   4 4 0   0%
src/lexigram/auth/session/manager.py SessionManagerImpl.revoke_all_sessions   3 3 0   0%
src/lexigram/auth/session/manager.py SessionManagerImpl.get_active_sessions   1 0 0   100%
src/lexigram/auth/session/manager.py SessionManagerImpl._generate_fallback_id   2 0 0   100%
src/lexigram/auth/session/manager.py (no function)   31 0 0   100%
src/lexigram/auth/storage/__init__.py (no function)   7 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.__init__   4 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore._col   3 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore._ensure_collection   3 1 0   67%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore._user_from_doc   1 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore._doc_from_user   1 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.create_user   10 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.get_user_by_id   3 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.get_user_by_email   3 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.update_user   4 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.delete_user   3 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.list_users   7 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.count_users   2 0 0   100%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.get_credentials   5 5 0   0%
src/lexigram/auth/storage/_mongo_store.py MongoDBUserStore.update_credentials   3 3 0   0%
src/lexigram/auth/storage/_mongo_store.py (no function)   24 0 2   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.__init__   2 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore._ensure_tables   0 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore._user_from_row   2 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore._user_from_row.safe_load   8 3 0   62%
src/lexigram/auth/storage/_sql_store.py SQLUserStore._credentials_from_row   2 2 0   0%
src/lexigram/auth/storage/_sql_store.py SQLUserStore._credentials_from_row.safe_load   8 8 0   0%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.create_user   8 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.get_user_by_id   5 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.get_user_by_email   5 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.update_user   3 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.delete_user   2 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.list_users   9 0 0   100%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.count_users   10 3 0   70%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.get_credentials   7 7 0   0%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.update_credentials   4 4 0   0%
src/lexigram/auth/storage/_sql_store.py SQLUserStore.update_credentials.safe_load   8 8 0   0%
src/lexigram/auth/storage/_sql_store.py (no function)   25 0 2   100%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.__init__   1 1 0   0%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.insert   2 2 0   0%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.find_by_prefix   3 3 0   0%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.update_last_used   2 2 0   0%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.revoke   2 2 0   0%
src/lexigram/auth/storage/apikey_sql.py APIKeySqlRepository.find_by_user   3 3 0   0%
src/lexigram/auth/storage/apikey_sql.py (no function)   13 0 2   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.__init__   6 0 0   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.subscribe_to_invalidations   4 1 0   75%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore._handle_invalidation   11 1 0   91%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.get_user_by_id   18 0 0   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.get_user_by_email   18 18 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.update_user   11 0 0   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.delete_user   11 2 0   82%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.create_user   1 1 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.list_users   1 1 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.count_users   1 1 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.get_credentials   1 1 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore.update_credentials   4 4 0   0%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore._serialize_user   1 0 0   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore._deserialize_user   3 0 0   100%
src/lexigram/auth/storage/cached_user_store.py CachedUserStore._deserialize_user.parse_dt   8 3 0   62%
src/lexigram/auth/storage/cached_user_store.py (no function)   23 0 4   100%
src/lexigram/auth/storage/db_stores.py RedisUserStore.__init__   3 3 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore._user_key   1 1 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore._user_from_data   3 3 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore._user_from_data.parse_dt   10 10 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore._data_from_user   8 8 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.create_user   13 13 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.get_user_by_id   6 6 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.get_user_by_email   1 1 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.update_user   6 6 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.delete_user   3 3 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.list_users   1 1 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.count_users   1 1 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.get_credentials   6 6 0   0%
src/lexigram/auth/storage/db_stores.py RedisUserStore.update_credentials   8 8 0   0%
src/lexigram/auth/storage/db_stores.py (no function)   25 0 2   100%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.__init__   1 0 0   100%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.create   2 0 0   100%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.get   1 0 0   100%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.update   5 0 0   100%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.delete   4 4 0   0%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.delete_all_for_user   4 4 0   0%
src/lexigram/auth/storage/in_memory_stores.py InMemorySessionStore.list_for_user   1 0 0   100%
src/lexigram/auth/storage/in_memory_stores.py InMemoryMFAStore.__init__   1 1 0   0%
src/lexigram/auth/storage/in_memory_stores.py InMemoryMFAStore.get   1 1 0   0%
src/lexigram/auth/storage/in_memory_stores.py InMemoryMFAStore.save   3 3 0   0%
src/lexigram/auth/storage/in_memory_stores.py InMemoryMFAStore.delete   4 4 0   0%
src/lexigram/auth/storage/in_memory_stores.py (no function)   16 0 2   100%
src/lexigram/auth/storage/oauth_identity_store/__init__.py (no function)   7 0 0   100%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.__init__   3 3 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore._ensure_collection   6 6 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore._identity_from_doc   1 1 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore._doc_from_identity   1 1 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.create_oauth_identity   7 7 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.get_oauth_identity   4 4 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.get_oauth_identities_for_user   8 8 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.delete_oauth_identity   7 7 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.delete_oauth_identities_for_user   7 7 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.get_user_by_oauth_identity   4 4 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.resolve_user_id   10 10 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py MongoDBOAuthIdentityStore.resolve_user_id_sync   2 2 0   0%
src/lexigram/auth/storage/oauth_identity_store/_mongodb.py (no function)   21 0 2   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.create_oauth_identity   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.get_oauth_identity   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.get_oauth_identities_for_user   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.delete_oauth_identity   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.delete_oauth_identities_for_user   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.get_user_by_oauth_identity   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentityStore.resolve_user_id   0 0 1   100%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py OAuthIdentity.__init__   5 5 0   0%
src/lexigram/auth/storage/oauth_identity_store/_protocol.py (no function)   14 0 8   100%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.__init__   2 0 0   100%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore._ensure_tables   10 0 0   100%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore._identity_from_row   1 1 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.create_oauth_identity   8 8 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.get_oauth_identity   7 7 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.get_oauth_identities_for_user   11 11 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.delete_oauth_identity   9 9 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.delete_oauth_identities_for_user   9 9 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.get_user_by_oauth_identity   7 7 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.resolve_user_id   12 12 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py SQLAlchemyOAuthIdentityStore.resolve_user_id_sync   2 2 0   0%
src/lexigram/auth/storage/oauth_identity_store/_sqlalchemy.py (no function)   20 0 2   100%
src/lexigram/auth/storage/session_store.py SessionStore.create   0 0 1   100%
src/lexigram/auth/storage/session_store.py SessionStore.get   0 0 1   100%
src/lexigram/auth/storage/session_store.py SessionStore.update   0 0 1   100%
src/lexigram/auth/storage/session_store.py SessionStore.delete   0 0 1   100%
src/lexigram/auth/storage/session_store.py SessionStore.delete_all_for_user   0 0 1   100%
src/lexigram/auth/storage/session_store.py SessionStore.list_for_user   0 0 1   100%
src/lexigram/auth/storage/session_store.py MFAStore.get   0 0 1   100%
src/lexigram/auth/storage/session_store.py MFAStore.save   0 0 1   100%
src/lexigram/auth/storage/session_store.py MFAStore.delete   0 0 1   100%
src/lexigram/auth/storage/session_store.py (no function)   16 0 13   100%
src/lexigram/auth/storage/token_store.py CachedUserStore.get_user_by_id   0 0 1   100%
src/lexigram/auth/storage/token_store.py CachedUserStore.create_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py CachedUserStore.update_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py CachedUserStore.delete_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.create_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.get_user_by_id   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.get_user_by_email   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.update_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.delete_user   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.list_users   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.count_users   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.get_credentials   0 0 1   100%
src/lexigram/auth/storage/token_store.py UserStoreProtocol.update_credentials   0 0 1   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.__init__   4 0 0   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.create_user   12 2 0   83%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.get_user_by_id   1 0 0   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.get_user_by_email   2 0 0   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.get_user_by_username   2 2 0   0%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.update_user   7 1 0   86%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.delete_user   8 0 0   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.list_users   2 2 0   0%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.count_users   1 1 0   0%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.get_credentials   1 0 0   100%
src/lexigram/auth/storage/token_store.py InMemoryUserStore.update_credentials   3 1 0   67%
src/lexigram/auth/storage/token_store.py (no function)   34 0 15   100%
src/lexigram/auth/types.py OAuth2UserInfo.__post_init__   2 1 0   50%
src/lexigram/auth/types.py (no function)   65 0 2   100%
src/lexigram/auth/web/__init__.py (no function)   5 0 0   100%
src/lexigram/auth/web/guards.py _get_request_resolver   8 2 0   75%
src/lexigram/auth/web/guards.py _get_request_context_user_id   11 3 0   73%
src/lexigram/auth/web/guards.py _GuardBase.can_activate   0 0 0   100%
src/lexigram/auth/web/guards.py _GuardBase.handle_rejection   8 8 0   0%
src/lexigram/auth/web/guards.py AuthGuard.can_activate   1 0 0   100%
src/lexigram/auth/web/guards.py AuthGuard.handle_rejection   8 8 0   0%
src/lexigram/auth/web/guards.py RoleGuard.__init__   1 1 0   0%
src/lexigram/auth/web/guards.py RoleGuard.can_activate   3 3 0   0%
src/lexigram/auth/web/guards.py PermissionGuard.__init__   1 1 0   0%
src/lexigram/auth/web/guards.py PermissionGuard.can_activate   12 12 0   0%
src/lexigram/auth/web/guards.py CompositeGuard.__init__   1 1 0   0%
src/lexigram/auth/web/guards.py CompositeGuard.can_activate   4 4 0   0%
src/lexigram/auth/web/guards.py AdminGuard.__init__   1 1 0   0%
src/lexigram/auth/web/guards.py use_guards   3 0 0   100%
src/lexigram/auth/web/guards.py use_guards.decorator   3 0 0   100%
src/lexigram/auth/web/guards.py use_guards.decorator.wrapper   18 4 0   78%
src/lexigram/auth/web/guards.py GuardFactory.get_guard   11 11 0   0%
src/lexigram/auth/web/guards.py require_auth   3 3 0   0%
src/lexigram/auth/web/guards.py require_auth.decorator   3 3 0   0%
src/lexigram/auth/web/guards.py require_auth.decorator.wrapper   17 17 0   0%
src/lexigram/auth/web/guards.py require_admin   3 3 0   0%
src/lexigram/auth/web/guards.py require_admin.decorator   3 3 0   0%
src/lexigram/auth/web/guards.py require_admin.decorator.wrapper   17 17 0   0%
src/lexigram/auth/web/guards.py require_role   1 1 0   0%
src/lexigram/auth/web/guards.py require_permission   1 1 0   0%
src/lexigram/auth/web/guards.py (no function)   41 0 3   100%
src/lexigram/auth/web/middleware/__init__.py (no function)   3 0 0   100%
src/lexigram/auth/web/middleware/api_key_authenticator.py ApiKeyAuthenticator.__init__   1 0 0   100%
src/lexigram/auth/web/middleware/api_key_authenticator.py ApiKeyAuthenticator.authenticate   13 11 0   15%
src/lexigram/auth/web/middleware/api_key_authenticator.py (no function)   7 0 0   100%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.__init__   16 1 0   94%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.should_skip_auth   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.extract_token   1 0 0   100%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.authenticate_request   29 12 0   59%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.check_authorization   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.__call__   42 42 0   0%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.__call__.next_app   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.__call__.send_wrapper   4 4 0   0%
src/lexigram/auth/web/middleware/auth.py AuthMiddleware.set_app   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py AuthRouter.__init__   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py AuthRouter.require_auth   3 3 0   0%
src/lexigram/auth/web/middleware/auth.py AuthRouter.require_auth.decorator   2 2 0   0%
src/lexigram/auth/web/middleware/auth.py AuthRouter.require_auth.decorator.wrapper   15 15 0   0%
src/lexigram/auth/web/middleware/auth.py AuthRouter.get_current_user   1 1 0   0%
src/lexigram/auth/web/middleware/auth.py _extract_request   4 4 0   0%
src/lexigram/auth/web/middleware/auth.py _get_auth_provider   6 6 0   0%
src/lexigram/auth/web/middleware/auth.py _get_response_factory   6 6 0   0%
src/lexigram/auth/web/middleware/auth.py require_mfa   3 3 0   0%
src/lexigram/auth/web/middleware/auth.py require_mfa.decorator   2 2 0   0%
src/lexigram/auth/web/middleware/auth.py require_mfa.decorator.wrapper   24 24 0   0%
src/lexigram/auth/web/middleware/auth.py (no function)   35 0 6   100%
src/lexigram/auth/web/middleware/jwt_authenticator.py JwtAuthenticator.__init__   7 0 0   100%
src/lexigram/auth/web/middleware/jwt_authenticator.py JwtAuthenticator.authenticate   21 8 0   62%
src/lexigram/auth/web/middleware/jwt_authenticator.py (no function)   10 0 0   100%
src/lexigram/auth/web/middleware/response_handler.py AuthResponseHandler.unauthorized_response   9 9 0   0%
src/lexigram/auth/web/middleware/response_handler.py AuthResponseHandler.forbidden_response   4 4 0   0%
src/lexigram/auth/web/middleware/response_handler.py _get_response_factory   6 6 0   0%
src/lexigram/auth/web/middleware/response_handler.py (no function)   10 0 0   100%
src/lexigram/auth/web/middleware/session_authenticator.py SessionAuthenticator.__init__   1 0 0   100%
src/lexigram/auth/web/middleware/session_authenticator.py SessionAuthenticator.authenticate   13 10 0   23%
src/lexigram/auth/web/middleware/session_authenticator.py (no function)   7 0 0   100%
src/lexigram/auth/web/middleware/session_validator.py SessionValidator.__init__   2 0 0   100%
src/lexigram/auth/web/middleware/session_validator.py SessionValidator.check_authorization   5 5 0   0%
src/lexigram/auth/web/middleware/session_validator.py SessionValidator.should_skip_auth   3 3 0   0%
src/lexigram/auth/web/middleware/session_validator.py (no function)   7 0 2   100%
src/lexigram/auth/web/middleware/throttle.py RateLimitExceededError.__init__   2 2 0   0%
src/lexigram/auth/web/middleware/throttle.py _parse_rate_limit   10 3 0   70%
src/lexigram/auth/web/middleware/throttle.py RateLimitMiddleware.__init__   9 0 0   100%
src/lexigram/auth/web/middleware/throttle.py RateLimitMiddleware.__call__   29 8 0   72%
src/lexigram/auth/web/middleware/throttle.py RateLimitMiddleware.__call__.intercepting_send   3 0 0   100%
src/lexigram/auth/web/middleware/throttle.py RateLimitMiddleware._send_429   4 0 0   100%
src/lexigram/auth/web/middleware/throttle.py throttle   2 2 1   0%
src/lexigram/auth/web/middleware/throttle.py throttle.decorator   1 1 0   0%
src/lexigram/auth/web/middleware/throttle.py (no function)   17 0 2   100%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.__init__   7 0 0   100%
src/lexigram/auth/web/middleware/token_cache.py TokenCache._cleanup_expired   4 0 0   100%
src/lexigram/auth/web/middleware/token_cache.py TokenCache._evict_if_needed   2 1 0   50%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.get   21 8 0   62%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.set   9 1 0   89%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.invalidate   5 5 0   0%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.clear   6 6 0   0%
src/lexigram/auth/web/middleware/token_cache.py TokenCache.stats   4 4 0   0%
src/lexigram/auth/web/middleware/token_cache.py (no function)   16 0 2   100%
src/lexigram/auth/web/middleware/token_extractor.py TokenExtractor.__init__   1 0 0   100%
src/lexigram/auth/web/middleware/token_extractor.py TokenExtractor.extract_token   23 16 0   30%
src/lexigram/auth/web/middleware/token_extractor.py (no function)   9 0 2   100%
Total     6573 2251 318   66%

No items found using the specified filter.