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')

Reply via email to