tools¶
create_fastapi_users_objects¶
- msdss_users_api.tools.create_fastapi_users_objects(user_manager_settings={}, jwt_settings={'lifetime_seconds': 900, 'tokenUrl': 'auth/jwt/login'}, cookie_settings={'lifetime_seconds': 2592000}, database=<msdss_base_database.core.Database object>, enable_cookie=True, enable_jwt=True, cookie=None, jwt=None, Base=<class 'sqlalchemy.orm.decl_api.Base'>, User=<class 'msdss_users_api.models.User'>, UserCreate=<class 'msdss_users_api.models.UserCreate'>, UserUpdate=<class 'msdss_users_api.models.UserUpdate'>, UserDB=<class 'msdss_users_api.models.UserDB'>, UserTable=<class 'msdss_users_api.models.UserTable'>, UserManager=None)[source]¶
Creates all the needed dependencies and models to build a FastAPIUsers object.
- Parameters
user_manager_settings (dict) –
Keyword arguments to be passed to
msdss_users_api.tools.create_user_manager().Requires setting at least the following keys:
reset_password_token_secret(str): secret used to secure password reset tokens. Use a strong phrase (e.g.openssl rand -hex 32)verification_token_secret(str): secret used to secure verification tokens. Use a strong phrase (e.g.openssl rand -hex 32)
cookie_settings (dict) –
Dictionary of keyword arguments passed to
fastapi_users:fastapi_users.authentication.CookieAuthentication. See CookieAuthentication.Requires setting at least the following keys if
enable_cookieisTrue:secret(str): secret for JWT encryption. Use a strong phrase (e.g.openssl rand -hex 32)
Other defaults will also be set if not specified:
lifetime_seconds = 2592000
jwt_settings (dict) –
Dictionary of keyword arguments passed to
fastapi_users:fastapi_users.authentication.JWTAuthentication. See JWTAuthentication.Requires setting at least the following keys if
enable_jwtisTrue:secret(str): secret for cookie encryption. Use a strong phrase (e.g.openssl rand -hex 32)
Other defaults will also be set if not specified:
lifetime_seconds = 900 tokenUrl = auth/jwt/login
database (
msdss_base_database.core.Database) – Database to use for managing users.enable_cookie (bool) – Whether to enable cookie based authentication or not.
enable_jwt (bool) – Whether to enable JSON Web Token (JWT) based authentication or not.
cookie (
fastapi_users:fastapi_users.authentication.CookieAuthenticationor None) –A cookie authentication object from FastAPI Users. If
None, one will be created from parametercookie_settings. See CookieAuthentication.jwt (
fastapi_users:fastapi_users.authentication.JWTAuthenticationor None) –A JSON Web Token (JWT) authentication object from FastAPI Users. If
None, one will be created from parameterjwt_settings. See JWTAuthentication.Base (class) – Class returned from
sqlalchemy.orm.declarative_base().User (
msdss_users_api.models.User) – User model for FastAPI Users. Seemsdss_users_api.models.User.UserCreate (
msdss_users_api.models.UserCreate) – UserCreate model for FastAPI Users. Seemsdss_users_api.models.UserCreate.UserUpdate (
msdss_users_api.models.UserUpdate) – UserUpdate model for FastAPI Users. Seemsdss_users_api.models.UserUpdate.UserDB (
msdss_users_api.models.UserDB) – UserDB model for FastAPI Users. Seemsdss_users_api.models.UserDB.UserTable (
msdss_users_api.models.UserTable) – UserTable model for FastAPI Users. Seemsdss_users_api.models.UserTable.UserManager (
msdss_users_api.managers.UserManageror None) – UserManager model for FastAPI Users. Seemsdss_users_api.managers.UserManager. IfNone, one will be created usingmsdss_users_api.tools.create_user_manager()
- Returns
A dictionary containing the following:
FastAPIUsers(fastapi_users:fastapi_users.FastAPIUsers): configured FastAPI Users objectdatabases(dict): dictionary of database related objectsdatabase(msdss_base_database.core.Database): database object from parameterdatabasedatabase_engine(sqlalchemy.create_engine()): SQLAlchemy engine objectasync_database(databases:databases.Database): Async database object
dependencies(dict(func)): dictionary of dependenciesget_user_db(func): get_user_db function auto-configured - seemsdss_users_api.tools.create_user_db_func().get_user_manager(func): get_user_manager function auto-configured - see :func`msdss_users_api.tools.create_user_manager_func`.
models(dict): dictionary of modelsUser(msdss_users_api.models.User): see parameterUserUserCreate(msdss_users_api.models.UserCreate): see parameterUserCreateUserUpdate(msdss_users_api.models.UserUpdate): see parameterUserUpdateUserDB(msdss_users_api.models.UserDB): see parameterUserDBUserTable(msdss_users_api.models.UserTable): see parameterUserTableUserManager(msdss_users_api.managers.UserManager): see parameterUserManager
auth(dict): dictionary of auth related objectsjwt(fastapi_users:fastapi_users.authentication.JWTAuthentication): see parameterjwtcookie(fastapi_users:fastapi_users.authentication.CookieAuthentication): see parametercookie
- Return type
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Setup user manager secrets user_manager_settings = dict( reset_password_token_secret='reset-secret', # CHANGE TO STRONG PHRASE verification_token_secret='verify-secret' # CHANGE TO STRONG PHRASE ) # Setup jwt and cookie secret jwt_settings = dict(secret='jwt-secret') # CHANGE TO STRONG PHRASE cookie_settings = dict(secret='cookie-secret') # CHANGE TO STRONG PHRASE # Create FastAPI Users object fastapi_users_objects = create_fastapi_users_objects( user_manager_settings=user_manager_settings, jwt_settings=jwt_settings, cookie_settings=cookie_settings ) # Get FastAPI Users Object fastapi_users = fastapi_users_objects['FastAPIUsers']
create_user_db_context¶
- msdss_users_api.tools.create_user_db_context(database=<msdss_base_database.core.Database object>, *args, **kwargs)[source]¶
Create a context manager for an auto-configured
msdss_users_api.tools.create_user_db_func()function.- Parameters
database (
msdss_base_database.core.Database) – Database to use for managing users.*args – Additional arguments passed to
msdss_users_api.tools.create_user_db_func().**kwargs – Additional arguments passed to
msdss_users_api.tools.create_user_db_func().
- Returns
Returns a dictionary with the following keys:
get_user_db_context(contextlib.asynccontextmanager()): function returned fromcontextlib.asynccontextmanager()created from an auto-configuredmsdss_users_api.tools.create_user_db_func()functionget_user_db(func): user db function frommsdss_users_api.tools.create_user_db_func()async_database(databases:databases.Database): auto-configureddatabases:databases.Databasefrom env varsdatabase_engine(sqlalchemy.engine.Engine): auto-configuredsqlalchemy.engine.Enginefrom env vars
- Return type
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * results = create_user_db_context() get_user_db_context = results['get_user_db_context'] async_database = results['async_database']
create_user_db_func¶
- msdss_users_api.tools.create_user_db_func(database_engine, async_database=None, Base=<class 'sqlalchemy.orm.decl_api.Base'>, UserTable=<class 'msdss_users_api.models.UserTable'>, UserDB=<class 'msdss_users_api.models.UserDB'>)[source]¶
Create a function to return the the database adapter dependency.
See SQLAlchemy configuration for FastAPI Users,
- Parameters
database_engine (
sqlalchemy.create_engine()) – SQLAlchemy engine object.async_database (
databases:databases.Databaseor None) – Async database object fromdatabases. IfNone, one will be created from parameterdatabase_engine.Base (
sqlalchemy.orm.declarative_base()) – The base class from sqlalchemy. Seesqlalchemy.orm.declarative_base().UserTable (
msdss_users_api.models.UserTable) – The user table model to use for the database dependency. Seemsdss_users_api.models.UserTable.UserDB (
msdss_users_api.models.UserDB) – The user database model for the database dependency. Seemsdss_users_api.models.UserDB.
- Returns
A function yielding a
fastapi_users:fastapi_users.db.SQLAlchemyUserDatabase.- Return type
func
Author
Richard Wen <rrwen.dev@gmail.com>
Example
import databases from msdss_base_database import Database from msdss_users_api.tools import create_user_db_func # Create a database object db = Database()._connection # Get the user db func get_user_db = create_user_db_func(db)
create_user_manager¶
- msdss_users_api.tools.create_user_manager(reset_password_token_secret, verification_token_secret, __base__=<class 'msdss_users_api.managers.UserManager'>, *args, **kwargs)[source]¶
Create a function to return the the user manager class.
See UserManager configuration for FastAPI Users,
- Parameters
reset_password_token_secret (str) – Secret to use for reset password token encryption.
verification_token_secret (str) – Secret to use for verification tokens encryption.
__base__ (
msdss_users_api.managers.UserManager) – The base user manager model from FastAPI Users. Seemsdss_users_api.managers.UserManager.*args – Additional arguments passed to
pydantic:pydantic.create_model(). See pydantic dynamic model creation.**kwargs –
Additional arguments passed to
pydantic:pydantic.create_model(). See pydantic dynamic model creation.
- Returns
A configured
msdss_users_api.managers.UserManager.- Return type
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import create_user_manager UserManager = create_user_manager('msdss-reset-secret', 'msdss-verify-secret')
create_user_manager_context¶
- msdss_users_api.tools.create_user_manager_context(get_user_db, user_manager_settings={}, UserManager=None, load_env=True, env=<msdss_users_api.env.UsersDotEnv object>)[source]¶
Create a context manager for an auto-configured
msdss_users_api.tools.create_user_manager_func()function.- Parameters
get_user_db (func) – Function for the user database dependency. See
msdss_users_api.tools.create_user_db_func().user_manager_settings (dict) –
Keyword arguments passed to
msdss_users_api.tools.create_user_manager()Requires at least the following parameters:
reset_password_token_secret(str): secret used to secure password reset tokens- use a strong phrase (e.g.openssl rand -hex 32)verification_token_secret(str): secret used to secure verification tokens - use a strong phrase (e.g.openssl rand -hex 32)
UserManager (
msdss_users_api.managers.UserManageror None) – The user manager model from FastAPI Users. Seemsdss_users_api.managers.UserManagerandmsdss_users_api.tools.create_user_manager(). IfNone, one will be created fromuser_manager_settings.load_env (bool) – Whether to load variables from a file with environmental variables at
env_fileor not.env (
msdss_users_api.env.UsersDotEnv) – Object to load environment variables from. If theenv_fileand variable exists, it will overwrite parametersreset_password_tokenandverification_token_secret.
- Returns
Function returned from
contextlib.asynccontextmanager()created from an auto-configuredmsdss_users_api.tools.create_user_manager_func()function.- Return type
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Create a database object db = Database()._connection # Get the user db func get_user_db = create_user_db_func(db) # Create user manager secrets user_manager_settings = dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) # Get user manager context get_user_manager_context = create_user_manager_context( get_user_db, user_manager_settings=user_manager_settings )
create_user_manager_func¶
- msdss_users_api.tools.create_user_manager_func(get_user_db, UserManager=<class 'msdss_users_api.managers.UserManager'>)[source]¶
Create a function to return the the user manager class.
See UserManager configuration for FastAPI Users,
- Parameters
get_user_db (func) – Function for the user database dependency. See
msdss_users_api.tools.create_user_db_func().UserManager (
msdss_users_api.managers.UserManager) – The user manager model from FastAPI Users. Seemsdss_users_api.managers.UserManager.
- Returns
A function yielding a configured
msdss_users_api.managers.UserManager.- Return type
func
Author
Richard Wen <rrwen.dev@gmail.com>
Example
import databases from msdss_base_database import Database from msdss_users_api.tools import * # Create a database object db = Database()._connection # Get the user db func get_user_db = create_user_db_func(db) # Create a user manager model UserManager = create_user_manager('msdss-reset-secret', 'msdss-verify-secret') # Get the user manager func get_user_manager = create_user_manager_func(get_user_db, UserManager)
delete_user¶
- async msdss_users_api.tools.delete_user(email, user_db_context_kwargs={}, user_manager_context_kwargs={})[source]¶
Delete a user.
- Parameters
email (str) – Email for the user.
user_db_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_db_context.user_manager_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_manager_context.
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Create user manager secrets kwargs = dict( user_manager_settings=dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) ) # Del users await delete_user('test@example.com', user_manager_context_kwargs=kwargs) await register_user('test@example.com', 'msdss123', user_manager_context_kwargs=kwargs) await delete_user('test@example.com', user_manager_context_kwargs=kwargs)
User test@example.com does not exist
User created test@example.com User deleted test@example.com
get_user¶
- async msdss_users_api.tools.get_user(email, show=False, include_hashed_password=False, user_db_context_kwargs={}, user_manager_context_kwargs={})[source]¶
Get attributes for a user.
- Parameters
email (str) – Email for the user.
show (bool) – Whether to print user attributes or not.
include_hashed_password (bool) – Whether to include the
hashed_passwordattribute.user_db_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_db_context.user_manager_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_manager_context.
Author
Richard Wen <rrwen.dev@gmail.com>
- Returns
A user model with attributes for the specified user with
email.- Return type
msdss_users.models.User
Example
from msdss_users_api.tools import register_user, get_user # Create user manager secrets kwargs = dict( user_manager_settings=dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) ) # Try to delete user await delete_user('test@example.com', user_manager_context_kwargs=kwargs) # Get user await register_user('test@example.com', 'msdss123', user_manager_context_kwargs=kwargs) user = await get_user('test@example.com', show=True, user_manager_context_kwargs=kwargs) await delete_user('test@example.com', user_manager_context_kwargs=kwargs)
User test@example.com does not exist
User created test@example.com id: a07f41b3-ca23-425f-a848-1219e439d9b3 email: test@example.com is_active: True is_superuser: False is_verified: False User deleted test@example.com
register_user¶
- async msdss_users_api.tools.register_user(email, password, superuser=False, user_db_context_kwargs={}, user_manager_context_kwargs={}, *args, **kwargs)[source]¶
Register a user.
- Parameters
email (str) – Email for the user.
password (str) – Password for the user.
superuser (bool) – Whether the user is a superuser or not.
user_db_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_db_context.user_manager_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_manager_context.*args – Additional arguments passed to
msdss_users_api.models.UserCreate.**kwargs – Additional arguments passed to
msdss_users_api.models.UserCreate.
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Create user manager secrets kwargs = dict( user_manager_settings=dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) ) # Try to delete user await delete_user('test@example.com', user_manager_context_kwargs=kwargs) # Register user await register_user('test@example.com', 'msdss123', user_manager_context_kwargs=kwargs) await delete_user('test@example.com', user_manager_context_kwargs=kwargs)
User test@example.com does not exist
User created test@example.com User deleted test@example.com
reset_user_password¶
- async msdss_users_api.tools.reset_user_password(email, password, user_db_context_kwargs={}, user_manager_context_kwargs={})[source]¶
Reset password for a user.
- Parameters
email (str) – Email for the user.
password (str) – New password for the user.
user_db_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_db_context.user_manager_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_manager_context.
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Create user manager secrets kwargs = dict( user_manager_settings=dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) ) # Try to delete user await delete_user('test@example.com', user_manager_context_kwargs=kwargs) # Reset user await register_user('test@example.com', 'msdss123', user_manager_context_kwargs=kwargs) await reset_user_password('test@example.com', 'msdss321', user_manager_context_kwargs=kwargs) await delete_user('test@example.com', user_manager_context_kwargs=kwargs)
User test@example.com does not exist
User created test@example.com
User password reset test@example.com User deleted test@example.com
update_user¶
- async msdss_users_api.tools.update_user(email, user_db_context_kwargs={}, user_manager_context_kwargs={}, *args, **kwargs)[source]¶
Update a user.
- Parameters
email (str) – Email for the user.
user_db_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_db_context.user_manager_context_kwargs (dict) – Arguments passed to
msdss_users_api.tools.create_user_manager_context.*args – Additional arguments passed to
msdss_users_api.models.UserUpdate.**kwargs – Additional arguments passed to
msdss_users_api.models.UserUpdate.
Author
Richard Wen <rrwen.dev@gmail.com>
Example
from msdss_users_api.tools import * # Create user manager secrets kwargs = dict( user_manager_settings=dict( reset_password_token_secret='reset-secret', verification_token_secret='verification-secret' ) ) # Try to delete user await delete_user('test@example.com', user_manager_context_kwargs=kwargs) # Create a test user await register_user('test@example.com', 'msdss123', user_manager_context_kwargs=kwargs) print('\nbefore_update:\n') user = await get_user('test@example.com', show=True, user_manager_context_kwargs=kwargs) # Update the test user await update_user('test@example.com', is_verified=True, user_manager_context_kwargs=kwargs) print('\nafter_update:\n') user = await get_user('test@example.com', show=True, user_manager_context_kwargs=kwargs) await delete_user('test@example.com', user_manager_context_kwargs=kwargs)
User test@example.com does not exist
User created test@example.com before_update: id: 3c7d0dac-bebe-4115-a889-ae824419e69b email: test@example.com is_active: True is_superuser: False is_verified: False User updated test@example.com after_update: id: 3c7d0dac-bebe-4115-a889-ae824419e69b email: test@example.com is_active: True is_superuser: False is_verified: True User deleted test@example.com