Skip to content

Commit b24c7f9

Browse files
committed
Migrate CLI for application to change group
1 parent fb604d7 commit b24c7f9

2 files changed

Lines changed: 105 additions & 0 deletions

File tree

brood/actions.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,16 @@ def kv_brood_as_json_dict(kv_brood: KVBrood) -> Dict[str, Any]:
312312
return kv_brood_json
313313

314314

315+
def application_as_json_dict(application: Application) -> Dict[str, Any]:
316+
application_json = {
317+
"id": str(application.id),
318+
"group_id": str(application.group_id),
319+
"name": application.name,
320+
"description": application.description,
321+
}
322+
return application_json
323+
324+
315325
def get_password_context() -> CryptContext:
316326
"""
317327
Generate a passlib context for Brood passwords.

brood/cli.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from . import actions
1111
from . import data
12+
from . import exceptions
1213
from . import subscriptions
1314
from .external import SessionLocal
1415
from .models import (
@@ -19,6 +20,7 @@
1920
Subscription,
2021
SubscriptionPlan,
2122
KVBrood,
23+
Application,
2224
)
2325

2426

@@ -622,6 +624,60 @@ def kv_delete_handler(args: argparse.Namespace) -> None:
622624
session.close()
623625

624626

627+
def applications_list_handler(args: argparse.Namespace) -> None:
628+
"""
629+
Handler for "applications list" command.
630+
"""
631+
session = SessionLocal()
632+
try:
633+
query = session.query(Application)
634+
if args.group is not None:
635+
query = query.filter(Application.group_id == args.group)
636+
637+
applications = query.all()
638+
639+
print(
640+
json.dumps(
641+
{
642+
"applications": [
643+
actions.application_as_json_dict(application)
644+
for application in applications
645+
]
646+
}
647+
)
648+
)
649+
finally:
650+
session.close()
651+
652+
653+
def application_create_handler(args: argparse.Namespace) -> None:
654+
session = SessionLocal()
655+
try:
656+
application = Application(
657+
group_id=args.group, name=args.name, description=args.description,
658+
)
659+
session.add(application)
660+
session.commit()
661+
print(json.dumps(actions.application_as_json_dict(application)))
662+
finally:
663+
session.close()
664+
665+
666+
def application_migrate_handler(args: argparse.Namespace) -> None:
667+
session = SessionLocal()
668+
try:
669+
query = session.query(Application).filter(Application.id == args.application)
670+
application = query.one_or_none()
671+
if application is None:
672+
raise exceptions.ApplicationsNotFound("Application not found")
673+
674+
query.update({Application.group_id: args.group})
675+
session.commit()
676+
print(json.dumps(actions.application_as_json_dict(application)))
677+
finally:
678+
session.close()
679+
680+
625681
def main() -> None:
626682
parser = argparse.ArgumentParser(description="Brood CLI")
627683
parser.set_defaults(func=lambda _: parser.print_help())
@@ -1071,6 +1127,45 @@ def main() -> None:
10711127
)
10721128
parser_kv_delete.set_defaults(func=kv_delete_handler)
10731129

1130+
# Applications command parser
1131+
parser_applications = subcommands.add_parser(
1132+
"applications", description="Brood applications"
1133+
)
1134+
parser_applications.set_defaults(func=lambda _: parser_applications.print_help())
1135+
subcommands_applications = parser_applications.add_subparsers(
1136+
description="Brood application commands"
1137+
)
1138+
parser_applications_list = subcommands_applications.add_parser(
1139+
"list", description="List all applications"
1140+
)
1141+
parser_applications_list.add_argument(
1142+
"-g", "--group", help="Filter applications by group ID"
1143+
)
1144+
parser_applications_list.set_defaults(func=applications_list_handler)
1145+
parser_applications_create = subcommands_applications.add_parser(
1146+
"create", description="Create new application"
1147+
)
1148+
parser_applications_create.add_argument(
1149+
"-g", "--group", required=True, help="Filter applications by group ID"
1150+
)
1151+
parser_applications_create.add_argument(
1152+
"-n", "--name", required=True, help="Name of application"
1153+
)
1154+
parser_applications_create.add_argument(
1155+
"-d", "--description", help="Description of application"
1156+
)
1157+
parser_applications_create.set_defaults(func=application_create_handler)
1158+
parser_applications_migrate = subcommands_applications.add_parser(
1159+
"migrate", description="Migrate application to another group"
1160+
)
1161+
parser_applications_migrate.add_argument(
1162+
"-a", "--application", required=True, help="Applications ID"
1163+
)
1164+
parser_applications_migrate.add_argument(
1165+
"-g", "--group", required=True, help="Group ID migrate to"
1166+
)
1167+
parser_applications_migrate.set_defaults(func=application_migrate_handler)
1168+
10741169
args = parser.parse_args()
10751170
args.func(args)
10761171

0 commit comments

Comments
 (0)