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_cookie
isTrue
: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_jwt
isTrue
: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.CookieAuthentication
or 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.JWTAuthentication
or 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.UserManager
or 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 parameterdatabase
database_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 parameterUser
UserCreate
(msdss_users_api.models.UserCreate
): see parameterUserCreate
UserUpdate
(msdss_users_api.models.UserUpdate
): see parameterUserUpdate
UserDB
(msdss_users_api.models.UserDB
): see parameterUserDB
UserTable
(msdss_users_api.models.UserTable
): see parameterUserTable
UserManager
(msdss_users_api.managers.UserManager
): see parameterUserManager
auth
(dict): dictionary of auth related objectsjwt
(fastapi_users:fastapi_users.authentication.JWTAuthentication
): see parameterjwt
cookie
(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.Database
from env varsdatabase_engine
(sqlalchemy.engine.Engine
): auto-configuredsqlalchemy.engine.Engine
from 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.Database
or 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.UserManager
or None) – The user manager model from FastAPI Users. Seemsdss_users_api.managers.UserManager
andmsdss_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_file
or not.env (
msdss_users_api.env.UsersDotEnv
) – Object to load environment variables from. If theenv_file
and variable exists, it will overwrite parametersreset_password_token
andverification_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_password
attribute.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