git: 0f718a20324a - main - net-mgmt/py-ciscoconfparse: Update to 1.9.16

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Tue, 31 Oct 2023 12:33:46 UTC
The branch main has been updated by kai:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0f718a20324a9ba6e3d3ebacacf360b1b0394d84

commit 0f718a20324a9ba6e3d3ebacacf360b1b0394d84
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2023-10-31 12:28:38 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2023-10-31 12:33:15 +0000

    net-mgmt/py-ciscoconfparse: Update to 1.9.16
    
    * Switch to PEP517 build framework.
    
    * Convert to USE_PYTHON=pytest to simplify Makefile.
    
    * Remove no longer required patch for newer releases of setuptools.
    
    Changelog since 1.5.51:
    
    https://github.com/mpenning/ciscoconfparse/compare/v1.5.51...1.9.16
---
 net-mgmt/py-ciscoconfparse/Makefile                |  23 +-
 net-mgmt/py-ciscoconfparse/distinfo                |   6 +-
 net-mgmt/py-ciscoconfparse/files/patch-2to3        | 461 ---------------------
 .../py-ciscoconfparse/files/patch-pyproject.toml   |  25 ++
 4 files changed, 40 insertions(+), 475 deletions(-)

diff --git a/net-mgmt/py-ciscoconfparse/Makefile b/net-mgmt/py-ciscoconfparse/Makefile
index 3c90e14ed0b3..4142ac1082d8 100644
--- a/net-mgmt/py-ciscoconfparse/Makefile
+++ b/net-mgmt/py-ciscoconfparse/Makefile
@@ -1,5 +1,5 @@
 PORTNAME=	ciscoconfparse
-DISTVERSION=	1.5.51
+DISTVERSION=	1.9.16
 CATEGORIES=	net-mgmt python
 MASTER_SITES=	PYPI
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
@@ -11,19 +11,20 @@ WWW=		http://www.pennington.net/py/ciscoconfparse/
 LICENSE=	GPLv3+
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}loguru>0:devel/py-loguru@${PY_FLAVOR}
-RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}colorama>0:devel/py-colorama@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}dnspython>0:dns/py-dnspython@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}loguru>0:devel/py-loguru@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}passlib>0:security/py-passlib@${PY_FLAVOR}
-TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest>0:devel/py-pytest@${PY_FLAVOR}
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}poetry-core>=1.6.1:devel/py-poetry-core@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}packaging>=23.0:devel/py-packaging@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}wheel>=0.38.4:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}deprecated>=1.2.14:devel/py-deprecated@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dnspython>=2.4.2:dns/py-dnspython@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}loguru>=0.7.2:devel/py-loguru@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}passlib>=1.7.4:security/py-passlib@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}toml>=0.10.2:textproc/py-toml@${PY_FLAVOR}
 
 USES=		python
-USE_PYTHON=	distutils autoplist
+USE_PYTHON=	autoplist pep517 pytest
 
-NO_ARCH=	yes
+TEST_ENV=	PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
 
-do-test:
-	@cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m pytest -v -rs
+NO_ARCH=	yes
 
 .include <bsd.port.mk>
