forward-netbox 2.2.3__tar.gz → 2.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/PKG-INFO +3 -2
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/README.md +2 -1
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/__init__.py +1 -1
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/jobs.py +35 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_analysis.nqe +3 -3
- forward_netbox-2.2.4/forward_netbox/tests/test_device_analysis_query.py +26 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/pyproject.toml +1 -1
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/LICENSE +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/api/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/api/serializers.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/api/urls.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/api/views.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/choices.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/exceptions.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/filtersets.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/forms.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_apic_cimc_readiness_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_apply_identity_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_blocker_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_collection_gap_alert.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_device_scope_reconciliation_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_link_vsys_parents.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_module_readiness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_primary_ip_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_pushdown_profile.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_query_diff_coverage_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_seed_ui_harness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_tag_delete_eligible.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/forward_validation_org_query_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0001_initial.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0002_add_coalesce_fields.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0003_forwardingestionissue_context_fields.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0004_forwardingestion_baseline_fields.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0005_validation_and_reporting.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0006_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0007_forwardingestion_persisted_change_counters.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0008_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0009_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0010_forwardvalidationrun_override_applied_and_more.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0011_forwardingestion_change_request_id.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0012_forwardnqemap_query_reference.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0013_execution_run_step.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0014_execution_step_fetch_scope.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0015_execution_step_apply_engine.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0016_execution_step_query_metrics.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0017_execution_step_row_counters.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0018_execution_run_reconciliation_events.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0019_forwardexecutionstep_query_parameters.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0020_execution_step_operation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0021_add_fhrpgroup_nqe_map_choice.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0022_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0023_split_ip_address_maps.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0024_forwarddeviceanalysis.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0025_device_analysis_netboxmodel.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0026_forwarddeviceanalysis_collection_result.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0027_alter_forwardexecutionrun_backend.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0028_remove_forwardexecutionstep_run_and_more.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0029_forward_parent_device_cf.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0030_forwarddeviceanalysis_cve_ids.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/models.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/navigation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_apic_cimc_inventory.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_apic_nodes.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_app_profiles.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_bridge_domains.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_command_inventory.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_contracts.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_endpoint_groups.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_fabrics.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_filters.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_l3outs.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_nodes.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_pods.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_static_port_bindings.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_tenants.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_vrfs.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_bgp_address_families.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_bgp_peer_address_families.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_bgp_peers.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_feature_tags.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_feature_tags_with_rules.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_models.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_models_with_netbox_aliases.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_types.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_vendors.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_devices.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_devices_with_netbox_aliases.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_hsrp_groups.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_inferred_interface_cables.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_interfaces.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_inventory_items.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ip_addresses_ipv4.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ip_addresses_ipv6.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ip_addresses_unassignable_diagnostics.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_locations.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_mac_addresses.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_modules.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ospf_areas.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ospf_instances.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ospf_interfaces.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_peering_sessions.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_platforms.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_prefixes_ipv4.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_prefixes_ipv6.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_routing_import_diagnostics.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_virtual_chassis.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_vlans.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_vrfs.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/netbox_utilities.nqe +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/signals.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/static/forward_netbox/img/fn-logo.svg +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tables.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/template_content.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwarddriftpolicy.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardingestion.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardnqemap.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsource.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync_dependency_preview.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync_drift_report.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync_health.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync_module_readiness.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardsync_scope_reconciliation.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/forwardvalidationrun.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/brand_bar.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/device_analysis_panel.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/diff.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/execution_insights.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/logs_pending.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/merge_form.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/validation_force_allow_form.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/change_explainability.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/ingestion_all.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/ingestion_merge_button.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/ingestion_progress.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/ingestion_statistics.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/ingestion_status.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/job_logs.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/object_tabs.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/stage_switcher_buttons.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/partials/validation_force_allow_button.html +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templatetags/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templatetags/forward_netbox_helpers.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/fixtures/aci_command_inventory_expected.json +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/fixtures/aci_discovery_expected.json +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/scenarios.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_api_usage.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_api_views.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_apic_cimc_readiness_audit_command.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_apply_engine.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_apply_identity_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_branching.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_brand_bar.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_bulk_adapter_parity.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_bulk_merge.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_bulk_merge_scale.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_device_scope_reconciliation_audit_command.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_device_scope_tagging.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_execution_insights_delete_label.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_forms.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_forward_api.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_health.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_ingestion_merge.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_interface_naming.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_ip_address_dedup_query.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_ipaddress_dup_global.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_issue_rendering.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_job_compat.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_job_liveness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_jobs.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_log_export.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_logging.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_models.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_module_readiness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_module_readiness_rollup.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_plugin_integrations.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_primary_ip.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_primary_ip_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_primary_ip_integration.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_query_binding.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_query_diff_coverage_audit_command.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_query_registry.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_release_readiness_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_runtime_dependency_check.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_scope_matched_tags.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_scope_module_ui.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sensitive_content.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_stability_hardening.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync_aci.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync_facade.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync_orchestration.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync_runner_contracts.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_sync_state.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_synthetic_scenarios.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_validation_org_query_audit_command.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_vsys_parent.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/urls.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/api_usage.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/apply_engine.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/apply_engine_bulk.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/apply_engine_decision.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/apply_identity_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/branch_budget.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/branching.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/bulk_merge.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/change_explainability.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/density_learning.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/device_analysis.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/direct_changes.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/drift_report.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/execution_ledger.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/execution_telemetry.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/fast_bootstrap_executor.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/fetch_artifacts.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/forward_api.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/forward_api_impl.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/health.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/health_apply_fetch.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/health_checks.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/health_summary_blocks.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/ingestion_issues.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/ingestion_merge.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/ingestion_presentation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/interface_naming.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/job_compat.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/job_liveness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/json_safe.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/logging.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/merge.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/model_contracts.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/model_validation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/module_readiness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/multi_branch_lifecycle.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/plugin_integrations/__init__.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/plugin_integrations/registry.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/primary_ip.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/primary_ip_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_binding.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_binding_resolution.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_diagnostics.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_fetch.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_fetch_execution.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/query_registry.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/runtime_guidance.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/scope_reconciliation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sensitive_content.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/single_branch_executor.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/snapshot_freshness.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/support_bundle_archive.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_aci.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_cable.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_contracts.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_core_models.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_device.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_events.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_execution.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_facade.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_interface.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_inventory_module.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_ipam.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_orchestration.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_primitives.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_reporting.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_routing.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_routing_impl.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_runner_adapters.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_runner_contracts.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/sync_state.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/validation.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/validation_org_query.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/utilities/vsys_parent.py +0 -0
- {forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/views.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forward-netbox
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.4
|
|
4
4
|
Summary: NetBox plugin to sync Forward data into NetBox via built-in NQE queries
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -31,7 +31,8 @@ Forward 26.6 is the baseline for async NQE.
|
|
|
31
31
|
|
|
32
32
|
| Plugin Release | NetBox Version | Status |
|
|
33
33
|
| --- | --- | --- |
|
|
34
|
-
| `v2.2.
|
|
34
|
+
| `v2.2.4` | `4.6.3` required; needs netbox-branching `1.1.0+` | Current release; Hotfix: device-analysis NQE (bare foreach) errored refresh + CVE list; surface job errors into job.data |
|
|
35
|
+
| `v2.2.3` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.4`; Field-feedback fixes: delete-count labeling, vsys/vdom auto-link, skip empty VRFs, per-device CVE list, churn pinpoint, query-ID status clarify |
|
|
35
36
|
| `v2.2.2` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.3`; Fix 504 gateway timeouts on large syncs: stop recomputing change-explainability on every poll during a long merge + back off poll to 15s |
|
|
36
37
|
| `v2.2.1` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.2`; Add read-only forward_apply_identity_audit diagnostic to pinpoint 1-created/1-deleted idempotency churn |
|
|
37
38
|
| `v2.2.0` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.1`; Fix devices mis-assigned the ACI platform; link Palo vsys / Fortinet vdom firewalls to their physical chassis |
|
|
@@ -8,7 +8,8 @@ Forward 26.6 is the baseline for async NQE.
|
|
|
8
8
|
|
|
9
9
|
| Plugin Release | NetBox Version | Status |
|
|
10
10
|
| --- | --- | --- |
|
|
11
|
-
| `v2.2.
|
|
11
|
+
| `v2.2.4` | `4.6.3` required; needs netbox-branching `1.1.0+` | Current release; Hotfix: device-analysis NQE (bare foreach) errored refresh + CVE list; surface job errors into job.data |
|
|
12
|
+
| `v2.2.3` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.4`; Field-feedback fixes: delete-count labeling, vsys/vdom auto-link, skip empty VRFs, per-device CVE list, churn pinpoint, query-ID status clarify |
|
|
12
13
|
| `v2.2.2` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.3`; Fix 504 gateway timeouts on large syncs: stop recomputing change-explainability on every poll during a long merge + back off poll to 15s |
|
|
13
14
|
| `v2.2.1` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.2`; Add read-only forward_apply_identity_audit diagnostic to pinpoint 1-created/1-deleted idempotency churn |
|
|
14
15
|
| `v2.2.0` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.1`; Fix devices mis-assigned the ACI platform; link Palo vsys / Fortinet vdom firewalls to their physical chassis |
|
|
@@ -8,7 +8,7 @@ class NetboxForwardConfig(PluginConfig):
|
|
|
8
8
|
name = "forward_netbox"
|
|
9
9
|
verbose_name = "Forward Field Integration"
|
|
10
10
|
description = "Sync Forward data into NetBox using built-in NQE queries."
|
|
11
|
-
version = "2.2.
|
|
11
|
+
version = "2.2.4"
|
|
12
12
|
base_url = "forward"
|
|
13
13
|
min_version = "4.6.3"
|
|
14
14
|
|
|
@@ -385,6 +385,13 @@ def refresh_forward_device_analysis(job, *args, **kwargs):
|
|
|
385
385
|
job.save(update_fields=["data"])
|
|
386
386
|
job.terminate()
|
|
387
387
|
except Exception as exc:
|
|
388
|
+
# Record the failure on the job so it is visible in the UI (the Data
|
|
389
|
+
# panel) instead of an empty Error field with null data.
|
|
390
|
+
job.data = {
|
|
391
|
+
"error": str(exc) or exc.__class__.__name__,
|
|
392
|
+
"error_type": exc.__class__.__name__,
|
|
393
|
+
}
|
|
394
|
+
job.save(update_fields=["data"])
|
|
388
395
|
job.terminate(status=JobStatusChoices.STATUS_ERRORED)
|
|
389
396
|
if type(exc) in (SyncError, JobTimeoutException):
|
|
390
397
|
logger.error(exc)
|
|
@@ -408,6 +415,13 @@ def tag_forward_backfilled_devices(job, *args, **kwargs):
|
|
|
408
415
|
job.save(update_fields=["data"])
|
|
409
416
|
job.terminate()
|
|
410
417
|
except Exception as exc:
|
|
418
|
+
# Record the failure on the job so it is visible in the UI (the Data
|
|
419
|
+
# panel) instead of an empty Error field with null data.
|
|
420
|
+
job.data = {
|
|
421
|
+
"error": str(exc) or exc.__class__.__name__,
|
|
422
|
+
"error_type": exc.__class__.__name__,
|
|
423
|
+
}
|
|
424
|
+
job.save(update_fields=["data"])
|
|
411
425
|
job.terminate(status=JobStatusChoices.STATUS_ERRORED)
|
|
412
426
|
if type(exc) in (SyncError, JobTimeoutException):
|
|
413
427
|
logger.error(exc)
|
|
@@ -464,6 +478,13 @@ def tag_forward_delete_eligible_ipam(job, *args, **kwargs):
|
|
|
464
478
|
job.save(update_fields=["data"])
|
|
465
479
|
job.terminate()
|
|
466
480
|
except Exception as exc:
|
|
481
|
+
# Record the failure on the job so it is visible in the UI (the Data
|
|
482
|
+
# panel) instead of an empty Error field with null data.
|
|
483
|
+
job.data = {
|
|
484
|
+
"error": str(exc) or exc.__class__.__name__,
|
|
485
|
+
"error_type": exc.__class__.__name__,
|
|
486
|
+
}
|
|
487
|
+
job.save(update_fields=["data"])
|
|
467
488
|
job.terminate(status=JobStatusChoices.STATUS_ERRORED)
|
|
468
489
|
if type(exc) in (SyncError, JobTimeoutException):
|
|
469
490
|
logger.error(exc)
|
|
@@ -485,6 +506,13 @@ def create_forward_module_bays(job, *args, **kwargs):
|
|
|
485
506
|
job.save(update_fields=["data"])
|
|
486
507
|
job.terminate()
|
|
487
508
|
except Exception as exc:
|
|
509
|
+
# Record the failure on the job so it is visible in the UI (the Data
|
|
510
|
+
# panel) instead of an empty Error field with null data.
|
|
511
|
+
job.data = {
|
|
512
|
+
"error": str(exc) or exc.__class__.__name__,
|
|
513
|
+
"error_type": exc.__class__.__name__,
|
|
514
|
+
}
|
|
515
|
+
job.save(update_fields=["data"])
|
|
488
516
|
job.terminate(status=JobStatusChoices.STATUS_ERRORED)
|
|
489
517
|
if type(exc) in (SyncError, JobTimeoutException):
|
|
490
518
|
logger.error(exc)
|
|
@@ -511,6 +539,13 @@ def forward_dependency_preview(job, *args, **kwargs):
|
|
|
511
539
|
job.save(update_fields=["data"])
|
|
512
540
|
job.terminate()
|
|
513
541
|
except Exception as exc:
|
|
542
|
+
# Record the failure on the job so it is visible in the UI (the Data
|
|
543
|
+
# panel) instead of an empty Error field with null data.
|
|
544
|
+
job.data = {
|
|
545
|
+
"error": str(exc) or exc.__class__.__name__,
|
|
546
|
+
"error_type": exc.__class__.__name__,
|
|
547
|
+
}
|
|
548
|
+
job.save(update_fields=["data"])
|
|
514
549
|
job.terminate(status=JobStatusChoices.STATUS_ERRORED)
|
|
515
550
|
if type(exc) in (SyncError, JobTimeoutException):
|
|
516
551
|
logger.error(exc)
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_analysis.nqe
RENAMED
|
@@ -31,9 +31,9 @@ let physicalLinks =
|
|
|
31
31
|
foreach l in i.links
|
|
32
32
|
select l)
|
|
33
33
|
let cveIds =
|
|
34
|
-
foreach c in device.cveFindings
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
(foreach c in device.cveFindings
|
|
35
|
+
where c.isVulnerable
|
|
36
|
+
select c.cveId)
|
|
37
37
|
select {
|
|
38
38
|
name: device.name,
|
|
39
39
|
reachable: device.snapshotInfo.result == DeviceSnapshotResult.completed,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
from django.test import SimpleTestCase
|
|
4
|
+
|
|
5
|
+
from forward_netbox.utilities.query_registry import read_builtin_query_source
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DeviceAnalysisQueryTest(SimpleTestCase):
|
|
9
|
+
"""Guard the device-analysis NQE against the 2.2.3 regression: a bare
|
|
10
|
+
``let x = foreach ... select ...`` is INVALID NQE — the live Forward engine
|
|
11
|
+
returns HTTP 400 (``extraneous input 'foreach'``) and the whole
|
|
12
|
+
refresh-device-analysis job errors. The local NQE linter does NOT catch this
|
|
13
|
+
(it reported 0 errors on the broken query), so this source-level test is the
|
|
14
|
+
real guard. A ``foreach`` used as a value must be wrapped in parens / a call.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
def test_cve_ids_comprehension_is_parenthesized(self):
|
|
18
|
+
source = read_builtin_query_source("forward_device_analysis.nqe")
|
|
19
|
+
self.assertIn("(foreach c in device.cveFindings", source)
|
|
20
|
+
|
|
21
|
+
def test_no_bare_foreach_in_let_binding(self):
|
|
22
|
+
source = read_builtin_query_source("forward_device_analysis.nqe")
|
|
23
|
+
# A `let <name> =` immediately followed by a bare `foreach` is the invalid
|
|
24
|
+
# pattern; wrapped forms (`(foreach`, `length(foreach`) are fine.
|
|
25
|
+
bare = re.findall(r"let\s+\w+\s*=\s*\n\s*foreach\b", source)
|
|
26
|
+
self.assertEqual(bare, [], f"bare foreach in a let binding: {bare}")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/management/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0002_add_coalesce_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/migrations/0013_execution_run_step.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_apic_nodes.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_app_profiles.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_bridge_domains.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_contracts.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_endpoint_groups.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_fabrics.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_filters.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_aci_tenants.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_feature_tags.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_models.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_types.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_device_vendors.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_hsrp_groups.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_inventory_items.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ip_addresses_ipv4.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ip_addresses_ipv6.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_mac_addresses.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ospf_instances.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_ospf_interfaces.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_peering_sessions.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_prefixes_ipv4.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_prefixes_ipv6.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/queries/forward_virtual_chassis.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/static/forward_netbox/img/fn-logo.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templates/forward_netbox/inc/diff.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/templatetags/forward_netbox_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_apply_identity_audit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_bulk_adapter_parity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.3 → forward_netbox-2.2.4}/forward_netbox/tests/test_device_scope_tagging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|