diff options
author | Daniil Baturin <daniil@baturin.org> | 2016-12-30 18:45:39 +0100 |
---|---|---|
committer | Daniil Baturin <daniil@baturin.org> | 2016-12-30 18:45:39 +0100 |
commit | 5eeda0eb5aacfb54887411043ed152ad42dc87b6 (patch) | |
tree | c7a7894ddd6b74930c877220edb5448c4932e502 | |
parent | 41b43d9a8f73cabb5c946ef0a756b5eec5b0bc8c (diff) | |
download | vyatta-cfg-5eeda0eb5aacfb54887411043ed152ad42dc87b6.tar.gz vyatta-cfg-5eeda0eb5aacfb54887411043ed152ad42dc87b6.zip |
Add initial draft of the python config library.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | debian/control | 4 | ||||
-rw-r--r-- | python/setup.py | 20 | ||||
-rw-r--r-- | python/vyos/__init__.py | 0 | ||||
-rw-r--r-- | python/vyos/config.py | 119 |
5 files changed, 143 insertions, 1 deletions
@@ -5,6 +5,7 @@ *.so *.libs *.deps +*.pyc .dirstamp libtool aclocal.m4 diff --git a/debian/control b/debian/control index 51fda59..a44efc6 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,8 @@ Priority: extra Maintainer: VyOS Package Maintainers <maintainers@vyos.net> Build-Depends: debhelper (>= 5), autotools-dev, libglib2.0-dev, libboost-filesystem1.55-dev, libapt-pkg-dev, libtool, flex, - bison, libperl-dev, autoconf, automake, pkg-config, cpio, dh-autoreconf ,dh-systemd + bison, libperl-dev, autoconf, automake, pkg-config, cpio, dh-autoreconf ,dh-systemd, + python3-setuptools, dh-python Standards-Version: 3.9.1 Package: vyatta-cfg @@ -22,6 +23,7 @@ Depends: sed (>= 4.1.5), libboost-filesystem1.55.0, vyatta-quagga, libapt-pkg4.12, + python3, ${perl:Depends}, ${shlibs:Depends} Suggests: util-linux (>= 2.13-5), net-tools, diff --git a/python/setup.py b/python/setup.py new file mode 100644 index 0000000..9181ce0 --- /dev/null +++ b/python/setup.py @@ -0,0 +1,20 @@ +import os +from setuptools import setup + +setup( + name = "vyos", + version = "1.2.0", + author = "VyOS maintainers and contributors", + author_email = "maintainers@vyos.net", + description = ("VyOS configuration libraries."), + license = "MIT", + keywords = "vyos", + url = "http://vyos.io", + packages=['vyos'], + long_description="VyOS configuration libraries", + classifiers=[ + "Development Status :: 3 - Alpha", + "Topic :: Utilities", + "License :: OSI Approved :: MIT License", + ], +) diff --git a/python/vyos/__init__.py b/python/vyos/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/python/vyos/__init__.py diff --git a/python/vyos/config.py b/python/vyos/config.py new file mode 100644 index 0000000..a791555 --- /dev/null +++ b/python/vyos/config.py @@ -0,0 +1,119 @@ +# Copyright (c) 2016 VyOS maintainers and contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the Software +# is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +# IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import subprocess +import re + +__cli_shell_api = '/bin/cli-shell-api' + +class VyOSError(Exception): + pass + + +def _make_command(op, path): + args = path.split() + cmd = [__cli_shell_api, op] + args + return cmd + +def _run(cmd): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + out = p.stdout.read() + p.wait() + if p.returncode != 0: + raise VyOSError() + else: + return out + + +def exists(path): + try: + _run(_make_command('exists', path)) + return True + except VyOSError: + return False + +def session_changed(): + try: + _run(_make_command('sessionChanged', '')) + return True + except VyOSError: + return False + +def in_session(): + try: + _run(_make_command('inSession', '')) + return True + except VyOSError: + return False + +def is_multi(path): + try: + _run(_make_command('isMulti', path)) + return True + except VyOSError: + return False + +def is_tag(path): + try: + _run(_make_command('isTag', path)) + return True + except VyOSError: + return False + +def is_leaf(path): + try: + _run(_make_command('isLeaf', path)) + return True + except VyOSError: + return False + +def return_value(path): + if is_multi(path): + raise VyOSError("Cannot use return_value on multi node: {0}".format(path)) + elif not is_leaf(path): + raise VyOSError("Cannot use return_value on non-leaf node: {0}".format(path)) + else: + try: + out = _run(_make_command('returnValue', path)) + return out + except VyOSError: + raise VyOSError("Path doesn't exist: {0}".format(path)) + +def return_values(path): + if not is_multi(path): + raise VyOSError("Cannot use return_values on non-multi node: {0}".format(path)) + elif not is_leaf(path): + raise VyOSError("Cannot use return_values on non-leaf node: {0}".format(path)) + else: + try: + out = _run(_make_command('returnValues', path)) + return out + except VyOSError: + raise VyOSError("Path doesn't exist: {0}".format(path)) + +def list_nodes(path): + if is_tag(path): + try: + out = _run(_make_command('listNodes', path)) + values = out.split() + return list(map(lambda x: re.sub(r'^\'(.*)\'$', r'\1',x), values)) + except VyOSError: + raise VyOSError("Path doesn't exist: {0}".format(path)) + else: + raise VyOSError("Cannot use list_nodes on a non-tag node: {0}".format(path)) |