diff --git a/net-mgmt/py-ciscoconfparse/distinfo b/net-mgmt/py-ciscoconfparse/distinfo
index 5a013a2c7c0a..a64c5baa1e36 100644
--- a/net-mgmt/py-ciscoconfparse/distinfo
+++ b/net-mgmt/py-ciscoconfparse/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1635877655
-SHA256 (ciscoconfparse-1.5.51.tar.gz) = 392688d883727cc85b09d294bcc13c15e5d8f9c7b3b571ad8570028514ae1364
-SIZE (ciscoconfparse-1.5.51.tar.gz) = 145675
+TIMESTAMP = 1698590690
+SHA256 (ciscoconfparse-1.9.16.tar.gz) = 35dca4b79d24bf18e7e85ed045e99785f2b4914fe11de0ca4ffa389c064d3045
+SIZE (ciscoconfparse-1.9.16.tar.gz) = 463762
diff --git a/net-mgmt/py-ciscoconfparse/files/patch-2to3 b/net-mgmt/py-ciscoconfparse/files/patch-2to3
deleted file mode 100644
index 9061000f81fb..000000000000
--- a/net-mgmt/py-ciscoconfparse/files/patch-2to3
+++ /dev/null
@@ -1,461 +0,0 @@
---- ciscoconfparse/__init__.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/__init__.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- from ciscoconfparse.ciscoconfparse import __author_email__
- from ciscoconfparse.ciscoconfparse import __author__
- from ciscoconfparse.ciscoconfparse import __license__
---- ciscoconfparse/__main__.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/__main__.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- 
- """ __main__.py - Parse, Query, Build, and Modify IOS-style configurations
- 
---- ciscoconfparse/ccp_abc.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/ccp_abc.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- from operator import methodcaller, attrgetter
- from abc import ABCMeta, abstractmethod
- from copy import deepcopy
-@@ -37,9 +37,7 @@ r""" ccp_abc.py - Parse, Query, Build, and Modify IOS-
- ##
- 
- 
--class BaseCfgLine(object):
--    __metaclass__ = ABCMeta
--
-+class BaseCfgLine(object, metaclass=ABCMeta):
-     def __init__(self, text="", comment_delimiter="!"):
-         """Accept an IOS line number and initialize family relationship
-         attributes"""
-@@ -313,14 +311,14 @@ class BaseCfgLine(object):
-            !
-            >>>
-         """
--        cobjs = filter(methodcaller("re_search", linespec), self.children)
--        retval = map(attrgetter("text"), cobjs)
-+        cobjs = list(filter(methodcaller("re_search", linespec), self.children))
-+        retval = list(map(attrgetter("text"), cobjs))
-         # Delete the children
--        map(methodcaller("delete"), cobjs)
-+        list(map(methodcaller("delete"), cobjs))
-         return retval
- 
-     def has_child_with(self, linespec):
--        return bool(filter(methodcaller("re_search", linespec), self.children))
-+        return bool(list(filter(methodcaller("re_search", linespec), self.children)))
- 
-     @junos_unsupported
-     def insert_before(self, insertstr):
-@@ -876,7 +874,7 @@ class BaseCfgLine(object):
-         a list of all ancestors in the direct line as well as this obj.  
-         Cousins or aunts / uncles are *not* returned.  Note: children of this 
-         object are *not* returned."""
--        retval = map(lambda x: x.text, sorted(self.all_parents))
-+        retval = [x.text for x in sorted(self.all_parents)]
-         retval.append(self.text)
-         return retval
- 
---- ciscoconfparse/ccp_util.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/ccp_util.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- from operator import attrgetter
- from colorama import Fore
- import itertools
-@@ -542,7 +542,7 @@ class IPv4Obj(object):
-         ## For Python3 iteration...
-         return self.network_object.__next__()
- 
--    def next(self):
-+    def __next__(self):
-         ## For Python2 iteration...
-         return self.network_object.__next__()
- 
-@@ -998,7 +998,7 @@ class IPv6Obj(object):
-         ## For Python3 iteration...
-         return self.network_object.__next__()
- 
--    def next(self):
-+    def __next__(self):
-         ## For Python2 iteration...
-         return self.network_object.__next__()
- 
-@@ -1399,7 +1399,7 @@ def dns_query(input_str="", query_type="", server="", 
-     elif query_type == "AXFR":
-         """This is a hack: return text of zone transfer, instead of axfr objs"""
-         _zone = zone.from_xfr(query.xfr(server, input_str, lifetime=timeout))
--        return [_zone[node].to_text(node) for node in _zone.nodes.keys()]
-+        return [_zone[node].to_text(node) for node in list(_zone.nodes.keys())]
-     elif query_type == "CNAME":
-         try:
-             answer = resolver.query(input_str, query_type)
-@@ -1689,7 +1689,7 @@ class CiscoRange(MutableSequence):
- 
-                     # Unicode is the only type with .isnumeric()...
-                     if sys.version_info < (3, 0, 0):
--                        prefix_removed = unicode(ii[len(common_prefix):], "utf-8")
-+                        prefix_removed = str(ii[len(common_prefix):], "utf-8")
-                     else:
-                         prefix_removed = ii[len(common_prefix):]
- 
-@@ -1734,7 +1734,7 @@ class CiscoRange(MutableSequence):
-             begin, end = int(begin.strip()), int(end.strip()) + 1
-             assert begin > -1
-             assert end > begin
--            retval.extend(range(begin, end))
-+            retval.extend(list(range(begin, end)))
-         return list(set(retval))
- 
-     def _range(self):
-@@ -1784,7 +1784,7 @@ class CiscoRange(MutableSequence):
-         for ii in self._list:
-             # Removed try / except which is slower than sys.version_info
-             if sys.version_info < (3, 0, 0):
--                unicode_ii = unicode(str(ii))  # Python2.7...
-+                unicode_ii = str(str(ii))  # Python2.7...
-             else:
-                 unicode_ii = str(ii)
- 
---- ciscoconfparse/ciscoconfparse.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/ciscoconfparse.py
-@@ -1,6 +1,6 @@
- 
--from __future__ import absolute_import
- 
-+
- from loguru import logger
- 
- from ciscoconfparse.models_cisco import IOSHostnameLine, IOSRouteLine
-@@ -886,7 +886,7 @@ class CiscoConfParse(object):
-         elif exactmatch:
-             # Return objects whose text attribute matches linespec exactly
-             linespec_re = re.compile("^{0}$".format(dnaspec))
--        return list(filter(lambda obj: linespec_re.search(obj.dna), self.ConfigObjs))
-+        return list([obj for obj in self.ConfigObjs if linespec_re.search(obj.dna)])
- 
-     def find_objects(self, linespec, exactmatch=False, ignore_ws=False):
-         """Find all :class:`~models_cisco.IOSCfgLine` objects whose text
-@@ -1412,7 +1412,7 @@ class CiscoConfParse(object):
-         retval = list()
-         if ignore_ws:
-             parentspec = self._build_space_tolerant_regex(parentspec)
--            childspec = map(self._build_space_tolerant_regex, childspec)
-+            childspec = list(map(self._build_space_tolerant_regex, childspec))
- 
-         for parentobj in self.find_objects(parentspec):
-             results = set([])
-@@ -1450,7 +1450,7 @@ class CiscoConfParse(object):
-         retval = list()
-         if ignore_ws:
-             parentspec = self._build_space_tolerant_regex(parentspec)
--            childspec = map(self._build_space_tolerant_regex, childspec)
-+            childspec = list(map(self._build_space_tolerant_regex, childspec))
- 
-         for parentobj in self.find_objects(parentspec):
-             results = set([])
-@@ -2719,7 +2719,7 @@ class CiscoConfParse(object):
-         tmp = self._find_line_OBJ(linespec)
-         if uncfgspec is None:
-             uncfgspec = linespec
--        a_lines = map(lambda x: x.text, tmp)
-+        a_lines = [x.text for x in tmp]
-         a = CiscoConfParse(a_lines)
- 
-         b = CiscoConfParse(cfgspec, factory=False)
-@@ -2758,10 +2758,10 @@ class CiscoConfParse(object):
-                             a_lines.append(obj.text)
-                             a_linenums.append(obj.linenum)
-                             a_lines.extend(
--                                map(lambda x: getattr(x, "text"), obj.all_children)
-+                                [getattr(x, "text") for x in obj.all_children]
-                             )
-                             a_linenums.extend(
--                                map(lambda x: getattr(x, "linenum"), obj.all_children)
-+                                [getattr(x, "linenum") for x in obj.all_children]
-                             )
-                     b_lines = list()
-                     b_linenums = list()
-@@ -2769,10 +2769,10 @@ class CiscoConfParse(object):
-                         b_lines.append(obj.text)
-                         b_linenums.append(obj.linenum)
-                         b_lines.extend(
--                            map(lambda x: getattr(x, "text"), obj.all_children)
-+                            [getattr(x, "text") for x in obj.all_children]
-                         )
-                         b_linenums.extend(
--                            map(lambda x: getattr(x, "linenum"), obj.all_children)
-+                            [getattr(x, "linenum") for x in obj.all_children]
-                         )
-                 else:
-                     if ignore_order:
-@@ -2784,20 +2784,12 @@ class CiscoConfParse(object):
-                             a_nonparents, b_nonparents
-                         )
-                     else:
--                        a_lines = map(
--                            lambda x: getattr(x, "text"), getattr(adiff_level, attr)
--                        )
-+                        a_lines = [getattr(x, "text") for x in getattr(adiff_level, attr)]
-                         # Build a map from a_lines index to a.ConfigObjs index
--                        a_linenums = map(
--                            lambda x: getattr(x, "linenum"), getattr(adiff_level, attr)
--                        )
--                    b_lines = map(
--                        lambda x: getattr(x, "text"), getattr(bdiff_level, attr)
--                    )
-+                        a_linenums = [getattr(x, "linenum") for x in getattr(adiff_level, attr)]
-+                    b_lines = [getattr(x, "text") for x in getattr(bdiff_level, attr)]
-                     # Build a map from b_lines index to b.ConfigObjs index
--                    b_linenums = map(
--                        lambda x: getattr(x, "linenum"), getattr(bdiff_level, attr)
--                    )
-+                    b_linenums = [getattr(x, "linenum") for x in getattr(bdiff_level, attr)]
- 
-                 ###
-                 ### Mark diffs here
-@@ -2836,7 +2828,7 @@ class CiscoConfParse(object):
-                             aobj = aobjs[idx]
-                             # set aparent_text to all parents' text (joined)
-                             aparent_text = " ".join(
--                                map(lambda x: x.text, aobj.all_parents)
-+                                [x.text for x in aobj.all_parents]
-                             )
-                         except IndexError:
-                             # aobj doesn't exist, if we get an index error
-@@ -2851,7 +2843,7 @@ class CiscoConfParse(object):
-                             bobj = bobjs[idx]
-                             # set bparent_text to all parents' text (joined)
-                             bparent_text = " ".join(
--                                map(lambda x: x.text, bobj.all_parents)
-+                                [x.text for x in bobj.all_parents]
-                             )
-                         except IndexError:
-                             # bobj doesn't exist, if we get an index error
-@@ -3055,7 +3047,7 @@ class CiscoConfParse(object):
-         elif exactmatch:
-             # Return objects whose text attribute matches linespec exactly
-             linespec_re = re.compile("^%s$" % linespec)
--        return list(filter(lambda obj: linespec_re.search(obj.text), self.ConfigObjs))
-+        return list([obj for obj in self.ConfigObjs if linespec_re.search(obj.text)])
- 
-     def _find_sibling_OBJ(self, lineobject):
-         """SEMI-PRIVATE: Takes a singe object and returns a list of sibling
-@@ -3198,7 +3190,7 @@ class IOSConfigList(MutableSequence):
-             logger.debug("self._list = {0}".format(self._list))
- 
-     def has_line_with(self, linespec):
--        return bool(filter(methodcaller("re_search", linespec), self._list))
-+        return bool(list(filter(methodcaller("re_search", linespec), self._list)))
- 
-     @junos_unsupported
-     def insert_before(self, exist_val, new_val, atomic=False):
-@@ -3440,7 +3432,7 @@ class IOSConfigList(MutableSequence):
- 
-     def _banner_mark_regex(self, REGEX):
-         # Build a list of all leading banner lines
--        banner_objs = list(filter(lambda obj: REGEX.search(obj.text), self._list))
-+        banner_objs = list([obj for obj in self._list if REGEX.search(obj.text)])
- 
-         BANNER_STR_RE = r"^(?:(?P<btype>(?:set\s+)*banner\s\w+\s+)(?P<bchar>\S))"
-         for parent in banner_objs:
-@@ -3582,9 +3574,7 @@ class IOSConfigList(MutableSequence):
-             if (indent < max_indent) and is_config_line:
-                 parent = None
-                 # walk parents and intelligently prune stale parents
--                stale_parent_idxs = filter(
--                    lambda ii: ii >= indent, sorted(parents.keys(), reverse=True)
--                )
-+                stale_parent_idxs = [ii for ii in sorted(list(parents.keys()), reverse=True) if ii >= indent]
-                 for parent_idx in stale_parent_idxs:
-                     del parents[parent_idx]
-             else:
-@@ -3793,7 +3783,7 @@ class NXOSConfigList(MutableSequence):
-             logger.debug("self._list = {0}".format(self._list))
- 
-     def has_line_with(self, linespec):
--        return bool(filter(methodcaller("re_search", linespec), self._list))
-+        return bool(list(filter(methodcaller("re_search", linespec), self._list)))
- 
-     def insert_before(self, robj, val, atomic=False):
-         ## Insert something before robj
-@@ -3904,7 +3894,7 @@ class NXOSConfigList(MutableSequence):
- 
-     def _banner_mark_regex(self, REGEX):
-         # Build a list of all leading banner lines
--        banner_objs = list(filter(lambda obj: REGEX.search(obj.text), self._list))
-+        banner_objs = list([obj for obj in self._list if REGEX.search(obj.text)])
- 
-         BANNER_STR_RE = r"^(?:(?P<btype>(?:set\s+)*banner\s\w+\s+)(?P<bchar>\S))"
-         for parent in banner_objs:
-@@ -4020,9 +4010,7 @@ class NXOSConfigList(MutableSequence):
-             if (indent < max_indent) and is_config_line:
-                 parent = None
-                 # walk parents and intelligently prune stale parents
--                stale_parent_idxs = filter(
--                    lambda ii: ii >= indent, sorted(parents.keys(), reverse=True)
--                )
-+                stale_parent_idxs = [ii for ii in sorted(list(parents.keys()), reverse=True) if ii >= indent]
-                 for parent_idx in stale_parent_idxs:
-                     del parents[parent_idx]
-             else:
-@@ -4227,7 +4215,7 @@ class ASAConfigList(MutableSequence):
-         self._list = self._bootstrap_obj_init(list(map(attrgetter("text"), self._list)))
- 
-     def has_line_with(self, linespec):
--        return bool(filter(methodcaller("re_search", linespec), self._list))
-+        return bool(list(filter(methodcaller("re_search", linespec), self._list)))
- 
-     def insert_before(self, robj, val, atomic=False):
-         ## Insert something before robj
-@@ -4357,9 +4345,7 @@ class ASAConfigList(MutableSequence):
-             if (indent < max_indent) and is_config_line:
-                 parent = None
-                 # walk parents and intelligently prune stale parents
--                stale_parent_idxs = filter(
--                    lambda ii: ii >= indent, sorted(parents.keys(), reverse=True)
--                )
-+                stale_parent_idxs = [ii for ii in sorted(list(parents.keys()), reverse=True) if ii >= indent]
-                 for parent_idx in stale_parent_idxs:
-                     del parents[parent_idx]
-             else:
-@@ -4700,7 +4686,7 @@ if __name__ == "__main__":
-         diff = CiscoConfParse(opts.config).req_cfgspec_all_diff(opts.arg1.split(","))
-     elif opts.method == "decrypt":
-         pp = CiscoPassword()
--        print(pp.decrypt(opts.arg1))
-+        print((pp.decrypt(opts.arg1)))
-         exit(1)
-     elif opts.method == "help":
-         print("Valid methods and their arguments:")
-@@ -4710,10 +4696,10 @@ if __name__ == "__main__":
-         print("   find_blocks:            arg1=linespec")
-         print("   find_parents_w_child:   arg1=parentspec  arg2=childspec")
-         print("   find_parents_wo_child:  arg1=parentspec  arg2=childspec")
--        print(
-+        print((
-             "   req_cfgspec_excl_diff:  arg1=linespec    arg2=uncfgspec"
-             + "   arg3=cfgspec"
--        )
-+        ))
-         print("   req_cfgspec_all_diff:   arg1=cfgspec")
-         print("   decrypt:                arg1=encrypted_passwd")
-         exit(1)
---- ciscoconfparse/errors.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/errors.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- 
- r""" errors.py - Parse, Query, Build, and Modify IOS-style configs
- 
---- ciscoconfparse/models_asa.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/models_asa.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- import re
- 
- from ciscoconfparse.protocol_values import (
---- ciscoconfparse/models_cisco.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/models_cisco.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- import traceback
- import sys
- import re
-@@ -1412,7 +1412,7 @@ class BaseIOSIntfLine(IOSCfgLine):
-             }
- 
-             ## Analyze each vdict in sequence and apply to retval sequentially
--            for key, val in vdict.items():
-+            for key, val in list(vdict.items()):
-                 if val != "_nomatch_":
-                     ## absolute in the key overrides previous values
-                     if "absolute" in key:
-@@ -1851,7 +1851,7 @@ class IOSAccessLine(BaseCfgLine):
-         retval = self.re_match_typed(
-             r"([a-zA-Z]+\s+)*(\d+\s*\d*)$", group=2, result_type=str, default=""
-         )
--        tmp = map(int, retval.strip().split())
-+        tmp = list(map(int, retval.strip().split()))
-         return tmp
- 
-     def manual_exectimeout_min(self):
-@@ -1869,7 +1869,7 @@ class IOSAccessLine(BaseCfgLine):
-         retval = self.re_match_iter_typed(
-             r"^\s*exec-timeout\s+(\d+\s*\d*)\s*$", group=1, result_type=str, default=""
-         )
--        tmp = map(int, retval.strip().split())
-+        tmp = list(map(int, retval.strip().split()))
-         return tmp
- 
- 
---- ciscoconfparse/models_junos.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/models_junos.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- import sys
- import re
- import os
---- ciscoconfparse/models_nxos.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/models_nxos.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- import sys
- import re
- import os
-@@ -1365,7 +1365,7 @@ class BaseNXOSIntfLine(NXOSCfgLine):
-             }
- 
-             ## Analyze each vdict in sequence and apply to retval sequentially
--            for key, val in vdict.items():
-+            for key, val in list(vdict.items()):
-                 if val != "_nomatch_":
-                     ## absolute in the key overrides previous values
-                     if "absolute" in key:
-@@ -1971,7 +1971,7 @@ class NXOSAccessLine(BaseCfgLine):
-         retval = self.re_match_typed(
-             r"([a-zA-Z]+\s+)*(\d+\s*\d*)$", group=2, result_type=str, default=""
-         )
--        tmp = map(int, retval.strip().split())
-+        tmp = list(map(int, retval.strip().split()))
-         return tmp
- 
-     def manual_exectimeout_min(self):
-@@ -1989,7 +1989,7 @@ class NXOSAccessLine(BaseCfgLine):
-         retval = self.re_match_iter_typed(
-             r"^\s*exec-timeout\s+(\d+\s*\d*)\s*$", group=1, result_type=str, default=""
-         )
--        tmp = map(int, retval.strip().split())
-+        tmp = list(map(int, retval.strip().split()))
-         return tmp
- 
- 
---- ciscoconfparse/protocol_values.py.orig	2021-11-02 03:51:35 UTC
-+++ ciscoconfparse/protocol_values.py
-@@ -1,4 +1,4 @@
--from __future__ import absolute_import
-+
- 
- """ protocol_values.py - Parse, Query, Build, and Modify IOS-style configurations
-      Copyright (C) 2020-2021 David Michael Pennington at Cisco Systems
---- setup.py.orig	2021-11-02 03:51:35 UTC
-+++ setup.py
-@@ -127,7 +127,6 @@ def setup_packages():
-         long_description=read("README.rst"),
-         include_package_data=True,  # See MANIFEST.in for explicit rules
-         packages=find_packages(),
--        use_2to3=True,  # Reqd for Windows + Py3 - ref Github issue #32
-         zip_safe=False,
-         python_requires='>=3.5',
-         install_requires=REQUIRES,
diff --git a/net-mgmt/py-ciscoconfparse/files/patch-pyproject.toml b/net-mgmt/py-ciscoconfparse/files/patch-pyproject.toml
new file mode 100644
index 000000000000..7e4fd764c245
--- /dev/null
+++ b/net-mgmt/py-ciscoconfparse/files/patch-pyproject.toml
@@ -0,0 +1,25 @@
+Just use poetry-core and remove directives that are unknown for it.
+
+Avoid the installation of the test suite into the top of Python's site-lib.
+
+--- pyproject.toml.orig	2023-10-29 15:08:28 UTC
++++ pyproject.toml
+@@ -2,9 +2,8 @@
+ 
+ [build-system]
+ # See -> PEP 517
+-requires = ["poetry>=1.5.1", "poetry-core>=1.6.1", "wheel>=0.38.4", "packaging>=23.0"]
++requires = ["poetry-core>=1.6.1", "wheel>=0.38.4", "packaging>=23.0"]
+ build-backend = "poetry.core.masonry.api"
+-requires-python = ">=3.8.0"
+ 
+ ##############################################################################
+ #
+@@ -38,7 +37,6 @@ packages = [
+ packages = [
+     # Syntax -> https://python-poetry.org/docs/pyproject/#packages
+     { include = "ciscoconfparse/*" },
+-    { include = "tests/*" },
+ ]
+ # See -> https://python-poetry.org/docs/pyproject/#include-and-exclude
+ include = [