annet 3.16.2__tar.gz → 3.17.0__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.
Potentially problematic release.
This version of annet might be problematic. Click here for more details.
- {annet-3.16.2/annet.egg-info → annet-3.17.0}/PKG-INFO +3 -2
- {annet-3.16.2 → annet-3.17.0}/README.md +20 -6
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/query.py +2 -1
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/provider.py +1 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/jsontools.py +34 -32
- {annet-3.16.2 → annet-3.17.0}/annet/deploy.py +2 -1
- {annet-3.16.2 → annet-3.17.0}/annet/gen.py +1 -2
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/h3c.py +1 -1
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/juniper.py +1 -1
- {annet-3.16.2 → annet-3.17.0/annet.egg-info}/PKG-INFO +3 -2
- {annet-3.16.2 → annet-3.17.0}/annet.egg-info/requires.txt +2 -1
- {annet-3.16.2 → annet-3.17.0}/requirements.txt +1 -0
- {annet-3.16.2 → annet-3.17.0}/setup.py +1 -1
- {annet-3.16.2 → annet-3.17.0}/AUTHORS +0 -0
- {annet-3.16.2 → annet-3.17.0}/LICENSE +0 -0
- {annet-3.16.2 → annet-3.17.0}/MANIFEST.in +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/fetchers/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/fetchers/stub/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/fetchers/stub/fetcher.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/file/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/file/provider.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/adapter.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/client.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/manufacturer.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/status_client.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/storage_base.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/common/storage_opts.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v24/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v24/models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v24/storage.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v37/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v37/models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v37/storage.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v41/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v41/models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v41/storage.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v42/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v42/models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/adapters/netbox/v42/storage.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annet.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/command.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/diff.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/errors.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/filter_acl.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/lib.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/db.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/devdb/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/devdb/data/devdb.json +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/views/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/views/dump.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/netdev/views/hardware.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/output.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/patching.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/acl.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/deploying.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/ordering.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/platform.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rbparser/syntax.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rulebook/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/rulebook/common.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/annlib/types.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/api/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/argparse.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/bgp_models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/cli.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/cli_args.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/configs/context.yml +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/configs/logging.yaml +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/connectors.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/deploy_ui.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/diff.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/filtering.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/base.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/common/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/common/initial.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/entire.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/exceptions.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/jsonfragment.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/partial.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/perf.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/ref.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/generators/result.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/hardware.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/implicit.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/lib.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/basemodel.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/device_models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/executor.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/match_args.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/models_converter.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/peer_models.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/port_processor.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/mesh/registry.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/output.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/parallel.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/patching.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/reference.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/action.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/condition.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/match_builder.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/policy.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/result.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/routemap.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl/statement_builder.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/aspath.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/community.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/cumulus_frr.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/entities.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/execute.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/policy.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/prefix_lists.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rpl_generators/rd.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/arista/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/arista/aaa.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/arista/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/aruba/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/aruba/ap_env.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/aruba/misc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/b4com/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/b4com/file.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/b4com/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/cisco/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/cisco/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/cisco/misc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/cisco/vlandb.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/common.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/deploying.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/generic/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/generic/misc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/aaa.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/bgp.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/misc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/h3c/vlandb.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/aaa.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/bgp.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/misc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/huawei/vlandb.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/juniper/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/juniper/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/nexus/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/nexus/iface.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/patching.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/routeros/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/routeros/file.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/arista.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/arista.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/arista.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/aruba.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/aruba.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/aruba.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/b4com.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/b4com.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/b4com.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/cisco.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/cisco.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/cisco.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/h3c.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/h3c.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/h3c.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/huawei.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/huawei.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/huawei.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/iosxr.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/iosxr.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/iosxr.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/juniper.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/juniper.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/nexus.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/nexus.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/nexus.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/nokia.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/optixtrans.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/optixtrans.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/optixtrans.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/pc.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/pc.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/pc.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/ribbon.deploy +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/ribbon.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/routeros.order +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/rulebook/texts/routeros.rul +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/storage.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/text_term_format.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/tracing.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/types.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/base.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/arista.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/aruba.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/b4com.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/cisco.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/huawei.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/iosxr.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/nexus.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/nokia.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/optixtrans.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/pc.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/ribbon.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/library/routeros.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/registry.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet/vendors/tabparser.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet.egg-info/SOURCES.txt +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet.egg-info/dependency_links.txt +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet.egg-info/entry_points.txt +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet.egg-info/top_level.txt +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/example/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/example/hostname.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/example/lldp.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/mesh_example/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/mesh_example/bgp.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/mesh_example/mesh_logic.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/rpl_example/__init__.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/rpl_example/generator.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/rpl_example/items.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/rpl_example/mesh.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/annet_generators/rpl_example/route_policy.py +0 -0
- {annet-3.16.2 → annet-3.17.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: annet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.17.0
|
|
4
4
|
Summary: annet
|
|
5
5
|
Home-page: https://github.com/annetutil/annet
|
|
6
6
|
License: MIT
|
|
@@ -20,8 +20,9 @@ Requires-Dist: valkit>=0.1.4
|
|
|
20
20
|
Requires-Dist: yarl>=1.8.2
|
|
21
21
|
Requires-Dist: adaptix==3.0.0b7
|
|
22
22
|
Requires-Dist: dataclass-rest==0.4
|
|
23
|
+
Requires-Dist: ordered-set>=4.1.0
|
|
23
24
|
Provides-Extra: netbox
|
|
24
|
-
Requires-Dist: annetbox[sync]>=0.
|
|
25
|
+
Requires-Dist: annetbox[sync]>=0.8.0; extra == "netbox"
|
|
25
26
|
Dynamic: home-page
|
|
26
27
|
Dynamic: license
|
|
27
28
|
Dynamic: license-file
|
|
@@ -53,21 +53,35 @@ selected_context: default
|
|
|
53
53
|
|
|
54
54
|
Environment variable `ANN_SELECTED_CONTEXT` can be used to override `selected_context` parameter.
|
|
55
55
|
|
|
56
|
-
##
|
|
56
|
+
## Installation
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Install from PyPI:
|
|
59
|
+
```shell
|
|
60
|
+
pip install annet
|
|
61
|
+
```
|
|
59
62
|
|
|
63
|
+
Or install from source:
|
|
60
64
|
```shell
|
|
61
|
-
|
|
65
|
+
git clone https://github.com/annetutil/annet
|
|
66
|
+
cd annet
|
|
67
|
+
pip install -e .
|
|
62
68
|
```
|
|
63
69
|
|
|
70
|
+
## Building doc
|
|
71
|
+
1. Install dependencies:
|
|
72
|
+
```shell
|
|
73
|
+
pip install -r requirements-doc.txt
|
|
74
|
+
```
|
|
64
75
|
2. Build
|
|
65
|
-
|
|
66
76
|
```shell
|
|
67
77
|
sphinx-build -M html docs docs-build
|
|
68
78
|
```
|
|
69
|
-
|
|
70
|
-
|
|
79
|
+
3. Open rendered html in browser
|
|
80
|
+
```shell
|
|
81
|
+
open docs-build/html/index.html # macOS
|
|
82
|
+
xdg-open docs-build/html/index.html # Linux
|
|
83
|
+
start docs-build/html/index.html # Windows
|
|
84
|
+
```
|
|
71
85
|
|
|
72
86
|
## Links
|
|
73
87
|
|
|
@@ -5,7 +5,7 @@ from typing import cast, List, Union, Iterable, Optional, TypedDict
|
|
|
5
5
|
from annet.storage import Query
|
|
6
6
|
|
|
7
7
|
FIELD_VALUE_SEPARATOR = ":"
|
|
8
|
-
ALLOWED_GLOB_GROUPS = ["site", "tag", "role", "device_type", "status", "tenant"]
|
|
8
|
+
ALLOWED_GLOB_GROUPS = ["site", "tag", "role", "device_type", "status", "tenant", "asset_tag"]
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class Filter(TypedDict, total=False):
|
|
@@ -16,6 +16,7 @@ class Filter(TypedDict, total=False):
|
|
|
16
16
|
device_type: list[str]
|
|
17
17
|
status: list[str]
|
|
18
18
|
tenant: list[str]
|
|
19
|
+
asset_tag: list[str]
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
@dataclass
|
|
@@ -10,6 +10,7 @@ from typing import Any, Dict, Iterable, List, Optional
|
|
|
10
10
|
|
|
11
11
|
import jsonpatch
|
|
12
12
|
import jsonpointer
|
|
13
|
+
from ordered_set import OrderedSet
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
def format_json(data: Any, stable: bool = False) -> str:
|
|
@@ -42,8 +43,7 @@ def apply_json_fragment(
|
|
|
42
43
|
|
|
43
44
|
for pointer in new_pointers:
|
|
44
45
|
new_value = pointer.get(new_fragment)
|
|
45
|
-
|
|
46
|
-
pointer.set(full_new_config, new_value)
|
|
46
|
+
_pointer_set(pointer, full_new_config, new_value)
|
|
47
47
|
|
|
48
48
|
# delete matched parts in old config whicn are not present in the new
|
|
49
49
|
paths = {p.path for p in new_pointers}
|
|
@@ -56,31 +56,37 @@ def apply_json_fragment(
|
|
|
56
56
|
return full_new_config
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def
|
|
59
|
+
def _pointer_set(pointer: jsonpointer.JsonPointer, doc: Any, value: Any) -> None:
|
|
60
60
|
"""
|
|
61
|
-
|
|
61
|
+
Resolve `pointer` against the `doc`, creating new elements if neccessary,
|
|
62
|
+
and set the target's value to `value`, all in place.
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
If `pointer` in any it's part points to the non-existing key,
|
|
65
|
+
or if value at this point is `None`, new object will be created.
|
|
66
|
+
(See https://github.com/stefankoegl/python-json-pointer/issues/41)
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
See for details: https://github.com/stefankoegl/python-json-pointer/issues/41
|
|
68
|
+
If `pointer` in any it's part points to the index of next to be appended
|
|
69
|
+
element of the array, new document / `value` will be appended to that list.
|
|
70
70
|
"""
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
71
|
+
if len(pointer.parts) == 0:
|
|
72
|
+
raise jsonpointer.JsonPointerException("Cannot set root in place")
|
|
73
|
+
*parts_expect_the_last, last_part = pointer.parts
|
|
74
|
+
|
|
75
|
+
for part in parts_expect_the_last:
|
|
76
|
+
key = pointer.get_part(doc, part)
|
|
77
|
+
if isinstance(doc, dict):
|
|
78
|
+
if doc.get(key, None) is None:
|
|
79
|
+
doc[key] = {}
|
|
80
|
+
elif isinstance(doc, list):
|
|
81
|
+
if key == len(doc):
|
|
82
|
+
doc.append({})
|
|
83
|
+
doc = doc[key]
|
|
84
|
+
|
|
85
|
+
key = pointer.get_part(doc, last_part)
|
|
86
|
+
if isinstance(doc, list) and key == len(doc):
|
|
87
|
+
doc.append(value)
|
|
88
|
+
else:
|
|
89
|
+
doc[key] = value
|
|
84
90
|
|
|
85
91
|
|
|
86
92
|
def make_patch(old: Dict[str, Any], new: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
@@ -175,12 +181,11 @@ def _apply_filters_to_json_pointers(
|
|
|
175
181
|
pointers: Iterable[jsonpointer.JsonPointer],
|
|
176
182
|
filters: Sequence[str], *,
|
|
177
183
|
content: Any,
|
|
178
|
-
) ->
|
|
184
|
+
) -> Sequence[jsonpointer.JsonPointer]:
|
|
179
185
|
|
|
180
186
|
"""
|
|
181
|
-
Takes a list of pointers, a list of filters and a document
|
|
182
|
-
|
|
183
|
-
(if necessary, pointers may be deeper than from the input).
|
|
187
|
+
Takes a list of pointers, a list of filters and a document, and returns
|
|
188
|
+
a list of pointers that match at least one of the filters, preserving order.
|
|
184
189
|
|
|
185
190
|
For example, given:
|
|
186
191
|
pointers=["/foo", "/lorem/ipsum", "/lorem/dolor"],
|
|
@@ -205,7 +210,7 @@ def _apply_filters_to_json_pointers(
|
|
|
205
210
|
["/foo/bar/qux", "/lorem/ipsum", "/lorem/dolor"]
|
|
206
211
|
"""
|
|
207
212
|
|
|
208
|
-
ret
|
|
213
|
+
ret = OrderedSet[jsonpointer.JsonPointer]()
|
|
209
214
|
for filter_item in filters:
|
|
210
215
|
filter_parts = jsonpointer.JsonPointer(filter_item).parts
|
|
211
216
|
for pointer in pointers:
|
|
@@ -222,7 +227,4 @@ def _apply_filters_to_json_pointers(
|
|
|
222
227
|
ret.update(map(pointer.join, _resolve_json_pointers(deeper_pattern, deeper_doc)))
|
|
223
228
|
else:
|
|
224
229
|
ret.add(pointer)
|
|
225
|
-
|
|
226
|
-
# that some bug may lead to unstable output being produced
|
|
227
|
-
# (since `type(ret) is set`)
|
|
228
|
-
return sorted(ret, key=str)
|
|
230
|
+
return ret
|
|
@@ -193,7 +193,8 @@ def fill_cmd_params(rules: OrderedDict, cmd: Command):
|
|
|
193
193
|
if rule:
|
|
194
194
|
cmd_params = make_cmd_params(rule)
|
|
195
195
|
cmd.questions = cmd_params.get("questions", None)
|
|
196
|
-
cmd.timeout
|
|
196
|
+
if cmd.timeout is None:
|
|
197
|
+
cmd.timeout = cmd_params["timeout"]
|
|
197
198
|
|
|
198
199
|
|
|
199
200
|
def apply_deploy_rulebook(hw: HardwareView, cmd_paths, do_finalize=True, do_commit=True):
|
|
@@ -489,8 +489,7 @@ def worker(device_id, args: ShowGenOptions, stdin, loader: "Loader", filterer: F
|
|
|
489
489
|
# Consider result of partial run empty and create an empty dest file
|
|
490
490
|
# only if there are some acl rules that has been matched.
|
|
491
491
|
# Otherwise treat it as if no supported generators have been found.
|
|
492
|
-
|
|
493
|
-
if acl_rules:
|
|
492
|
+
if args.no_acl or res.get_acl_rules(args.acl_safe):
|
|
494
493
|
orderer = patching.Orderer.from_hw(device.hw)
|
|
495
494
|
yield (output_driver.cfg_file_names(device)[0],
|
|
496
495
|
format_config_blocks(
|
|
@@ -14,7 +14,7 @@ class JuniperVendor(AbstractVendor):
|
|
|
14
14
|
|
|
15
15
|
before.add_cmd(Command("configure exclusive"))
|
|
16
16
|
if do_commit:
|
|
17
|
-
after.add_cmd(Command("commit", timeout=30))
|
|
17
|
+
after.add_cmd(Command("commit", timeout=30, read_timeout=30))
|
|
18
18
|
after.add_cmd(Command("exit"))
|
|
19
19
|
|
|
20
20
|
return before, after
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: annet
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.17.0
|
|
4
4
|
Summary: annet
|
|
5
5
|
Home-page: https://github.com/annetutil/annet
|
|
6
6
|
License: MIT
|
|
@@ -20,8 +20,9 @@ Requires-Dist: valkit>=0.1.4
|
|
|
20
20
|
Requires-Dist: yarl>=1.8.2
|
|
21
21
|
Requires-Dist: adaptix==3.0.0b7
|
|
22
22
|
Requires-Dist: dataclass-rest==0.4
|
|
23
|
+
Requires-Dist: ordered-set>=4.1.0
|
|
23
24
|
Provides-Extra: netbox
|
|
24
|
-
Requires-Dist: annetbox[sync]>=0.
|
|
25
|
+
Requires-Dist: annetbox[sync]>=0.8.0; extra == "netbox"
|
|
25
26
|
Dynamic: home-page
|
|
26
27
|
Dynamic: license
|
|
27
28
|
Dynamic: license-file
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|