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 2022-12-08 16:52:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ciscoconfparse (Old) and /work/SRC/openSUSE:Factory/.python-ciscoconfparse.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ciscoconfparse" Thu Dec 8 16:52:15 2022 rev:27 rq:1041342 version:1.6.53 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ciscoconfparse/python-ciscoconfparse.changes 2022-12-02 15:47:26.536574583 +0100 +++ /work/SRC/openSUSE:Factory/.python-ciscoconfparse.new.1835/python-ciscoconfparse.changes 2022-12-08 16:52:23.899855826 +0100 @@ -1,0 +2,10 @@ +Wed Dec 7 14:39:07 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to version 1.6.53 + Released: 2022-11-18 + Summary: + * Reformat pyproject.toml to be most compatible with 'pip install' + * Several internal project-level optimizations... + * git changes committed on 2022-11-09... somehow 1.6.53 wasn't pushed to pypi on 9-Nov-2022. It was pushed to pypi on 18-Nov-2022 + +------------------------------------------------------------------- Old: ---- ciscoconfparse-1.6.52.tar.gz New: ---- ciscoconfparse-1.6.53.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ciscoconfparse.spec ++++++ --- /var/tmp/diff_new_pack.b258wt/_old 2022-12-08 16:52:25.511864094 +0100 +++ /var/tmp/diff_new_pack.b258wt/_new 2022-12-08 16:52:25.515864115 +0100 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without python2 Name: python-ciscoconfparse -Version: 1.6.52 +Version: 1.6.53 Release: 0 Summary: Library for parsing, querying and modifying Cisco IOS-style configurations License: GPL-3.0-or-later ++++++ ciscoconfparse-1.6.52.tar.gz -> ciscoconfparse-1.6.53.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/CHANGES.md new/ciscoconfparse-1.6.53/CHANGES.md --- old/ciscoconfparse-1.6.52/CHANGES.md 2022-11-09 14:08:32.374858900 +0100 +++ new/ciscoconfparse-1.6.53/CHANGES.md 2022-11-09 20:24:50.707943000 +0100 @@ -2,11 +2,19 @@ - Released: Not released - Summary: - - Nothing to see here, move on + - Update Makefile to delete poetry.lock file + + +## Version: 1.6.53 + +- Released: 2022-11-09 +- Summary: + - Reformat pyproject.toml to be most compatible with 'pip install' + - Several internal project-level optimizations... ## Version: 1.6.52 -- Released: 2022-10-21 +- Released: 2022-11-09 - Summary: - Fix Github Issue #254 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/Makefile new/ciscoconfparse-1.6.53/Makefile --- old/ciscoconfparse-1.6.52/Makefile 2022-10-26 13:32:56.762290500 +0200 +++ new/ciscoconfparse-1.6.53/Makefile 2022-11-18 12:15:49.277552400 +0100 @@ -9,85 +9,135 @@ # Ref -> https://packaging.python.org/en/latest/guides/making-a-pypi-friendly-readme/ .PHONY: pypi-packaging pypi-packaging: + @echo ">> building ciscoconfparse pypi artifacts (wheel and tar.gz)" pip install -U setuptools>=58.0.0 pip install -U wheel>=0.37.1 pip install -U twine>=4.0.1 pip install -U poetry>=1.0.0 # Delete bogus files... see https://stackoverflow.com/a/73992288/667301 perl -e 'unlink( grep { /^\W\d*\.*\d*/ && !-d } glob( "*" ) );' -.PHONY: dev -dev: - make devpkgs + .PHONY: pypi pypi: + @echo ">> uploading ciscoconfparse pypi artifacts to pypi" make clean make pypi-packaging poetry lock --no-update poetry build # twine is the simplest pypi package uploader... python -m twine upload dist/* + .PHONY: bump-version-patch bump-version-patch: $(shell python dev_tools/git_helper.py -I patch) + .PHONY: bump-version-minor bump-version-minor: $(shell python dev_tools/git_helper.py -I minor) + .PHONY: repo-push repo-push: + @echo ">> git push (w/o force) ciscoconfparse local main branch to github" #git remote remove origin #git remote add origin "g...@github.com:mpenning/ciscoconfparse" #git push g...@github.com:mpenning/ciscoconfparse.git #git push origin +main $(shell python dev_tools/git_helper.py -P ciscoconfparse --push) + .PHONY: repo-push-force repo-push-force: + @echo ">> git push (w/ force) ciscoconfparse local main branch to github" #git remote remove origin #git remote add origin "g...@github.com:mpenning/ciscoconfparse" #git push --force-with-lease g...@github.com:mpenning/ciscoconfparse.git #git push --force-with-lease origin +main $(shell python dev_tools/git_helper.py -P ciscoconfparse --push --force) + .PHONY: repo-push-tag repo-push-tag: + @echo ">> git push (w/ local tag) ciscoconfparse local main branch to github" #make repo-push $(shell python dev_tools/git_helper.py -P ciscoconfparse --push --tag) + .PHONY: repo-push-tag-force repo-push-tag-force: + @echo ">> git push (w/ local tag and w/ force) ciscoconfparse local main branch to github" #make repo-push-force $(shell python dev_tools/git_helper.py -P ciscoconfparse --push --tag --force) + .PHONY: pylama pylama: + @echo ">> running pylama against ciscoconfparse" # Good usability info here -> https://pythonspeed.com/articles/pylint/ pylama --ignore=E501,E301,E265,E266 ciscoconfparse/*py | less -XR + .PHONY: pylint pylint: + @echo ">> running pylint against ciscoconfparse" # Good usability info here -> https://pythonspeed.com/articles/pylint/ pylint --rcfile=./utils/pylintrc --ignore-patterns='^build|^dist|utils/pylintrc|README.rst|CHANGES|LICENSE|MANIFEST.in|Makefile|TODO' --output-format=colorized * | less -XR + .PHONY: tutorial tutorial: + @echo ">> building the ciscoconfparse tutorial" rst2html5 --jquery --reveal-js --pretty-print-code --embed-stylesheet --embed-content --embed-images tutorial/ccp_tutorial.rst > tutorial/ccp_tutorial.html + .PHONY: parse-ios parse-ios: cd tests; python parse_test.py 1 | less -XR + .PHONY: parse-ios-factory parse-ios-factory: cd tests; python parse_test.py 2 | less -XR + .PHONY: parse-ios-banner parse-iosxr-banner: cd tests; python parse_test.py 3 | less -XR + .PHONY: perf-acl perf-acl: cd tests; python performance_case.py 5 | less -XR + .PHONY: perf-factory-intf perf-factory-intf: cd tests; python performance_case.py 6 | less -XR -.PHONY: devpkgs -devpkgs: + +.PHONY: flake +flake: + flake8 --ignore E501,E226,E225,E221,E303,E302,E265,E128,E125,E124,E41,W291 --max-complexity 10 ciscoconfparse | less + +.PHONY: coverage +coverage: + @echo "[[[ py.test Coverage ]]]" + cd tests;py.test --cov-report term-missing --cov=ciscoconfparse.py -s -v + +.PHONY: doctest +doctest: + # Run the doc tests + cd sphinx-doc; make doctest + +.PHONY: pip +pip: + @echo ">> Upgrading pip to the latest version" + pip install -U pip + +.PHONY: dep +dep: + @echo ">> installing all ciscoconfparse prod dependencies" + make pip pip install -U pip>=22.2.0 - pip install -U virtualenv - pip install -U virtualenvwrapper>=4.8.0 + pip install -U dnspython==2.1.0 # Previously version 1.14.0 pip install -U passlib==1.7.4 pip install -U loguru==0.6.0 pip install -U toml>=0.10.2 + +.PHONY: dev +dev: + @echo ">> installing all prod and development ciscoconfparse dependencies" + make dep + pip install -U pip>=22.2.0 + pip install -U virtualenv + pip install -U virtualenvwrapper>=4.8.0 pip install -U pss pip install -U mock pip install -U highlights>=0.1.1 @@ -102,25 +152,16 @@ pip install -U flake8 pip install -U black>=22.8.0 pip install -U yapf - pip install -U dnspython==2.1.0 # Previously version 1.14.0 pip install -U fabric>=2.7.0 pip install -U invoke>=1.7.0 pip install -U ipaddr>=2.2.0 -.PHONY: flake -flake: - flake8 --ignore E501,E226,E225,E221,E303,E302,E265,E128,E125,E124,E41,W291 --max-complexity 10 ciscoconfparse | less -.PHONY: coverage -coverage: - @echo "[[[ py.test Coverage ]]]" - cd tests;py.test --cov-report term-missing --cov=ciscoconfparse.py -s -v -.PHONY: doctest -doctest: - # Run the doc tests - cd sphinx-doc; make doctest + + .PHONY: test test: make clean cd tests && ./runtests.sh + .PHONY: clean clean: # Delete bogus files... see https://stackoverflow.com/a/73992288/667301 @@ -132,10 +173,12 @@ -find ./* -path '*__pycache__' -exec rm -rf {} \; @# remove all the MockSSH keys -find ./* -name '*.key' -exec rm {} \; + -rm -rf poetry.lock -rm -rf .pytest_cache/ -rm -rf .eggs/ -rm -rf .cache/ -rm -rf build/ dist/ ciscoconfparse.egg-info/ setuptools* + .PHONY: help help: @# An @ sign prevents outputting the command itself to stdout @@ -143,7 +186,8 @@ @echo "pypi : Build the project and push to pypi" @echo "repo-push : Build the project and push to github" @echo "test : Run all doctests and unit tests" - @echo "devpkgs : Get all dependencies for the dev environment" + @echo "dev : Get all dependencies for the dev environment" + @echo "dep : Get all prod dependencies" @echo "devtest : Run tests - Specific to Mike Pennington's build env" @echo "coverage : Run tests with coverage - Specific to this build env" @echo "flake : Run PyFlake code audit w/ McCabe complexity" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/PKG-INFO new/ciscoconfparse-1.6.53/PKG-INFO --- old/ciscoconfparse-1.6.52/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/ciscoconfparse-1.6.53/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +1,12 @@ Metadata-Version: 2.1 Name: ciscoconfparse -Version: 1.6.52 +Version: 1.6.53 Summary: Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configurations -Home-page: http://www.pennington.net/py/ciscoconfparse/ License: GPL-3.0-only Keywords: Parse,audit,query,modify,Cisco IOS,Cisco,NXOS,ASA,Juniper Author: Mike Pennington Author-email: m...@pennington.net -Requires-Python: >=3.7.0 +Requires-Python: >=3.7.2,<4.0.0 Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Plugins Classifier: Intended Audience :: Developers @@ -20,7 +19,6 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 @@ -29,12 +27,26 @@ Classifier: Topic :: Internet Classifier: Topic :: System :: Networking Classifier: Topic :: System :: Networking :: Monitoring +Requires-Dist: Sphinx (==4.3.0) +Requires-Dist: black (>=20.8b1) Requires-Dist: dnspython (>=2.1.0,<3.0.0) Requires-Dist: loguru (==0.6.0) +Requires-Dist: packaging (>21.0) Requires-Dist: passlib (>=1.7.4,<2.0.0) -Requires-Dist: toml (==0.10.2) -Project-URL: Documentation, http://www.pennington.net/py/ciscoconfparse/ -Project-URL: Repository, https://github.com/mpenning/ciscoconfparse +Requires-Dist: poetry (>=1.2.2) +Requires-Dist: poetry-core (>=1.3.2) +Requires-Dist: pre-commit (==2.20.0) +Requires-Dist: pylint (>=2.15.5) +Requires-Dist: pyroma (>=4.0) +Requires-Dist: pytest (>=7.1.3) +Requires-Dist: sphinx-bootstrap-theme (==0.8.0) +Requires-Dist: toml (>=0.10.2) +Requires-Dist: virtualenv (>=20.16.5,<20.17.0) +Requires-Dist: virtualenvwrapper (>=4.8.4,<4.9.0) +Project-URL: documentation, http://www.pennington.net/py/ciscoconfparse/ +Project-URL: homepage, http://www.pennington.net/py/ciscoconfparse/ +Project-URL: repository, https://github.com/mpenning/ciscoconfparse +Project-URL: source, https://github.com/mpenning/ciscoconfparse Description-Content-Type: text/markdown ciscoconfparse diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/ciscoconfparse/ciscoconfparse.py new/ciscoconfparse-1.6.53/ciscoconfparse/ciscoconfparse.py --- old/ciscoconfparse-1.6.52/ciscoconfparse/ciscoconfparse.py 2022-11-09 12:00:38.492654800 +0100 +++ new/ciscoconfparse-1.6.53/ciscoconfparse/ciscoconfparse.py 2022-11-09 16:20:29.818929000 +0100 @@ -4657,6 +4657,10 @@ # This method is on ConfigList() def append(self, val): + + if self.debug >= 1: + logger.debug(" ConfigList().append(val={}) was called.".format(val)) + self._list.append(val) # This method is on ConfigList() @@ -4707,7 +4711,7 @@ def _bootstrap_from_text(self): if self.debug >= 1: - logger.info("ConfigList()._bootstrap_from_text() was called.") + logger.debug(" ConfigList()._bootstrap_from_text() was called.") ## reparse all objects from their text attributes... this is *very* slow ## Ultimate goal: get rid of all reparsing from text... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/pyproject.toml new/ciscoconfparse-1.6.53/pyproject.toml --- old/ciscoconfparse-1.6.52/pyproject.toml 2022-11-09 14:08:32.374858900 +0100 +++ new/ciscoconfparse-1.6.53/pyproject.toml 2022-11-18 11:42:29.383412000 +0100 @@ -1,29 +1,31 @@ -[project] +[build-system] +requires = ["poetry>=1.2.2", "poetry-core>=1.3.2", "wheel>=0.37.0", "packaging>=21.0"] +build-backend = "poetry.core.masonry.api" requires-python = ">=3.7.0" +############################################################################## +# +# IMPORTANT: +# pyproject.toml has several different formats (such as a [project] section); +# however, pip will NOT install unless I base pyproject.toml on the +# [tool.poetry] section below. +# +# Maybe it's my fault, but I have not had success trying to migrate to +# a [project] section with pip installs. I have stopped trying because +# the problem is too complicated to continue throwing cycles at making a +# [project] section work with 'pip install ciscoconfparse'. +# +############################################################################## +#[project] + [tool.poetry] name = "ciscoconfparse" -version = "1.6.52" +version = "1.6.53" description = "Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configurations" license = "GPL-3.0-only" -authors = [ - "Mike Pennington <m...@pennington.net>", -] +authors = ["Mike Pennington <m...@pennington.net>"] readme = "README.md" -include = [ - "CHANGES.md", - "CONTRIBUTING.md", - "LICENSE", - "Makefile", - "README_git_workflow.md" -] -exclude = [ - "coverage.json" -] -homepage = "http://www.pennington.net/py/ciscoconfparse/" -repository = "https://github.com/mpenning/ciscoconfparse" -documentation = "http://www.pennington.net/py/ciscoconfparse/" -keywords = ["Parse", "audit", "query", "modify", "Cisco IOS", "Cisco", "NXOS", "ASA", "Juniper",] +keywords = ["Parse", "audit", "query", "modify", "Cisco IOS", "Cisco", "NXOS", "ASA", "Juniper"] classifiers=[ "Development Status :: 5 - Production/Stable", "Environment :: Plugins", @@ -41,22 +43,42 @@ "Topic :: System :: Networking", "Topic :: System :: Networking :: Monitoring", ] +include = [ + "CHANGES.md", + "CONTRIBUTING.md", + "LICENSE", + "Makefile", + "README_git_workflow.md" +] +exclude = [ + "coverage.json" +] -[tool.poetry.dev-dependencies] -pytest = "6.2.5" +[tool.poetry.dependencies] +# Required development dependencies +python = ">=3.7.2,<4.0.0" +virtualenv = "~=20.16.5" +virtualenvwrapper = "~=4.8.4" +poetry = ">=1.2.2" +poetry-core = ">=1.3.2" +pylint = ">=2.15.5" +packaging = ">21.0" pre-commit = "2.20.0" -#black = ">=20.8b1" -#fabric = "2.6.0" -#Sphinx = "^4.3.0" -#sphinx-bootstrap-theme = "^0.8.0" +pytest = ">=7.1.3" +# Optional development dependencies +black = ">=20.8b1" +Sphinx = "4.3.0" +sphinx-bootstrap-theme = "0.8.0" +pyroma = ">=4.0" -[tool.poetry.dependencies] -python = ">=3.7.0" passlib = "^1.7.4" dnspython = "^2.1.0" loguru = "0.6.0" -toml = "0.10.2" +toml = ">=0.10.2" + +[tool.poetry.urls] +source = "https://github.com/mpenning/ciscoconfparse" +homepage = "http://www.pennington.net/py/ciscoconfparse/" +repository = "https://github.com/mpenning/ciscoconfparse" +documentation = "http://www.pennington.net/py/ciscoconfparse/" -[build-system] -requires = ["poetry-core>=1.0.0", "wheel>=0.37.0"] -build-backend = "poetry.core.masonry.api" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ciscoconfparse-1.6.52/setup.py new/ciscoconfparse-1.6.53/setup.py --- old/ciscoconfparse-1.6.52/setup.py 1970-01-01 01:00:00.000000000 +0100 +++ new/ciscoconfparse-1.6.53/setup.py 1970-01-01 01:00:00.000000000 +0100 @@ -8,25 +8,37 @@ {'': ['*']} install_requires = \ -['dnspython>=2.1.0,<3.0.0', +['Sphinx==4.3.0', + 'black>=20.8b1', + 'dnspython>=2.1.0,<3.0.0', 'loguru==0.6.0', + 'packaging>21.0', 'passlib>=1.7.4,<2.0.0', - 'toml==0.10.2'] + 'poetry-core>=1.3.2', + 'poetry>=1.2.2', + 'pre-commit==2.20.0', + 'pylint>=2.15.5', + 'pyroma>=4.0', + 'pytest>=7.1.3', + 'sphinx-bootstrap-theme==0.8.0', + 'toml>=0.10.2', + 'virtualenv>=20.16.5,<20.17.0', + 'virtualenvwrapper>=4.8.4,<4.9.0'] setup_kwargs = { 'name': 'ciscoconfparse', - 'version': '1.6.52', + 'version': '1.6.53', 'description': 'Parse, Audit, Query, Build, and Modify Cisco IOS-style and JunOS-style configurations', 'long_description': 'ciscoconfparse\n==============\n\n[![Github unittest workflow][4]][5] [![Code Health][37]][38] [![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\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 intf_ip_addr = intf_obj.re_match_iter_typed(\n r\'ip\\sa ddress\\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 Tuto rial][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 r epo][17]: :\n\n git clone git://github.com/mpenning/ciscoconfparse\n cd ciscoconfparse/\n python -m pip install .\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 Computer Corp\n- Copyright (C) 2007-2011 David Michael Pennington\n\nThe word \\"Cisco\\" is a registered trademark of [Cisco Systems][27].\n\nAutho r\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/conf igs/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', 'author': 'Mike Pennington', 'author_email': 'm...@pennington.net', 'maintainer': 'None', 'maintainer_email': 'None', - 'url': 'http://www.pennington.net/py/ciscoconfparse/', + 'url': 'None', 'packages': packages, 'package_data': package_data, 'install_requires': install_requires, - 'python_requires': '>=3.7.0', + 'python_requires': '>=3.7.2,<4.0.0', }