Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyeapi for openSUSE:Factory checked in at 2025-03-04 18:33:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyeapi (Old) and /work/SRC/openSUSE:Factory/.python-pyeapi.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyeapi" Tue Mar 4 18:33:39 2025 rev:8 rq:1250076 version:1.0.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyeapi/python-pyeapi.changes 2024-02-20 21:13:04.267055871 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyeapi.new.19136/python-pyeapi.changes 2025-03-04 18:34:08.541836100 +0100 @@ -1,0 +2,11 @@ +Tue Mar 4 12:42:13 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to 1.0.4 + * Fixes documentation build issue for modules section on readthedocs + * Some fixes for system test +- from version 1.0.3 + * Provides a critical bug fix introduced by PR#220 + * Fixed all system tests and provides some enhancements for unit tests +- Drop no-more-imp.patch, merged upstream + +------------------------------------------------------------------- Old: ---- no-more-imp.patch pyeapi-1.0.2.tar.gz New: ---- pyeapi-1.0.4.tar.gz BETA DEBUG BEGIN: Old: * Fixed all system tests and provides some enhancements for unit tests - Drop no-more-imp.patch, merged upstream BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyeapi.spec ++++++ --- /var/tmp/diff_new_pack.ZFYG3g/_old 2025-03-04 18:34:08.989854808 +0100 +++ /var/tmp/diff_new_pack.ZFYG3g/_new 2025-03-04 18:34:08.993854975 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-pyeapi # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # Copyright (c) 2017-2020, Martin Hauke <mar...@gmx.de> # # All modifications and additions to the file contributed by third parties @@ -19,14 +19,12 @@ %{?sle15_python_module_pythons} Name: python-pyeapi -Version: 1.0.2 +Version: 1.0.4 Release: 0 Summary: Python Client for eAPI License: BSD-3-Clause URL: https://github.com/arista-eosplus/pyeapi Source: https://files.pythonhosted.org/packages/source/p/pyeapi/pyeapi-%{version}.tar.gz -# PATCH-FIX-UPSTREAM gh#arista-eosplus/pyeapi#292 -Patch0: no-more-imp.patch BuildRequires: %{python_module base >= 3.7} BuildRequires: %{python_module netaddr} BuildRequires: %{python_module pip} ++++++ pyeapi-1.0.2.tar.gz -> pyeapi-1.0.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/.readthedocs.yaml new/pyeapi-1.0.4/.readthedocs.yaml --- old/pyeapi-1.0.2/.readthedocs.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pyeapi-1.0.4/.readthedocs.yaml 2024-08-20 11:09:27.000000000 +0200 @@ -0,0 +1,40 @@ +# Read the Docs configuration file for Sphinx projects +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "20" + # rust: "1.70" + # golang: "1.20" + jobs: + pre_build: + - make -C docs modules + + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/conf.py + # You can configure Sphinx to use a different builder, for instance use the dirhtml builder for simpler URLs + # builder: "dirhtml" + # Fail on all warnings to avoid broken references + # fail_on_warning: true + +# Optionally build your docs in additional formats such as PDF and ePub +formats: + - htmlzip + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: dev-requirements.txt + - method: pip + path: . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/MANIFEST.in new/pyeapi-1.0.4/MANIFEST.in --- old/pyeapi-1.0.2/MANIFEST.in 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/MANIFEST.in 2024-08-20 11:09:27.000000000 +0200 @@ -4,6 +4,7 @@ include LICENSE include Makefile include VERSION +include *.yaml recursive-include examples *.conf recursive-include examples *.py recursive-include test *.conf diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/PKG-INFO new/pyeapi-1.0.4/PKG-INFO --- old/pyeapi-1.0.2/PKG-INFO 2023-06-30 00:58:19.000000000 +0200 +++ new/pyeapi-1.0.4/PKG-INFO 2024-08-20 11:09:59.670865800 +0200 @@ -1,31 +1,11 @@ Metadata-Version: 2.1 Name: pyeapi -Version: 1.0.2 +Version: 1.0.4 Summary: Python Client for eAPI Home-page: https://github.com/arista-eosplus/pyeapi Author: Arista EOS+ CS Author-email: eosplus-...@arista.com License: BSD-3 -Description: The Python Client for eAPI - ========================== - - The Python Client for eAPI (pyeapi) is a native Python library wrapper around - Arista EOS eAPI. It provides a set of Python language bindings for configuring - Arista EOS nodes. - - The Python library can be used to communicate with EOS either locally - (on-box) or remotely (off-box). It uses a standard INI-style configuration file - to specify one or more nodes and connection profiles. - - The pyeapi library also provides an API layer for building native Python - objects to interact with the destination nodes. The API layer is a convenient - implementation for working with the EOS configuration and is extensible for - developing custom implementations. - - This library is freely provided to the open source community for building - robust applications using Arista EOS. Support is provided as best effort - through Github issues. - Keywords: networking arista eos eapi Platform: UNKNOWN Classifier: Development Status :: 4 - Beta @@ -35,3 +15,26 @@ Classifier: Programming Language :: Python :: 3 :: Only Provides-Extra: dev Provides-Extra: test +License-File: LICENSE + +The Python Client for eAPI +========================== + +The Python Client for eAPI (pyeapi) is a native Python library wrapper around +Arista EOS eAPI. It provides a set of Python language bindings for configuring +Arista EOS nodes. + +The Python library can be used to communicate with EOS either locally +(on-box) or remotely (off-box). It uses a standard INI-style configuration file +to specify one or more nodes and connection profiles. + +The pyeapi library also provides an API layer for building native Python +objects to interact with the destination nodes. The API layer is a convenient +implementation for working with the EOS configuration and is extensible for +developing custom implementations. + +This library is freely provided to the open source community for building +robust applications using Arista EOS. Support is provided as best effort +through Github issues. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/VERSION new/pyeapi-1.0.4/VERSION --- old/pyeapi-1.0.2/VERSION 2023-06-30 00:56:43.000000000 +0200 +++ new/pyeapi-1.0.4/VERSION 2024-08-20 11:09:42.000000000 +0200 @@ -1 +1 @@ -1.0.2 +1.0.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/dev-requirements.txt new/pyeapi-1.0.4/dev-requirements.txt --- old/pyeapi-1.0.2/dev-requirements.txt 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/dev-requirements.txt 2024-08-20 11:09:27.000000000 +0200 @@ -1,5 +1,4 @@ -r requirements.txt -mock coveralls twine check-manifest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/Makefile new/pyeapi-1.0.4/docs/Makefile --- old/pyeapi-1.0.2/docs/Makefile 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/docs/Makefile 2024-08-20 11:09:27.000000000 +0200 @@ -60,7 +60,7 @@ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." modules: - python $(CWD)/generate_modules.py + python3 $(CWD)/generate_modules.py docs: clean modules html diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/_list_of_modules.rst new/pyeapi-1.0.4/docs/api_modules/_list_of_modules.rst --- old/pyeapi-1.0.2/docs/api_modules/_list_of_modules.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/_list_of_modules.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Api -=== - -.. toctree:: - :maxdepth: 2 - - abstract - acl - bgp - interfaces - ipinterfaces - mlag - ntp - ospf - routemaps - staticroute - stp - switchports - system - users - varp - vlans - vrfs - vrrp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/abstract.rst new/pyeapi-1.0.4/docs/api_modules/abstract.rst --- old/pyeapi-1.0.2/docs/api_modules/abstract.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/abstract.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Abstract -======== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.abstract - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/acl.rst new/pyeapi-1.0.4/docs/api_modules/acl.rst --- old/pyeapi-1.0.2/docs/api_modules/acl.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/acl.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Acl -=== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.acl - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/bgp.rst new/pyeapi-1.0.4/docs/api_modules/bgp.rst --- old/pyeapi-1.0.2/docs/api_modules/bgp.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/bgp.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Bgp -=== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.bgp - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/interfaces.rst new/pyeapi-1.0.4/docs/api_modules/interfaces.rst --- old/pyeapi-1.0.2/docs/api_modules/interfaces.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/interfaces.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Interfaces -========== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.interfaces - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/ipinterfaces.rst new/pyeapi-1.0.4/docs/api_modules/ipinterfaces.rst --- old/pyeapi-1.0.2/docs/api_modules/ipinterfaces.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/ipinterfaces.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Ipinterfaces -============ - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.ipinterfaces - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/mlag.rst new/pyeapi-1.0.4/docs/api_modules/mlag.rst --- old/pyeapi-1.0.2/docs/api_modules/mlag.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/mlag.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Mlag -==== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.mlag - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/ntp.rst new/pyeapi-1.0.4/docs/api_modules/ntp.rst --- old/pyeapi-1.0.2/docs/api_modules/ntp.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/ntp.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Ntp -=== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.ntp - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/ospf.rst new/pyeapi-1.0.4/docs/api_modules/ospf.rst --- old/pyeapi-1.0.2/docs/api_modules/ospf.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/ospf.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Ospf -==== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.ospf - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/routemaps.rst new/pyeapi-1.0.4/docs/api_modules/routemaps.rst --- old/pyeapi-1.0.2/docs/api_modules/routemaps.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/routemaps.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Routemaps -========= - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.routemaps - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/staticroute.rst new/pyeapi-1.0.4/docs/api_modules/staticroute.rst --- old/pyeapi-1.0.2/docs/api_modules/staticroute.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/staticroute.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Staticroute -=========== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.staticroute - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/stp.rst new/pyeapi-1.0.4/docs/api_modules/stp.rst --- old/pyeapi-1.0.2/docs/api_modules/stp.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/stp.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Stp -=== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.stp - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/switchports.rst new/pyeapi-1.0.4/docs/api_modules/switchports.rst --- old/pyeapi-1.0.2/docs/api_modules/switchports.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/switchports.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Switchports -=========== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.switchports - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/system.rst new/pyeapi-1.0.4/docs/api_modules/system.rst --- old/pyeapi-1.0.2/docs/api_modules/system.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/system.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -System -====== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.system - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/users.rst new/pyeapi-1.0.4/docs/api_modules/users.rst --- old/pyeapi-1.0.2/docs/api_modules/users.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/users.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Users -===== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.users - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/varp.rst new/pyeapi-1.0.4/docs/api_modules/varp.rst --- old/pyeapi-1.0.2/docs/api_modules/varp.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/varp.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Varp -==== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.varp - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/vlans.rst new/pyeapi-1.0.4/docs/api_modules/vlans.rst --- old/pyeapi-1.0.2/docs/api_modules/vlans.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/vlans.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Vlans -===== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.vlans - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/vrfs.rst new/pyeapi-1.0.4/docs/api_modules/vrfs.rst --- old/pyeapi-1.0.2/docs/api_modules/vrfs.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/vrfs.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Vrfs -==== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.vrfs - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/api_modules/vrrp.rst new/pyeapi-1.0.4/docs/api_modules/vrrp.rst --- old/pyeapi-1.0.2/docs/api_modules/vrrp.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/api_modules/vrrp.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Vrrp -==== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.api.vrrp - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/client_modules/_list_of_modules.rst new/pyeapi-1.0.4/docs/client_modules/_list_of_modules.rst --- old/pyeapi-1.0.2/docs/client_modules/_list_of_modules.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/client_modules/_list_of_modules.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Client -====== - -.. toctree:: - :maxdepth: 2 - - client - eapilib - utils diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/client_modules/client.rst new/pyeapi-1.0.4/docs/client_modules/client.rst --- old/pyeapi-1.0.2/docs/client_modules/client.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/client_modules/client.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Client -====== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.client - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/client_modules/eapilib.rst new/pyeapi-1.0.4/docs/client_modules/eapilib.rst --- old/pyeapi-1.0.2/docs/client_modules/eapilib.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/client_modules/eapilib.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Eapilib -======= - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.eapilib - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/client_modules/utils.rst new/pyeapi-1.0.4/docs/client_modules/utils.rst --- old/pyeapi-1.0.2/docs/client_modules/utils.rst 2023-06-30 00:57:52.000000000 +0200 +++ new/pyeapi-1.0.4/docs/client_modules/utils.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -.. This file has been autogenerated by generate_modules.py - - -Utils -===== - -.. toctree:: - :maxdepth: 1 - -.. automodule:: pyeapi.utils - :members: - :undoc-members: - :show-inheritance: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/release-notes-1.0.4.rst new/pyeapi-1.0.4/docs/release-notes-1.0.4.rst --- old/pyeapi-1.0.2/docs/release-notes-1.0.4.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/pyeapi-1.0.4/docs/release-notes-1.0.4.rst 2024-08-20 11:09:42.000000000 +0200 @@ -0,0 +1,22 @@ +Release 1.0.4 +------------- + +2024-08-19 + \- the major reason for this release is to fix documentation issue on `readthedocs <https://pyeapi.readthedocs.io/en/latest/>`_ site + +New Modules +^^^^^^^^^^^ + +Enhancements +^^^^^^^^^^^^ + +Fixed +^^^^^ +* System test fixes ( `#285 <https://github.com/arista-eosplus/pyeapi/pull/285>`_, `#291 <https://github.com/arista-eosplus/pyeapi/pull/291>`_, + `#302 <https://github.com/arista-eosplus/pyeapi/pull/302>`_, `#303 <https://github.com/arista-eosplus/pyeapi/pull/303>`_ ) +* Fixed PR `#289 <https://github.com/arista-eosplus/pyeapi/pull/289>`_: allow specifying API version in requests. +* Fixed PR `#286 <https://github.com/arista-eosplus/pyeapi/pull/291>`_: a regression introduced by PR #220, where parsing a non-empty banner section may fail +* Fixed *modules* section on `readthedocs <https://pyeapi.readthedocs.io/en/develop/modules.html>`_ site (PR `#300 <https://github.com/arista-eosplus/pyeapi/pull/300>`_) + +Known Caveats +^^^^^^^^^^^^^ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/docs/release-notes.rst new/pyeapi-1.0.4/docs/release-notes.rst --- old/pyeapi-1.0.2/docs/release-notes.rst 2023-06-30 00:56:43.000000000 +0200 +++ new/pyeapi-1.0.4/docs/release-notes.rst 2024-08-20 11:09:27.000000000 +0200 @@ -6,6 +6,7 @@ :maxdepth: 2 :titlesonly: + release-notes-1.0.3.rst release-notes-1.0.2.rst release-notes-1.0.0.rst release-notes-0.8.4.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi/__init__.py new/pyeapi-1.0.4/pyeapi/__init__.py --- old/pyeapi-1.0.2/pyeapi/__init__.py 2023-06-30 00:56:43.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi/__init__.py 2024-08-20 11:09:42.000000000 +0200 @@ -29,7 +29,7 @@ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -__version__ = '1.0.2' +__version__ = '1.0.4' __author__ = 'Arista EOS+' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi/client.py new/pyeapi-1.0.4/pyeapi/client.py --- old/pyeapi-1.0.2/pyeapi/client.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi/client.py 2024-08-20 11:09:27.000000000 +0200 @@ -718,27 +718,39 @@ last parsed (sub)section, which in turn may contain sub-sections """ def is_subsection_present( section, indent ): - return any( [line[ indent ] == ' ' for line in section] ) + return any( line[ indent ] == ' ' for line in section ) + + def get_indent( line ): + return len( line ) - len( line.lstrip() ) + sections = {} key = None + banner = None for line in config.splitlines( keepends=True )[ indent > 0: ]: - # indent > 0: no need processing subsection line, which is 1st line - if line[ indent ] == ' ': # section continuation - sections[key] += line + line_rs = line.rstrip() + if indent == 0: + if banner: + sections[ banner ] += line + if line_rs == 'EOF': + banner = None + continue + if line.startswith( 'banner ' ): + banner = line_rs + sections[ banner ] = line + continue + if get_indent( line_rs ) > indent: # i.e. subsection line + # key is always expected to be set by now + sections[ key ] += line continue - # new section is found (if key is not None) - if key: # process prior (last recorded) section - lines = sections[key].splitlines()[ 1: ] - if len( lines ): # section may contain sub-sections - ind = len( lines[0] ) - len( lines[0].lstrip() ) - if is_subsection_present( lines, ind ): - subs = self._chunkify( sections[key], indent=ind ) - subs.update( sections ) - sections = subs - elif indent > 0: # record only subsections - del sections[key] - key = line.rstrip() - sections[key] = line + subsection = sections.get( key, '' ).splitlines()[ 1: ] + if subsection: + sub_indent = get_indent( subsection[0] ) + if is_subsection_present( subsection, sub_indent ): + parsed = self._chunkify( sections[key], indent=sub_indent ) + parsed.update( sections ) + sections = parsed + key = line_rs + sections[ key ] = line return sections def section(self, regex, config='running_config'): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi/eapilib.py new/pyeapi-1.0.4/pyeapi/eapilib.py --- old/pyeapi-1.0.2/pyeapi/eapilib.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi/eapilib.py 2024-08-20 11:09:27.000000000 +0200 @@ -346,6 +346,8 @@ reqid = id(self) if reqid is None else reqid params = {'version': 1, 'cmds': commands, 'format': encoding} streaming = False + if 'apiVersion' in kwargs: + params['version'] = kwargs['apiVersion'] if 'autoComplete' in kwargs: params['autoComplete'] = kwargs['autoComplete'] if 'expandAliases' in kwargs: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi/utils.py new/pyeapi-1.0.4/pyeapi/utils.py --- old/pyeapi-1.0.2/pyeapi/utils.py 2023-06-30 00:56:43.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi/utils.py 2024-08-20 11:09:27.000000000 +0200 @@ -245,13 +245,13 @@ """ @staticmethod def expand( cmds ): - """ Expands cmds argument into a list of all CLI variants - + """ Expands cmds argument into a list of all CLI variants + The method returns a list of all full variant combinations present in the the cmds arguement Args: - cmds (list): a list made of str and CliVariants types + cmds (list): a list made of str and CliVariants types Returns: expanded list, e.g.: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi.egg-info/PKG-INFO new/pyeapi-1.0.4/pyeapi.egg-info/PKG-INFO --- old/pyeapi-1.0.2/pyeapi.egg-info/PKG-INFO 2023-06-30 00:58:19.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi.egg-info/PKG-INFO 2024-08-20 11:09:59.000000000 +0200 @@ -1,31 +1,11 @@ Metadata-Version: 2.1 Name: pyeapi -Version: 1.0.2 +Version: 1.0.4 Summary: Python Client for eAPI Home-page: https://github.com/arista-eosplus/pyeapi Author: Arista EOS+ CS Author-email: eosplus-...@arista.com License: BSD-3 -Description: The Python Client for eAPI - ========================== - - The Python Client for eAPI (pyeapi) is a native Python library wrapper around - Arista EOS eAPI. It provides a set of Python language bindings for configuring - Arista EOS nodes. - - The Python library can be used to communicate with EOS either locally - (on-box) or remotely (off-box). It uses a standard INI-style configuration file - to specify one or more nodes and connection profiles. - - The pyeapi library also provides an API layer for building native Python - objects to interact with the destination nodes. The API layer is a convenient - implementation for working with the EOS configuration and is extensible for - developing custom implementations. - - This library is freely provided to the open source community for building - robust applications using Arista EOS. Support is provided as best effort - through Github issues. - Keywords: networking arista eos eapi Platform: UNKNOWN Classifier: Development Status :: 4 - Beta @@ -35,3 +15,26 @@ Classifier: Programming Language :: Python :: 3 :: Only Provides-Extra: dev Provides-Extra: test +License-File: LICENSE + +The Python Client for eAPI +========================== + +The Python Client for eAPI (pyeapi) is a native Python library wrapper around +Arista EOS eAPI. It provides a set of Python language bindings for configuring +Arista EOS nodes. + +The Python library can be used to communicate with EOS either locally +(on-box) or remotely (off-box). It uses a standard INI-style configuration file +to specify one or more nodes and connection profiles. + +The pyeapi library also provides an API layer for building native Python +objects to interact with the destination nodes. The API layer is a convenient +implementation for working with the EOS configuration and is extensible for +developing custom implementations. + +This library is freely provided to the open source community for building +robust applications using Arista EOS. Support is provided as best effort +through Github issues. + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi.egg-info/SOURCES.txt new/pyeapi-1.0.4/pyeapi.egg-info/SOURCES.txt --- old/pyeapi-1.0.2/pyeapi.egg-info/SOURCES.txt 2023-06-30 00:58:19.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi.egg-info/SOURCES.txt 2024-08-20 11:09:59.000000000 +0200 @@ -1,4 +1,5 @@ .coveragerc +.readthedocs.yaml CHANGELOG.md LICENSE MANIFEST.in @@ -44,33 +45,11 @@ docs/release-notes-0.8.4.rst docs/release-notes-1.0.0.rst docs/release-notes-1.0.2.rst +docs/release-notes-1.0.4.rst docs/release-notes.rst docs/requirements.rst docs/subinterfaces.rst docs/support.rst -docs/api_modules/_list_of_modules.rst -docs/api_modules/abstract.rst -docs/api_modules/acl.rst -docs/api_modules/bgp.rst -docs/api_modules/interfaces.rst -docs/api_modules/ipinterfaces.rst -docs/api_modules/mlag.rst -docs/api_modules/ntp.rst -docs/api_modules/ospf.rst -docs/api_modules/routemaps.rst -docs/api_modules/staticroute.rst -docs/api_modules/stp.rst -docs/api_modules/switchports.rst -docs/api_modules/system.rst -docs/api_modules/users.rst -docs/api_modules/varp.rst -docs/api_modules/vlans.rst -docs/api_modules/vrfs.rst -docs/api_modules/vrrp.rst -docs/client_modules/_list_of_modules.rst -docs/client_modules/client.rst -docs/client_modules/eapilib.rst -docs/client_modules/utils.rst examples/get_config.py examples/nodes.conf examples/simple.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/pyeapi.egg-info/requires.txt new/pyeapi-1.0.4/pyeapi.egg-info/requires.txt --- old/pyeapi-1.0.2/pyeapi.egg-info/requires.txt 2023-06-30 00:58:19.000000000 +0200 +++ new/pyeapi-1.0.4/pyeapi.egg-info/requires.txt 2024-08-20 11:09:59.000000000 +0200 @@ -8,4 +8,3 @@ [test] coverage -mock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/setup.py new/pyeapi-1.0.4/setup.py --- old/pyeapi-1.0.2/setup.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/setup.py 2024-08-20 11:09:27.000000000 +0200 @@ -66,7 +66,7 @@ # $ pip install -e .[dev,test] extras_require={ 'dev': ['check-manifest', 'pep8', 'pyflakes', 'twine'], - 'test': ['coverage', 'mock'], + 'test': ['coverage'], }, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/test/fixtures/running_config.text new/pyeapi-1.0.4/test/fixtures/running_config.text --- old/pyeapi-1.0.2/test/fixtures/running_config.text 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/test/fixtures/running_config.text 2024-08-20 11:09:27.000000000 +0200 @@ -404,6 +404,22 @@ state active no private-vlan ! +banner login ++++++++++++++++++++++++++++++++++++++++++ + banner: + +vlan 1 +this +is the loging ban +that would b emult +EOF +! + +banner motd +this text +can be multine +EOF +! interface Port-Channel10 no description no shutdown @@ -2106,16 +2122,6 @@ ! no vxlan vni notation dotted ! -banner login -this -is the loging ban -that would b emult -EOF -banner motd -this text -can be multine -EOF -! system coredump compressed ! no dot1x system-auth-control diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/test/lib/systestlib.py new/pyeapi-1.0.4/test/lib/systestlib.py --- old/pyeapi-1.0.2/test/lib/systestlib.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/test/lib/systestlib.py 2024-08-20 11:09:27.000000000 +0200 @@ -33,6 +33,7 @@ import random from testlib import get_fixture +from pyeapi.utils import CliVariants import pyeapi.client @@ -48,9 +49,16 @@ self.duts = list() for name in config.sections(): - if name.startswith('connection:') and 'localhost' not in name: - name = name.split(':')[1] - self.duts.append(pyeapi.client.connect_to(name)) + if not name.startswith('connection:'): + continue + if 'localhost' in name: + continue + name = name.split(':')[1] + self.duts.append( pyeapi.client.connect_to(name) ) + # revert to a legacy behavior for interface availability + if self.duts[ -1 ]: + self.duts[ -1 ].config( CliVariants( + 'service interface inactive expose', 'enable') ) def sort_dict_by_keys(self, d): keys = sorted(d.keys()) @@ -58,9 +66,15 @@ def random_interface(dut, exclude=None): + # interfaces read in 'show run all' and those actually present may differ, + # thus interface list must be picked from the actually present + if not getattr( random_interface, 'present', False ): + random_interface.present = dut.run_commands( + 'show interfaces', send_enable=False )[ 0 ][ 'interfaces' ].keys() exclude = [] if exclude is None else exclude interfaces = dut.api('interfaces') - names = [name for name in list(interfaces.keys()) if name.startswith('Et')] + names = [ name for name in list(interfaces.keys()) if name.startswith('Et') ] + names = [ name for name in names if name in random_interface.present ] exclude_interfaces = dut.settings.get('exclude_interfaces', []) if exclude_interfaces: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/test/system/test_api_interfaces.py new/pyeapi-1.0.4/test/system/test_api_interfaces.py --- old/pyeapi-1.0.2/test/system/test_api_interfaces.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/test/system/test_api_interfaces.py 2024-08-20 11:09:27.000000000 +0200 @@ -44,7 +44,7 @@ def test_get(self): for dut in self.duts: - intf = random_interface(dut) + intf = random_interface( dut, exclude=['Ethernet1'] ) dut.config(['default interface %s' % intf, 'interface %s' % intf, 'description this is a test', @@ -390,7 +390,7 @@ def test_minimum_links_valid(self): for dut in self.duts: - minlinks = random_int(1, 16) + minlinks = random_int(1, 8) # some physical duts may have only 8 links dut.config(['no interface Port-Channel1', 'interface Port-Channel1']) result = dut.api('interfaces').set_minimum_links('Port-Channel1', @@ -403,7 +403,7 @@ def test_minimum_links_invalid_value(self): for dut in self.duts: - minlinks = random_int(129, 256) # some duts may support up to 128 + minlinks = 1025 # hope it will hold for a while result = dut.api( 'interfaces').set_minimum_links('Port-Channel1', minlinks) self.assertFalse(result) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyeapi-1.0.2/test/unit/test_client.py new/pyeapi-1.0.4/test/unit/test_client.py --- old/pyeapi-1.0.2/test/unit/test_client.py 2023-06-30 00:55:31.000000000 +0200 +++ new/pyeapi-1.0.4/test/unit/test_client.py 2024-08-20 11:09:27.000000000 +0200 @@ -32,7 +32,7 @@ import sys import os import unittest -import imp +import importlib sys.path.append(os.path.join(os.path.dirname(__file__), '../lib')) @@ -227,7 +227,7 @@ def setUp(self): if 'EAPI_CONF' in os.environ: del os.environ['EAPI_CONF'] - imp.reload(pyeapi.client) + importlib.reload(pyeapi.client) def test_load_config_for_connection_with_filename(self): conf = get_fixture('eapi.conf')