Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-ciscoconfparse for openSUSE:Factory checked in at 2023-01-18 17:11:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ciscoconfparse (Old) and /work/SRC/openSUSE:Factory/.python-ciscoconfparse.new.32243 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ciscoconfparse" Wed Jan 18 17:11:26 2023 rev:29 rq:1059388 version:1.7.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ciscoconfparse/python-ciscoconfparse.changes 2023-01-04 17:53:50.858621871 +0100 +++ /work/SRC/openSUSE:Factory/.python-ciscoconfparse.new.32243/python-ciscoconfparse.changes 2023-01-18 17:11:30.783930030 +0100 @@ -1,0 +2,7 @@ +Wed Jan 18 13:54:32 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 1.7.1: + * Improve config parsing code + * Make ConfigList() more stable + +------------------------------------------------------------------- Old: ---- ciscoconfparse-1.7.0.tar.gz New: ---- ciscoconfparse-1.7.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ciscoconfparse.spec ++++++ --- /var/tmp/diff_new_pack.j2ikbI/_old 2023-01-18 17:11:31.307932991 +0100 +++ /var/tmp/diff_new_pack.j2ikbI/_new 2023-01-18 17:11:31.311933013 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without python2 Name: python-ciscoconfparse -Version: 1.7.0 +Version: 1.7.1 Release: 0 Summary: Library for parsing, querying and modifying Cisco IOS-style configurations License: GPL-3.0-or-later ++++++ ciscoconfparse-1.7.0.tar.gz -> ciscoconfparse-1.7.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/CHANGES.md new/ciscoconfparse-1.7.1/CHANGES.md --- old/ciscoconfparse-1.7.0/CHANGES.md 2023-01-02 15:07:57.459834600 +0100 +++ new/ciscoconfparse-1.7.1/CHANGES.md 2023-01-18 11:10:14.460853000 +0100 @@ -6,13 +6,10 @@ ## Version: 1.7.1 -- Released: 2023-01-02 +- Released: 2023-01-18 - Summary: - - Add deprecat dependency - - Add more Makefile targets - - Makefile will successfully ping to internet or fail - - Update Makefile to delete poetry.lock file - - Correct 'make ping' logic and other tricky Makefile syntax + - Improve config parsing code + - Make ConfigList() more stable ## Version: 1.7.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/Makefile new/ciscoconfparse-1.7.1/Makefile --- old/ciscoconfparse-1.7.0/Makefile 2023-01-02 15:56:14.612502800 +0100 +++ new/ciscoconfparse-1.7.1/Makefile 2023-01-18 10:33:09.000000000 +0100 @@ -1,10 +1,14 @@ DOCHOST ?= $(shell bash -c 'read -p "documentation host: " dochost; echo $$dochost') -# VERSION detection: + +# dynamic ciscoconfparse VERSION detection (via version str in pyproject.toml) # Ref -> https://stackoverflow.com/a/71592061/667301 export VERSION := $(shell grep version pyproject.toml | tr -s ' ' | tr -d "'" | tr -d '"' | cut -d' ' -f3) -# We MUST escape Makefile dollar signs as $$foo -export PING_OUTPUT := $(shell perl -e '@output = qx/ping -q -W0.5 -c1 4.2.2.2/; $$alloutput = join "", @output; if ( $$alloutput =~ /\s0\sreceived/ ) { print "failure"; } else { print "success"; }') +# We must escape Makefile dollar signs as $$foo... +export PING_STATUS := $(shell perl -e '@output = qx/ping -q -W0.5 -c1 4.2.2.2/; $$alloutput = join "", @output; if ( $$alloutput =~ /\s0\sreceived/ ) { print "failure"; } else { print "success"; }') + +# Only refresh pip dependencies (via 'make dep') once per day... +export PIP_DEPENDENCY_AGE := $(shell perl -e 'use File::stat; $$fh = open(FH, "<", ".pip_dependency") or "open_fail"; if ( $$fh != "open_fail" ) { $$age = time() - stat(FH)->mtime; } else { print "creating .pip_dependency\n"; `touch .pip_dependency`; $$age = 0; system("make dep"); }; if ( $$age > 3600*24 ) { print ".pip_dependency aged out\n"; system("make dep"); `rm -rf .pip_dependency`; `touch .pip_dependency`; }') export NUMBER_OF_CCP_TESTS := $(shell grep "def " tests/test*py | wc -l) @@ -151,7 +155,7 @@ pip install -U passlib==1.7.4 pip install -U loguru==0.6.0 pip install -U toml>=0.10.2 - pip install -U deprecat>=2.1.1 + pip install -U deprecat==2.1.1 .PHONY: dev dev: @@ -192,14 +196,14 @@ .PHONY: ping ping: @echo "$(COL_GREEN)>> ping to ensure internet connectivity$(COL_END)" - @if [ "$${PING_OUTPUT}" = 'success' ]; then return 0; else return 1; fi + @if [ "$${PING_STATUS}" = 'success' ]; then return 0; else return 1; fi .PHONY: test test: @echo "$(COL_GREEN)>> running unit tests$(COL_END)" + @if [ "$${PIP_DEPENDENCY_AGE}" >= 0 ]; then `make dep` && return 0; fi $(shell touch .pip_dependency) make timestamp - make dep #make ping make clean cd tests && ./runtests.sh diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/PKG-INFO new/ciscoconfparse-1.7.1/PKG-INFO --- old/ciscoconfparse-1.7.0/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/ciscoconfparse-1.7.1/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ciscoconfparse -Version: 1.7.0 +Version: 1.7.1 Summary: Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configs License: GPL-3.0-only Keywords: Parse,audit,query,modify,Cisco IOS,Cisco,NXOS,ASA,Juniper @@ -30,7 +30,7 @@ Requires-Dist: Sphinx (==4.3.0) Requires-Dist: black (>=20.8b1) Requires-Dist: deprecat (>=2.1.1) -Requires-Dist: dnspython (>=2.1.0,<3.0.0) +Requires-Dist: dnspython (>=2.2.0,<3.0.0) Requires-Dist: loguru (==0.6.0) Requires-Dist: packaging (>21.0) Requires-Dist: passlib (>=1.7.4,<2.0.0) @@ -61,7 +61,7 @@ Short answer: ciscoconfparse is a [Python][10] library that helps you quickly answer questions like these about your -configurations: +Cisco configurations: - What interfaces are shutdown? - Which interfaces are in trunk mode? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/README.md new/ciscoconfparse-1.7.1/README.md --- old/ciscoconfparse-1.7.0/README.md 2022-12-17 12:00:56.507440600 +0100 +++ new/ciscoconfparse-1.7.1/README.md 2023-01-18 10:45:33.000000000 +0100 @@ -9,7 +9,7 @@ Short answer: ciscoconfparse is a [Python][10] library that helps you quickly answer questions like these about your -configurations: +Cisco configurations: - What interfaces are shutdown? - Which interfaces are in trunk mode? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/ciscoconfparse/ciscoconfparse.py new/ciscoconfparse-1.7.1/ciscoconfparse/ciscoconfparse.py --- old/ciscoconfparse-1.7.0/ciscoconfparse/ciscoconfparse.py 2022-12-12 22:59:40.827519700 +0100 +++ new/ciscoconfparse-1.7.1/ciscoconfparse/ciscoconfparse.py 2023-01-18 11:10:14.460853000 +0100 @@ -148,8 +148,8 @@ __status__ = "Production" __version__ = get_version_number() - except: - raise ValueError() + except Exception as eee: + raise ValueError(str(eee)) finally: # These are all the 'dunder variables' required... @@ -231,7 +231,7 @@ # Based off line1 # } elseif { bar baz } { this_line_indent -= 1 - child_indent += 0 + child_indent += 0 retval = results.get('line1', None) return (this_line_indent, child_indent, retval) @@ -239,7 +239,7 @@ # Based off line1: # address 1.1.1.1 this_line_indent -= 0 - child_indent += 0 + child_indent += 0 retval = results.get('line1', '').strip() # Strip empty braces here retval = re.sub(r'\s*\{\s*\}\s*', '', retval) @@ -269,20 +269,20 @@ # Based off line1 # } this_line_indent -= 1 - child_indent -= 1 + child_indent -= 1 return (this_line_indent, child_indent, '') elif braces_open_right: # Based off line1 # this that foo { this_line_indent -= 0 - child_indent += 1 + child_indent += 1 line = results.get('line1', None) or '' return (this_line_indent, child_indent, line) elif (line3_str != '') and (line3_str is not None): this_line_indent += 0 - child_indent += 0 + child_indent += 0 return (this_line_indent, child_indent, '') else: @@ -4168,7 +4168,7 @@ - Accept a list of diff dicts (diff dicts are hereafter known as a "line_dict") - - Duplicate line_dict parent lines may exist in the input + - Note that duplicate line_dict parent lines may exist in the input - Organize the lines such that diff parent lines (example: interface Foo) are not duplicated. - Return the updated and reorganized line list. @@ -4386,11 +4386,8 @@ is_valid_syntax = False for valid_syntax in ALL_VALID_SYNTAX: - try: - assert self.syntax == valid_syntax + if self.syntax == valid_syntax: is_valid_syntax = True - except Exception: - pass assert is_valid_syntax is True # Support input configuration as either a list or a generator instance @@ -4560,9 +4557,6 @@ try: return object.__getattribute__(self, arg) except Exception: - pass - - try: calling_function = inspect.stack()[1].function caller = inspect.getframeinfo(inspect.stack()[1][0]) @@ -4573,9 +4567,6 @@ ) logger.warning(message) return ccp_method - except Exception as ff: - logger.error(str(ff)) - sys.exit(1) # This method is on ConfigList() def append(self, val): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/pyproject.toml new/ciscoconfparse-1.7.1/pyproject.toml --- old/ciscoconfparse-1.7.0/pyproject.toml 2023-01-02 16:23:02.461910500 +0100 +++ new/ciscoconfparse-1.7.1/pyproject.toml 2023-01-18 11:10:14.460853000 +0100 @@ -20,7 +20,7 @@ [tool.poetry] name = "ciscoconfparse" -version = "1.7.0" +version = "1.7.1" description = "Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configs" license = "GPL-3.0-only" authors = ["Mike Pennington <m...@pennington.net>"] @@ -72,7 +72,7 @@ pyroma = ">=4.0" passlib = "^1.7.4" -dnspython = "^2.1.0" +dnspython = "^2.2.0" loguru = "0.6.0" toml = ">=0.10.2" deprecat = ">=2.1.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.7.0/setup.py new/ciscoconfparse-1.7.1/setup.py --- old/ciscoconfparse-1.7.0/setup.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ciscoconfparse-1.7.1/setup.py 1970-01-01 01:00:00.000000000 +0100 @@ -11,7 +11,7 @@ ['Sphinx==4.3.0', 'black>=20.8b1', 'deprecat>=2.1.1', - 'dnspython>=2.1.0,<3.0.0', + 'dnspython>=2.2.0,<3.0.0', 'loguru==0.6.0', 'packaging>21.0', 'passlib>=1.7.4,<2.0.0', @@ -28,9 +28,9 @@ setup_kwargs = { 'name': 'ciscoconfparse', - 'version': '1.7.0', + 'version': '1.7.1', 'description': 'Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configs', - 'long_description': 'ciscoconfparse\n==============\n\n[![Github unittest workflow][4]][5] [![Code Health][37]][38] [![git commits][41]][42] [![Repo Code Grade][43]][44] [![Version][2]][3] [![Downloads][6]][7] [![License][8]][9]\n\n\nIntroduction: What is ciscoconfparse?\n-------------------------------------\n\nShort answer: ciscoconfparse is a [Python][10] library\nthat helps you quickly answer questions like these about your\nconfigurations:\n\n- What interfaces are shutdown?\n- Which interfaces are in trunk mode?\n- What address and subnet mask is assigned to each interface?\n- Which interfaces are missing a critical command?\n- Is this configuration missing a standard config line?\n\nIt can help you:\n\n- Audit existing router / switch / firewall / wlc configurations\n- Modify existing configurations\n- Build new configurations\n\nSpeaking generally, the library examines an IOS-style config and breaks\nit into a set of linked parent / child relationships. You can perform\n complex queries about these relationships.\n\n[![Cisco IOS config: Parent / child][11]][11]\n\nUsage\n-----\n\nThe following code will parse a configuration stored in\n\\\'exampleswitch.conf\\\' and select interfaces that are shutdown.\n\n```python\nfrom ciscoconfparse import CiscoConfParse\n\nparse = CiscoConfParse(\'exampleswitch.conf\', syntax=\'ios\')\n\nfor intf_obj in parse.find_objects_w_child(\'^interface\', \'^\\s+shutdown\'):\n print("Shutdown: " + intf_obj.text)\n```\n\nThe next example will find the IP address assigned to interfaces.\n\n```python\nfrom ciscoconfparse import CiscoConfParse\n\nparse = CiscoConfParse(\'exampleswitch.conf\', syntax=\'ios\')\n\nfor intf_obj in parse.find_objects(\'^interface\'):\n\n intf_name = intf_obj.re_match_typed(\'^interface\\s+(\\S.+?)$\')\n\n # Search children of all interfaces for a regex match and return\n # the value matched in regex match group 1. If there is no match,\n # return a default value: \'\'\n intf_ip_ addr = intf_obj.re_match_iter_typed(\n r\'ip\\saddress\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s\', result_type=str,\n group=1, default=\'\')\n print("{0}: {1}".format(intf_name, intf_ip_addr))\n```\n\nWhat if we don\\\'t use Cisco?\n----------------------------\n\nDon\\\'t let that stop you.\n\nAs of CiscoConfParse 1.2.4, you can parse [brace-delimited configurations][13] into a Cisco IOS style (see [Github Issue \\#17][14]), which means that CiscoConfParse can parse these configurations:\n\n- Juniper Networks Junos\n- Palo Alto Networks Firewall configurations\n- F5 Networks configurations\n\nCiscoConfParse also handles anything that has a Cisco IOS style of configuration, which includes:\n\n- Cisco IOS, Cisco Nexus, Cisco IOS-XR, Cisco IOS-XE, Aironet OS, Cisco ASA, Cisco CatOS\n- Arista EOS\n- Brocade\n- HP Switches\n- Force 10 Switches\n- Dell PowerConnect Switches\n- Extreme Networks\n- Enterasys\n- Screenos\n\nDocs\n----\n\n- The latest copy of the docs are [archived on the web][15]\n- There is also a [CiscoConfParse Tutorial][16]\n\nEditing the Package\n-------------------\n\n- `git clone https://github.com/mpenning/ciscoconfparse`\n- `cd ciscoconfparse`\n- `git checkout -b develop`\n- Add / modify / delete on the `develop` branch\n- `make test`\n- If tests run clean, `git commit` all the pending changes on the `develop` branch\n- (as required) Edit the version number in [pyproject.toml][12]\n- `git checkout main`\n- `git merge develop`\n- `make test`\n- `make repo-push`\n- `make pypi`\n\nPre-requisites\n--------------\n\n[The ciscoconfparse python package][3] requires Python versions 3.7+ (note: Python version 3.7.0 has a bug - ref [Github issue \\#117][18], but version 3.7.1 works); the OS should not matter.\n\nInstallation and Downloads\n--------------------------\n\n- Use `poetry` for Python3.x\\... :\n\n python -m pip install ciscoconfparse\n\nIf you\\\'re interested in the source, you can always pull from the [github repo][17]:\n\n- Download from [the github repo][17]: :\n\n git clone git://github.com/mpenning/ciscoconfparse\n cd ciscoconfparse/\n python -m pip install .\n\nGithub Star History\n-------------------\n\n[![Github Star History Chart][40]][40]\n\nOther Resources\n---------------\n\n- [Dive into Python3](http://www.diveintopython3.net/) is a good way to learn Python\n- [Team CYMRU][30] has a [Secure IOS Template][29], which is especially useful for external-facing routers / switches\n- [Cisco\\\'s Guide to hardening IOS devices][31]\n- [Center for Internet Security Benchmarks][32] (An email address, cookies, and javascript are required)\n\nBug Tracker and Support\n-----------------------\n\n- Please report any suggestions, bug reports, or annoyances with a [github bug report][24].\n- If you\\\'re having problems with general python issues, consider searching for a solution on [Stack Overflow][33]. If you can\\\'t find a solution for your problem or ne ed more help, you can [ask on Stack Overflow][34] or [reddit/r/Python][39].\n- If you\\\'re having problems with your Cisco devices, you can contact:\n - [Cisco TAC][28]\n - [reddit/r/Cisco][35]\n - [reddit/r/networking][36]\n - [NetworkEngineering.se][23]\n\nUnit-Tests\n----------\n\nThe project\\\'s [test workflow][1] checks ciscoconfparse on Python versions 3.6 and higher, as well as a [pypy JIT][22] executable.\n\nClick the image below for details; the current build status is: [![Github unittest status][4]][5]\n\nLicense and Copyright\n---------------------\n\n[ciscoconfparse][3] is licensed [GPLv3][21]\n\n- Copyright (C) 2021-2022 David Michael Pennington\n- Copyright (C) 2020-2021 David Michael Pennington at Cisco Systems (post-acquisition: Cisco acquired ThousandEyes)\n- Copyright (C) 2019 David Michael Pennington at ThousandEyes\n- Copyright (C) 2012-2019 David Michael Pennington at Samsung Data Services\n- Copyright (C) 2011-2012 David Michael Pennington at Dell Compute r Corp\n- Copyright (C) 2007-2011 David Michael Pennington\n\nThe word \\"Cisco\\" is a registered trademark of [Cisco Systems][27].\n\nAuthor\n------\n\n[ciscoconfparse][3] was written by [David Michael Pennington][25] (mike \\[\\~at\\~\\] pennington \\[.dot.\\] net).\n\n\n [1]: https://github.com/mpenning/ciscoconfparse/tree/master/.github/workflows\n [2]: https://img.shields.io/pypi/v/ciscoconfparse.svg\n [3]: https://pypi.python.org/pypi/ciscoconfparse/\n [4]: https://github.com/mpenning/ciscoconfparse/actions/workflows/tests.yml/badge.svg\n [5]: https://github.com/mpenning/ciscoconfparse/actions/workflows/tests.yml\n [6]: https://pepy.tech/badge/ciscoconfparse\n [7]: https://pepy.tech/project/ciscoconfparse\n [8]: http://img.shields.io/badge/license-GPLv3-blue.svg\n [9]: https://www.gnu.org/copyleft/gpl.html\n [10]: https://www.python.org\n [11]: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview_75pct.png\n [ 12]: https://github.com/mpenning/ciscoconfparse/blob/main/pyproject.toml\n [13]: https://github.com/mpenning/ciscoconfparse/blob/master/configs/sample_01.junos\n [14]: https://github.com/mpenning/ciscoconfparse/issues/17\n [15]: http://www.pennington.net/py/ciscoconfparse/\n [16]: http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html\n [17]: https://github.com/mpenning/ciscoconfparse\n [18]: https://github.com/mpenning/ciscoconfparse/issues/117\n [19]: https://github.com/mpenning/ciscoconfparse/issues/13\n [20]: https://github.com/CrackerJackMack/\n [21]: http://www.gnu.org/licenses/gpl-3.0.html\n [22]: https://pypy.org\n [23]: https://networkengineering.stackexchange.com/\n [24]: https://github.com/mpenning/ciscoconfparse/issues/new/choose\n [25]: https://github.com/mpenning\n [26]: https://github.com/muir\n [27]: https://www.cisco.com/\n [28]: https://www.cisco.com/go/support\n [29]: https://www.cymru.com/Documents/secure-ios-template.html\n [30]: https ://team-cymru.com/company/\n [31]: http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html\n [32]: https://learn.cisecurity.org/benchmarks\n [33]: https://stackoverflow.com\n [34]: http://stackoverflow.com/questions/ask\n [35]: https://www.reddit.com/r/Cisco/\n [36]: https://www.reddit.com/r/networking\n [37]: https://snyk.io/advisor/python/ciscoconfparse/badge.svg\n [38]: https://snyk.io/advisor/python/ciscoconfparse\n [39]: https://www.reddit.com/r/Python/\n [40]: https://api.star-history.com/svg?repos=mpenning/ciscoconfparse&type=Date\n [41]: https://img.shields.io/github/commit-activity/m/mpenning/ciscoconfparse\n [42]: https://img.shields.io/github/commit-activity/m/mpenning/ciscoconfparse\n [43]: https://www.codefactor.io/Content/badges/B.svg\n [44]: https://www.codefactor.io/repository/github/mpenning/ciscoconfparse/\n', + 'long_description': 'ciscoconfparse\n==============\n\n[![Github unittest workflow][4]][5] [![Code Health][37]][38] [![git commits][41]][42] [![Repo Code Grade][43]][44] [![Version][2]][3] [![Downloads][6]][7] [![License][8]][9]\n\n\nIntroduction: What is ciscoconfparse?\n-------------------------------------\n\nShort answer: ciscoconfparse is a [Python][10] library\nthat helps you quickly answer questions like these about your\nCisco configurations:\n\n- What interfaces are shutdown?\n- Which interfaces are in trunk mode?\n- What address and subnet mask is assigned to each interface?\n- Which interfaces are missing a critical command?\n- Is this configuration missing a standard config line?\n\nIt can help you:\n\n- Audit existing router / switch / firewall / wlc configurations\n- Modify existing configurations\n- Build new configurations\n\nSpeaking generally, the library examines an IOS-style config and breaks\nit into a set of linked parent / child relationships. You can per form\ncomplex queries about these relationships.\n\n[![Cisco IOS config: Parent / child][11]][11]\n\nUsage\n-----\n\nThe following code will parse a configuration stored in\n\\\'exampleswitch.conf\\\' and select interfaces that are shutdown.\n\n```python\nfrom ciscoconfparse import CiscoConfParse\n\nparse = CiscoConfParse(\'exampleswitch.conf\', syntax=\'ios\')\n\nfor intf_obj in parse.find_objects_w_child(\'^interface\', \'^\\s+shutdown\'):\n print("Shutdown: " + intf_obj.text)\n```\n\nThe next example will find the IP address assigned to interfaces.\n\n```python\nfrom ciscoconfparse import CiscoConfParse\n\nparse = CiscoConfParse(\'exampleswitch.conf\', syntax=\'ios\')\n\nfor intf_obj in parse.find_objects(\'^interface\'):\n\n intf_name = intf_obj.re_match_typed(\'^interface\\s+(\\S.+?)$\')\n\n # Search children of all interfaces for a regex match and return\n # the value matched in regex match group 1. If there is no match,\n # return a default value: \'\'\n in tf_ip_addr = intf_obj.re_match_iter_typed(\n r\'ip\\saddress\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s\', result_type=str,\n group=1, default=\'\')\n print("{0}: {1}".format(intf_name, intf_ip_addr))\n```\n\nWhat if we don\\\'t use Cisco?\n----------------------------\n\nDon\\\'t let that stop you.\n\nAs of CiscoConfParse 1.2.4, you can parse [brace-delimited configurations][13] into a Cisco IOS style (see [Github Issue \\#17][14]), which means that CiscoConfParse can parse these configurations:\n\n- Juniper Networks Junos\n- Palo Alto Networks Firewall configurations\n- F5 Networks configurations\n\nCiscoConfParse also handles anything that has a Cisco IOS style of configuration, which includes:\n\n- Cisco IOS, Cisco Nexus, Cisco IOS-XR, Cisco IOS-XE, Aironet OS, Cisco ASA, Cisco CatOS\n- Arista EOS\n- Brocade\n- HP Switches\n- Force 10 Switches\n- Dell PowerConnect Switches\n- Extreme Networks\n- Enterasys\n- Screenos\n\nDocs\n----\n\n- The latest copy of the docs are [arc hived on the web][15]\n- There is also a [CiscoConfParse Tutorial][16]\n\nEditing the Package\n-------------------\n\n- `git clone https://github.com/mpenning/ciscoconfparse`\n- `cd ciscoconfparse`\n- `git checkout -b develop`\n- Add / modify / delete on the `develop` branch\n- `make test`\n- If tests run clean, `git commit` all the pending changes on the `develop` branch\n- (as required) Edit the version number in [pyproject.toml][12]\n- `git checkout main`\n- `git merge develop`\n- `make test`\n- `make repo-push`\n- `make pypi`\n\nPre-requisites\n--------------\n\n[The ciscoconfparse python package][3] requires Python versions 3.7+ (note: Python version 3.7.0 has a bug - ref [Github issue \\#117][18], but version 3.7.1 works); the OS should not matter.\n\nInstallation and Downloads\n--------------------------\n\n- Use `poetry` for Python3.x\\... :\n\n python -m pip install ciscoconfparse\n\nIf you\\\'re interested in the source, you can always pull from the [github repo][17]:\n\n- Download from [the github repo][17]: :\n\n git clone git://github.com/mpenning/ciscoconfparse\n cd ciscoconfparse/\n python -m pip install .\n\nGithub Star History\n-------------------\n\n[![Github Star History Chart][40]][40]\n\nOther Resources\n---------------\n\n- [Dive into Python3](http://www.diveintopython3.net/) is a good way to learn Python\n- [Team CYMRU][30] has a [Secure IOS Template][29], which is especially useful for external-facing routers / switches\n- [Cisco\\\'s Guide to hardening IOS devices][31]\n- [Center for Internet Security Benchmarks][32] (An email address, cookies, and javascript are required)\n\nBug Tracker and Support\n-----------------------\n\n- Please report any suggestions, bug reports, or annoyances with a [github bug report][24].\n- If you\\\'re having problems with general python issues, consider searching for a solution on [Stack Overflow][33]. If you can\\\'t find a solution for your problem or need more help, you can [ask on Stack Overflow][34] or [reddit/r/Python][39].\n- If you\\\'re having problems with your Cisco devices, you can contact:\n - [Cisco TAC][28]\n - [reddit/r/Cisco][35]\n - [reddit/r/networking][36]\n - [NetworkEngineering.se][23]\n\nUnit-Tests\n----------\n\nThe project\\\'s [test workflow][1] checks ciscoconfparse on Python versions 3.6 and higher, as well as a [pypy JIT][22] executable.\n\nClick the image below for details; the current build status is: [![Github unittest status][4]][5]\n\nLicense and Copyright\n---------------------\n\n[ciscoconfparse][3] is licensed [GPLv3][21]\n\n- Copyright (C) 2021-2022 David Michael Pennington\n- Copyright (C) 2020-2021 David Michael Pennington at Cisco Systems (post-acquisition: Cisco acquired ThousandEyes)\n- Copyright (C) 2019 David Michael Pennington at ThousandEyes\n- Copyright (C) 2012-2019 David Michael Pennington at Samsung Data Services\n- Copyright (C) 2011-2012 David Michael Pennington at Dell C omputer Corp\n- Copyright (C) 2007-2011 David Michael Pennington\n\nThe word \\"Cisco\\" is a registered trademark of [Cisco Systems][27].\n\nAuthor\n------\n\n[ciscoconfparse][3] was written by [David Michael Pennington][25] (mike \\[\\~at\\~\\] pennington \\[.dot.\\] net).\n\n\n [1]: https://github.com/mpenning/ciscoconfparse/tree/master/.github/workflows\n [2]: https://img.shields.io/pypi/v/ciscoconfparse.svg\n [3]: https://pypi.python.org/pypi/ciscoconfparse/\n [4]: https://github.com/mpenning/ciscoconfparse/actions/workflows/tests.yml/badge.svg\n [5]: https://github.com/mpenning/ciscoconfparse/actions/workflows/tests.yml\n [6]: https://pepy.tech/badge/ciscoconfparse\n [7]: https://pepy.tech/project/ciscoconfparse\n [8]: http://img.shields.io/badge/license-GPLv3-blue.svg\n [9]: https://www.gnu.org/copyleft/gpl.html\n [10]: https://www.python.org\n [11]: https://raw.githubusercontent.com/mpenning/ciscoconfparse/master/sphinx-doc/_static/ciscoconfparse_overview_75pct.pn g\n [12]: https://github.com/mpenning/ciscoconfparse/blob/main/pyproject.toml\n [13]: https://github.com/mpenning/ciscoconfparse/blob/master/configs/sample_01.junos\n [14]: https://github.com/mpenning/ciscoconfparse/issues/17\n [15]: http://www.pennington.net/py/ciscoconfparse/\n [16]: http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html\n [17]: https://github.com/mpenning/ciscoconfparse\n [18]: https://github.com/mpenning/ciscoconfparse/issues/117\n [19]: https://github.com/mpenning/ciscoconfparse/issues/13\n [20]: https://github.com/CrackerJackMack/\n [21]: http://www.gnu.org/licenses/gpl-3.0.html\n [22]: https://pypy.org\n [23]: https://networkengineering.stackexchange.com/\n [24]: https://github.com/mpenning/ciscoconfparse/issues/new/choose\n [25]: https://github.com/mpenning\n [26]: https://github.com/muir\n [27]: https://www.cisco.com/\n [28]: https://www.cisco.com/go/support\n [29]: https://www.cymru.com/Documents/secure-ios-template.html\n [30]: https://team-cymru.com/company/\n [31]: http://www.cisco.com/c/en/us/support/docs/ip/access-lists/13608-21.html\n [32]: https://learn.cisecurity.org/benchmarks\n [33]: https://stackoverflow.com\n [34]: http://stackoverflow.com/questions/ask\n [35]: https://www.reddit.com/r/Cisco/\n [36]: https://www.reddit.com/r/networking\n [37]: https://snyk.io/advisor/python/ciscoconfparse/badge.svg\n [38]: https://snyk.io/advisor/python/ciscoconfparse\n [39]: https://www.reddit.com/r/Python/\n [40]: https://api.star-history.com/svg?repos=mpenning/ciscoconfparse&type=Date\n [41]: https://img.shields.io/github/commit-activity/m/mpenning/ciscoconfparse\n [42]: https://img.shields.io/github/commit-activity/m/mpenning/ciscoconfparse\n [43]: https://www.codefactor.io/Content/badges/B.svg\n [44]: https://www.codefactor.io/repository/github/mpenning/ciscoconfparse/\n', 'author': 'Mike Pennington', 'author_email': 'm...@pennington.net', 'maintainer': 'None',