from rich.console import Console from rich.table import Table from app.config import PRE_SAVED_VENDORS, ALL_ORCHARD_LABELS_UUID from app.dtos import User, VendorStatus def build_users_data_table( users: list[User], users_permissions: dict = {}, feature_flags_treatments: dict = {}, highlights: dict = {} ): def check_mark(value) -> str: return " ✅︎ " if value else "[red]Х[/red]" def value_or_cross_mark(value=None) -> str: return value if value else "[red]Х[/red]" console = Console() table = Table() table.add_column("Name", style="cyan", no_wrap=True) table.add_column("Email", style="magenta") table.add_column("ID", style="magenta", no_wrap=True) table.add_column("AudienceProfile", justify="center") table.add_column("Vendors") table.add_column("PDP", justify="center") if feature_flags_treatments: table.add_column("Split FF", no_wrap=True) for user in users: if not user.exists: table.add_row( value_or_cross_mark(user.name), user.email or "User not exist", user.identity or "User not exist", value_or_cross_mark(), value_or_cross_mark(), value_or_cross_mark(), value_or_cross_mark(), ) table.add_section() continue user_permissions = users_permissions.get(user.identity) user_ff = feature_flags_treatments.get(user.identity) table.add_row( user.name, user.email, user.identity, check_mark(user.audience_profile), check_mark(user.vendors), check_mark(user_permissions), value_or_cross_mark("\n".join(user_ff) if user_ff else None) ) if user.vendors: for vendor in user.vendors: try: vendor_permissions = user_permissions.get(vendor.uuid) vendor_permissions = "\n".join([p.removeprefix("audience_development_").removeprefix("fansifter_can_") for p in vendor_permissions]) if vendor_permissions else None except: vendor_permissions = None if highlights.get("vendors") and vendor.uuid in highlights.get("vendors"): vendor_name = f"[green on blue] {vendor.name} [/]" elif vendor.status == VendorStatus.MISSING: vendor_name = f"[red] {vendor.name} [/]" elif vendor.status == VendorStatus.EMULATED: vendor_name = f"[black on orange3] {vendor.name} [/]" else: vendor_name = vendor.name table.add_row( "", "", "", "", vendor_name, value_or_cross_mark(vendor_permissions), ) table.add_section() console.print(table) def build_permissions_transition_table(users: list[User], users_permissions: dict, vendor_name: str, vendor_uuid: str) -> None: console = Console() console.print(f"[green]Permissions transition table for Vendor/Label {vendor_name}:[/green]") table = Table() table.add_column("Name", style="cyan", no_wrap=True) table.add_column("Email", style="magenta") table.add_column(" ") table.add_column("Old role") table.add_column("New role") for user in users: permissions = users_permissions.get(user.identity) try: vendor_permissions = permissions.get(vendor_uuid) vendor_permissions = ", ".join(vendor_permissions) if vendor_permissions else None except: vendor_permissions = None table.add_row( user.name, user.email, "->", vendor_permissions, user.role ) console.print(table) def show_pre_saved_vendors() -> None: console = Console() console.print("[green]Pre-Saved Vendors:[/green]") table = Table() table.add_column("Name", style="cyan", no_wrap=True) table.add_column("ID", style="magenta") table.add_column("UUID", style="magenta") for key, value in PRE_SAVED_VENDORS.items(): table.add_row(key, str(value["id"]), str(value["uuid"])) table.add_section() console = Console() console.print(table)