"""Password hashing example.""" from typing import Callable, Dict import passlib.hash from dependency_injector import containers, providers class UserService: def __init__(self, password_hasher: Callable[[str], str]) -> None: self._password_hasher = password_hasher def create_user(self, name: str, password: str) -> Dict[str, str]: hashed_password = self._password_hasher(password) return { 'name': name, 'password': hashed_password, } class Container(containers.DeclarativeContainer): config = providers.Configuration() password_hasher = providers.Callable( passlib.hash.sha256_crypt.hash, salt_size=config.salt_size, rounds=config.rounds, ) user_service = providers.Factory( UserService, password_hasher=password_hasher.provider, ) if __name__ == '__main__': container = Container( config={ 'salt_size': 16, 'rounds': 10000, }, ) user_service = container.user_service() user = user_service.create_user(name='Roman', password='secret1') print(user)