flask_more_smorest.perms.user_registry

User model registry for Flask-More-Smorest.

Provides a single registry for all user-related models, serving as the canonical integration point for the permissions system.

Quick Start:

# Use all default models (no imports needed) from flask_more_smorest.perms import init_fms init_fms()

# Or register custom user model with defaults for others from flask_more_smorest.perms import init_fms from myapp.models import User init_fms(user=User)

# Or register all models explicitly from flask_more_smorest.perms import init_fms from myapp.models import User, UserRole, Token, Domain, UserSetting init_fms(

user=User, role=UserRole, token=Token, domain=Domain, setting=UserSetting,

)

Resolution Order: 1. Explicitly registered model 2. Default model (auto-loaded by init_fms) 3. Error (model not registered)

Functions

clear_registration()

Clear all registered user models and custom getter.

ensure_models_initialized()

Ensure init_fms has registered models before mapper configuration.

expect_domain_model(expected)

Return the registered Domain model and enforce the expected type.

expect_role_model(expected)

Return the registered UserRole model and enforce the expected type.

expect_setting_model(expected)

Return the registered UserSetting model and enforce the expected type.

expect_token_model(expected)

Return the registered Token model and enforce the expected type.

expect_user_model(expected)

Return the registered User model and enforce the expected type.

get_current_user_func()

Get the registered get_current_user function.

get_domain_model([expected])

get_role_model([expected])

get_setting_model([expected])

get_token_model([expected])

get_user_model([expected])

init_fms([user, role, token, domain, ...])

Initialize Flask-More-Smorest perms integration.

flask_more_smorest.perms.user_registry.init_fms(user=None, role=None, token=None, domain=None, setting=None, get_current_user=None)[source]

Initialize Flask-More-Smorest perms integration.

This is the primary integration point. It registers models and helper functions in a single call. Missing models are filled with defaults.

The first call initializes models + helpers. Later calls may only update helper functions (model changes are rejected).

Return type:

None

flask_more_smorest.perms.user_registry.ensure_models_initialized()[source]

Ensure init_fms has registered models before mapper configuration.

Return type:

None

flask_more_smorest.perms.user_registry.get_user_model(expected=None)[source]
Overloads:
  • expected (type[UserT]) → type[UserT]

  • expected (None) → type[AbstractUser]

Get the registered User model class.

Parameters:

expected (type[TypeVar(UserT, bound= AbstractUser)] | None) – Optional expected User subclass for typed return.

Returns:

Registered User model class

Raises:

RuntimeError – If no User model is registered or expected doesn’t match.

Return type:

type[UserT] | type[AbstractUser]

flask_more_smorest.perms.user_registry.get_role_model(expected=None)[source]
Overloads:
  • expected (type[RoleT]) → type[RoleT]

  • expected (None) → type[AbstractUserRole]

Get the registered UserRole model class.

Parameters:

expected (type[TypeVar(RoleT, bound= AbstractUserRole)] | None) – Optional expected UserRole subclass for typed return.

Returns:

Registered UserRole model class

Raises:

RuntimeError – If no UserRole model is registered or expected doesn’t match.

Return type:

type[RoleT] | type[AbstractUserRole]

flask_more_smorest.perms.user_registry.get_token_model(expected=None)[source]
Overloads:
  • expected (type[TokenT]) → type[TokenT]

  • expected (None) → type[AbstractToken]

Get the registered Token model class.

Parameters:

expected (type[TypeVar(TokenT, bound= AbstractToken)] | None) – Optional expected Token subclass for typed return.

Returns:

Registered Token model class

Raises:

RuntimeError – If no Token model is registered or expected doesn’t match.

Return type:

type[TokenT] | type[AbstractToken]

flask_more_smorest.perms.user_registry.get_domain_model(expected=None)[source]
Overloads:
  • expected (type[DomainT]) → type[DomainT]

  • expected (None) → type[AbstractDomain]

Get the registered Domain model class.

Parameters:

expected (type[TypeVar(DomainT, bound= AbstractDomain)] | None) – Optional expected Domain subclass for typed return.

Returns:

Registered Domain model class

Raises:

RuntimeError – If no Domain model is registered or expected doesn’t match.

Return type:

type[DomainT] | type[AbstractDomain]

flask_more_smorest.perms.user_registry.get_setting_model(expected=None)[source]
Overloads:
  • expected (type[SettingT]) → type[SettingT]

  • expected (None) → type[AbstractUserSetting]

Get the registered UserSetting model class.

Parameters:

expected (type[TypeVar(SettingT, bound= AbstractUserSetting)] | None) – Optional expected UserSetting subclass for typed return.

Returns:

Registered UserSetting model class

Raises:

RuntimeError – If no UserSetting model is registered or expected doesn’t match.

Return type:

type[SettingT] | type[AbstractUserSetting]

flask_more_smorest.perms.user_registry.expect_user_model(expected)[source]

Return the registered User model and enforce the expected type.

Return type:

type[TypeVar(UserT, bound= AbstractUser)]

flask_more_smorest.perms.user_registry.expect_role_model(expected)[source]

Return the registered UserRole model and enforce the expected type.

Return type:

type[TypeVar(RoleT, bound= AbstractUserRole)]

flask_more_smorest.perms.user_registry.expect_token_model(expected)[source]

Return the registered Token model and enforce the expected type.

Return type:

type[TypeVar(TokenT, bound= AbstractToken)]

flask_more_smorest.perms.user_registry.expect_domain_model(expected)[source]

Return the registered Domain model and enforce the expected type.

Return type:

type[TypeVar(DomainT, bound= AbstractDomain)]

flask_more_smorest.perms.user_registry.expect_setting_model(expected)[source]

Return the registered UserSetting model and enforce the expected type.

Return type:

type[TypeVar(SettingT, bound= AbstractUserSetting)]

flask_more_smorest.perms.user_registry.get_current_user_func()[source]

Get the registered get_current_user function.

Return type:

Callable[[], AbstractUser | None] | None

Returns:

Registered function or None

flask_more_smorest.perms.user_registry.clear_registration()[source]

Clear all registered user models and custom getter.

Resets the registry to its initial state, forcing fallback to defaults (if imported). Useful for testing.

Example:

def test_with_custom_user():
    init_fms(user=MyUser)
    # ... test ...
    clear_registration()  # Reset for next test
Return type:

None