Coverage for src/auth/plugin.py: 38%

34 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-26 17:11 +0300

1import click 

2from click import Group 

3from litestar.plugins import CLIPlugin 

4from core.cli import coro 

5from core.database import session_maker 

6from core.mail import MailClient 

7from core.settings import settings 

8from pathlib import Path 

9import yaml 

10from .services import provide_user_service, provide_role_service, provide_permission_service 

11from .loaders import AuthLoader 

12 

13 

14class AuthPlugin(CLIPlugin): 

15 def on_cli_init(self, cli: Group) -> None: 

16 @cli.group(help="Manage auth, load data with ``load`` command") 

17 @click.version_option(prog_name="auth") 

18 def auth(): ... 

19 

20 @auth.command(help="load auth data") 

21 @coro 

22 async def load(): 

23 async with session_maker() as session: 

24 click.echo("Loading auth data... ") 

25 loader = AuthLoader( 

26 user_service=await provide_user_service(session), 

27 role_service=await provide_role_service(session), 

28 permission_service=await provide_permission_service(session), 

29 ) 

30 

31 with open(f"{Path(__file__).parent.resolve()}/fixtures.yaml") as f: 

32 data = yaml.safe_load(f) 

33 await loader.load(data) 

34 

35 @auth.command(help="load auth data") 

36 @coro 

37 async def clear(): 

38 async with session_maker() as session: 

39 user_service = await provide_user_service(session) 

40 await user_service.delete_where() 

41 click.echo("Clear auth data") 

42 

43 @auth.command(help="Send test mail") 

44 @click.argument("recipient") 

45 def send_mail(recipient): 

46 mail_controller = MailClient(settings.mail_config) 

47 mail_controller.send([recipient], "test", "test")