LICENSE
README.md
pyproject.toml
src/unifi_topology/__init__.py
src/unifi_topology/paths.py
src/unifi_topology/py.typed
src/unifi_topology.egg-info/PKG-INFO
src/unifi_topology.egg-info/SOURCES.txt
src/unifi_topology.egg-info/dependency_links.txt
src/unifi_topology.egg-info/requires.txt
src/unifi_topology.egg-info/top_level.txt
src/unifi_topology/adapters/__init__.py
src/unifi_topology/adapters/_cache.py
src/unifi_topology/adapters/_cache_serialize.py
src/unifi_topology/adapters/_cache_store.py
src/unifi_topology/adapters/_fetch.py
src/unifi_topology/adapters/_retry.py
src/unifi_topology/adapters/config.py
src/unifi_topology/adapters/dns.py
src/unifi_topology/adapters/unifi.py
src/unifi_topology/adapters/unifi_api.py
src/unifi_topology/assets/__init__.py
src/unifi_topology/assets/models.json
src/unifi_topology/assets/specs_overrides.json
src/unifi_topology/assets/fonts/INTER_LICENSE
src/unifi_topology/assets/fonts/SPACE_GROTESK_LICENSE
src/unifi_topology/assets/fonts/inter-regular.woff2
src/unifi_topology/assets/fonts/inter-semibold.woff2
src/unifi_topology/assets/fonts/space-grotesk-regular.woff2
src/unifi_topology/assets/fonts/space-grotesk-semibold.woff2
src/unifi_topology/assets/icons/__init__.py
src/unifi_topology/assets/icons/access-point.svg
src/unifi_topology/assets/icons/laptop.svg
src/unifi_topology/assets/icons/router-network.svg
src/unifi_topology/assets/icons/server-network.svg
src/unifi_topology/assets/icons/server.svg
src/unifi_topology/assets/icons/isometric/ISOPACKS_LICENSE
src/unifi_topology/assets/icons/isometric/block.svg
src/unifi_topology/assets/icons/isometric/cache.svg
src/unifi_topology/assets/icons/isometric/cardterminal.svg
src/unifi_topology/assets/icons/isometric/cloud.svg
src/unifi_topology/assets/icons/isometric/cronjob.svg
src/unifi_topology/assets/icons/isometric/cube.svg
src/unifi_topology/assets/icons/isometric/desktop.svg
src/unifi_topology/assets/icons/isometric/diamond.svg
src/unifi_topology/assets/icons/isometric/dns.svg
src/unifi_topology/assets/icons/isometric/document.svg
src/unifi_topology/assets/icons/isometric/firewall.svg
src/unifi_topology/assets/icons/isometric/function-module.svg
src/unifi_topology/assets/icons/isometric/image.svg
src/unifi_topology/assets/icons/isometric/laptop.svg
src/unifi_topology/assets/icons/isometric/loadbalancer.svg
src/unifi_topology/assets/icons/isometric/lock.svg
src/unifi_topology/assets/icons/isometric/mail.svg
src/unifi_topology/assets/icons/isometric/mailmultiple.svg
src/unifi_topology/assets/icons/isometric/mobiledevice.svg
src/unifi_topology/assets/icons/isometric/office.svg
src/unifi_topology/assets/icons/isometric/package-module.svg
src/unifi_topology/assets/icons/isometric/paymentcard.svg
src/unifi_topology/assets/icons/isometric/plane.svg
src/unifi_topology/assets/icons/isometric/pyramid.svg
src/unifi_topology/assets/icons/isometric/queue.svg
src/unifi_topology/assets/icons/isometric/router.svg
src/unifi_topology/assets/icons/isometric/server.svg
src/unifi_topology/assets/icons/isometric/speech.svg
src/unifi_topology/assets/icons/isometric/sphere.svg
src/unifi_topology/assets/icons/isometric/storage.svg
src/unifi_topology/assets/icons/isometric/switch-module.svg
src/unifi_topology/assets/icons/isometric/tower.svg
src/unifi_topology/assets/icons/isometric/truck-2.svg
src/unifi_topology/assets/icons/isometric/truck.svg
src/unifi_topology/assets/icons/isometric/user.svg
src/unifi_topology/assets/icons/isometric/vm.svg
src/unifi_topology/assets/icons/modern/ap.svg
src/unifi_topology/assets/icons/modern/camera.svg
src/unifi_topology/assets/icons/modern/client.svg
src/unifi_topology/assets/icons/modern/game_console.svg
src/unifi_topology/assets/icons/modern/gateway.svg
src/unifi_topology/assets/icons/modern/iot.svg
src/unifi_topology/assets/icons/modern/nas.svg
src/unifi_topology/assets/icons/modern/other.svg
src/unifi_topology/assets/icons/modern/phone.svg
src/unifi_topology/assets/icons/modern/printer.svg
src/unifi_topology/assets/icons/modern/speaker.svg
src/unifi_topology/assets/icons/modern/switch.svg
src/unifi_topology/assets/icons/modern/tv.svg
src/unifi_topology/assets/icons/modern-flat/ap.svg
src/unifi_topology/assets/icons/modern-flat/camera.svg
src/unifi_topology/assets/icons/modern-flat/client.svg
src/unifi_topology/assets/icons/modern-flat/game_console.svg
src/unifi_topology/assets/icons/modern-flat/gateway.svg
src/unifi_topology/assets/icons/modern-flat/iot.svg
src/unifi_topology/assets/icons/modern-flat/nas.svg
src/unifi_topology/assets/icons/modern-flat/other.svg
src/unifi_topology/assets/icons/modern-flat/phone.svg
src/unifi_topology/assets/icons/modern-flat/printer.svg
src/unifi_topology/assets/icons/modern-flat/speaker.svg
src/unifi_topology/assets/icons/modern-flat/switch.svg
src/unifi_topology/assets/icons/modern-flat/tv.svg
src/unifi_topology/assets/themes/dark.yaml
src/unifi_topology/assets/themes/default.yaml
src/unifi_topology/assets/themes/minimal-dark.yaml
src/unifi_topology/assets/themes/minimal.yaml
src/unifi_topology/assets/themes/unifi-dark.yaml
src/unifi_topology/assets/themes/unifi.yaml
src/unifi_topology/model/__init__.py
src/unifi_topology/model/_classify_client.py
src/unifi_topology/model/_classify_device.py
src/unifi_topology/model/_client_access.py
src/unifi_topology/model/_edge_build.py
src/unifi_topology/model/_edge_discovery.py
src/unifi_topology/model/_edge_ports.py
src/unifi_topology/model/_firewall_nested.py
src/unifi_topology/model/_firewall_policy_coerce.py
src/unifi_topology/model/_raw.py
src/unifi_topology/model/_topology_device_coerce.py
src/unifi_topology/model/_topology_port_coerce.py
src/unifi_topology/model/_topology_types.py
src/unifi_topology/model/classify.py
src/unifi_topology/model/clients.py
src/unifi_topology/model/connection.py
src/unifi_topology/model/device_stats.py
src/unifi_topology/model/device_stats_coerce.py
src/unifi_topology/model/diff.py
src/unifi_topology/model/edges.py
src/unifi_topology/model/firewall.py
src/unifi_topology/model/firewall_coerce.py
src/unifi_topology/model/helpers.py
src/unifi_topology/model/inventory.py
src/unifi_topology/model/labels.py
src/unifi_topology/model/lldp.py
src/unifi_topology/model/mock.py
src/unifi_topology/model/model_lookup.py
src/unifi_topology/model/ports.py
src/unifi_topology/model/snapshot.py
src/unifi_topology/model/topology.py
src/unifi_topology/model/topology_coerce.py
src/unifi_topology/model/vlans.py
src/unifi_topology/model/vpn.py
src/unifi_topology/model/wan.py
src/unifi_topology/render/__init__.py
src/unifi_topology/render/_device_ports_aggregate.py
src/unifi_topology/render/_device_summary.py
src/unifi_topology/render/_markdown_connections.py
src/unifi_topology/render/_markdown_port_format.py
src/unifi_topology/render/_markdown_tables.py
src/unifi_topology/render/_svg_dual_render.py
src/unifi_topology/render/_svg_edge_labels.py
src/unifi_topology/render/_svg_edge_labels_record.py
src/unifi_topology/render/_svg_edge_shared.py
src/unifi_topology/render/_svg_gateway_labels.py
src/unifi_topology/render/_svg_group_layout.py
src/unifi_topology/render/_svg_iso_edge_draw.py
src/unifi_topology/render/_svg_iso_edge_labels.py
src/unifi_topology/render/_svg_iso_group_boundaries.py
src/unifi_topology/render/_svg_iso_layout.py
src/unifi_topology/render/_svg_iso_node_render.py
src/unifi_topology/render/_svg_iso_overlays.py
src/unifi_topology/render/_svg_iso_wan_overlay.py
src/unifi_topology/render/_svg_node_attrs.py
src/unifi_topology/render/_svg_render_common.py
src/unifi_topology/render/_svg_render_flow.py
src/unifi_topology/render/_svg_tree_layout.py
src/unifi_topology/render/_templating.py
src/unifi_topology/render/inventory.py
src/unifi_topology/render/lldp.py
src/unifi_topology/render/markdown.py
src/unifi_topology/render/mermaid.py
src/unifi_topology/render/mermaid_theme.py
src/unifi_topology/render/svg.py
src/unifi_topology/render/svg_edges.py
src/unifi_topology/render/svg_icons.py
src/unifi_topology/render/svg_iso_edges.py
src/unifi_topology/render/svg_iso_geometry.py
src/unifi_topology/render/svg_iso_nodes.py
src/unifi_topology/render/svg_isometric.py
src/unifi_topology/render/svg_labels.py
src/unifi_topology/render/svg_layout.py
src/unifi_topology/render/svg_theme.py
src/unifi_topology/render/svg_vpn.py
src/unifi_topology/render/svg_wan.py
src/unifi_topology/render/theme.py
src/unifi_topology/render/templates/device_port_block.md.j2
src/unifi_topology/render/templates/legend_compact.html.j2
src/unifi_topology/render/templates/lldp_device_section.md.j2
src/unifi_topology/render/templates/markdown_section.md.j2
src/unifi_topology/render/templates/mermaid_legend.mmd.j2
tests/test_classify_client_type_paths.py
tests/test_classify_device_paths.py
tests/test_classify_unifi_signals.py
tests/test_client_connection_info_behavior.py
tests/test_client_edges_core_behavior.py
tests/test_client_edges_coverage.py
tests/test_client_edges_unifi_behavior.py
tests/test_client_inventory_basic.py
tests/test_client_inventory_enrichment.py
tests/test_client_node_type_map_coverage.py
tests/test_client_node_types_behavior.py
tests/test_client_port_map_coverage.py
tests/test_client_properties_coverage.py
tests/test_config.py
tests/test_connection.py
tests/test_contract_unifi.py
tests/test_contract_unifi_live.py
tests/test_device_inventory.py
tests/test_device_public_ip_coerce.py
tests/test_device_stats_coerce_helpers.py
tests/test_device_stats_models.py
tests/test_device_stats_normalize_basics.py
tests/test_device_stats_normalize_metrics.py
tests/test_device_stats_normalize_models.py
tests/test_device_summary_render.py
tests/test_diff_change_event_api.py
tests/test_diff_client_connection_descriptions.py
tests/test_diff_client_property_descriptions.py
tests/test_diff_compare_clients_edges.py
tests/test_diff_compare_devices.py
tests/test_diff_container_filtering.py
tests/test_diff_container_serialization.py
tests/test_diff_device_descriptions.py
tests/test_diff_edge_descriptions.py
tests/test_diff_serialization_roundtrip.py
tests/test_dns_resolution_results.py
tests/test_dns_resolver_config.py
tests/test_edge_device_grouping.py
tests/test_edge_link_discovery.py
tests/test_edge_node_vlan_grouping.py
tests/test_edge_port_maps.py
tests/test_edge_port_matching.py
tests/test_edge_tree_topology.py
tests/test_edge_uplink_link_build_edges.py
tests/test_edge_uplink_link_helper.py
tests/test_edge_uplink_names.py
tests/test_edge_vlan_enrichment.py
tests/test_firewall.py
tests/test_firewall_api_endpoints.py
tests/test_firewall_api_v2.py
tests/test_firewall_coerce_groups.py
tests/test_firewall_coerce_policy_basic_fields.py
tests/test_firewall_coerce_policy_metadata_defaults.py
tests/test_firewall_coerce_policy_metadata_fields.py
tests/test_firewall_coerce_policy_nested_endpoint_selectors.py
tests/test_firewall_coerce_policy_nested_full_v2.py
tests/test_firewall_coerce_policy_nested_source_fields.py
tests/test_firewall_coerce_policy_nested_zones.py
tests/test_firewall_coerce_zones.py
tests/test_helpers.py
tests/test_inventory_firmware_helpers.py
tests/test_inventory_table.py
tests/test_labels.py
tests/test_lldp.py
tests/test_lldp_render.py
tests/test_markdown_render.py
tests/test_mermaid_render.py
tests/test_mermaid_theme.py
tests/test_model_init.py
tests/test_model_lookup.py
tests/test_parse_specs.py
tests/test_path_env_cache_resolvers.py
tests/test_path_extension_guards.py
tests/test_path_input_theme_resolvers.py
tests/test_path_root_symlink_guards.py
tests/test_public_api_exports_contract.py
tests/test_public_api_readme_contract.py
tests/test_raw.py
tests/test_render_dual_outputs.py
tests/test_render_dual_vlan.py
tests/test_snapshot_clients.py
tests/test_snapshot_connection_info.py
tests/test_snapshot_device_objects.py
tests/test_snapshot_edge_objects.py
tests/test_snapshot_lldp_wan_structs.py
tests/test_snapshot_port_uplink_structs.py
tests/test_snapshot_serialize_value.py
tests/test_svg_group_boundaries_orthogonal.py
tests/test_svg_group_layout_helpers.py
tests/test_svg_group_layout_orthogonal.py
tests/test_svg_group_rendering_isometric.py
tests/test_svg_icon_decal_styles.py
tests/test_svg_icon_loading_basic.py
tests/test_svg_icon_loading_fallbacks.py
tests/test_svg_iso_basics.py
tests/test_svg_iso_label_text.py
tests/test_svg_label_parsing.py
tests/test_svg_labels_helpers.py
tests/test_svg_node_iso_advanced.py
tests/test_svg_port_label_layout_helpers.py
tests/test_svg_render_isometric_core.py
tests/test_svg_render_isometric_labels.py
tests/test_svg_render_orthogonal_core.py
tests/test_svg_render_orthogonal_labels.py
tests/test_svg_text_layout_helpers.py
tests/test_svg_theme_font_styles.py
tests/test_svg_theme_render_integration.py
tests/test_svg_vlan_edge_attrs.py
tests/test_svg_vlan_edge_rendering.py
tests/test_svg_vpn_render_isometric.py
tests/test_svg_vpn_render_orthogonal.py
tests/test_svg_wan_label_lines.py
tests/test_svg_wan_upstream_advanced.py
tests/test_templating.py
tests/test_theme_coercion.py
tests/test_theme_file_loading.py
tests/test_theme_resolution.py
tests/test_topology_client_builder_helpers_compat.py
tests/test_topology_client_classify_name_compat.py
tests/test_topology_client_classify_unifi_compat.py
tests/test_topology_client_low_level_helpers_compat.py
tests/test_topology_coerce_device_helpers_compat.py
tests/test_topology_coerce_device_lldp_compat.py
tests/test_topology_coerce_device_validation_compat.py
tests/test_topology_coerce_scalar_compat.py
tests/test_topology_device_normalization.py
tests/test_topology_diff_method.py
tests/test_topology_edge_discovery_basic_compat.py
tests/test_topology_edge_poe_attrs_compat.py
tests/test_topology_edge_port_idx_compat.py
tests/test_topology_edge_port_labels_compat.py
tests/test_topology_edge_tree_compat.py
tests/test_topology_edge_uplink_fallback_fixture_compat.py
tests/test_topology_edge_uplink_name_speed_compat.py
tests/test_topology_edge_uplink_unknown_compat.py
tests/test_topology_numeric_helpers.py
tests/test_topology_port_info_helpers.py
tests/test_topology_uplink_helpers.py
tests/test_topology_vlan_helpers.py
tests/test_unifi_api_auth_failures.py
tests/test_unifi_api_auth_success.py
tests/test_unifi_api_fetch_endpoints.py
tests/test_unifi_api_fetch_errors.py
tests/test_unifi_api_key_auth.py
tests/test_unifi_api_policy_writes.py
tests/test_unifi_api_put_v2.py
tests/test_unifi_cache_eviction_coverage.py
tests/test_unifi_cache_invalidation.py
tests/test_unifi_cache_payloads.py
tests/test_unifi_cache_safety_coverage.py
tests/test_unifi_cache_serialization.py
tests/test_unifi_cache_serialization_coverage.py
tests/test_unifi_client_cache.py
tests/test_unifi_device_stats_cache.py
tests/test_unifi_fetch_auth_fallback.py
tests/test_unifi_fetch_auth_rate_limit.py
tests/test_unifi_fetch_cache_behavior.py
tests/test_unifi_fetch_cache_safety.py
tests/test_unifi_fetch_cached_hits.py
tests/test_unifi_fetch_cached_serialization.py
tests/test_unifi_fetch_device_stats_behavior.py
tests/test_unifi_fetch_retry_behavior.py
tests/test_unifi_fetch_wrapper_clients_networks.py
tests/test_unifi_fetch_wrapper_payload.py
tests/test_unifi_swap_firewall_policy_order.py
tests/test_unifi_toggle_firewall_policy.py
tests/test_unifi_wrapper_coverage.py
tests/test_vlan_build_info.py
tests/test_vlan_info.py
tests/test_vlan_name_maps.py
tests/test_vlan_normalize_networks.py
tests/test_vlan_wan_enabled_map.py
tests/test_vpn_extract_basic.py
tests/test_vpn_extract_tunnel_states.py
tests/test_wan_assignment_helpers_compat.py
tests/test_wan_extract_assignment_compat.py
tests/test_wan_extract_wan2_state_compat.py
tests/test_wan_public_ip.py
tests/test_wan_speed_helpers_compat.py