Metadata-Version: 2.1
Name: netdef
Version: 1.0.2
Summary: An application framework with built-in drivers (Controllers), data holders (Sources) and config parsers (Rules). Also includes a web interface for configuration and troubleshooting.
Home-page: https://bitbucket.org/fholmer/netdef
Author: Frode Holmer
Author-email: fholmer+netdef@gmail.com
License: GNU Lesser General Public License v3 or later
Keywords: Application Framework Networking Monitoring
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: System :: Networking :: Monitoring
Classifier: Topic :: System :: Monitoring
Requires-Python: >=3.5
Requires-Dist: Flask
Requires-Dist: Flask-Admin
Requires-Dist: Flask-BasicAuth
Requires-Dist: Flask-Login
Requires-Dist: Jinja2
Requires-Dist: psutil
Requires-Dist: Werkzeug
Provides-Extra: full
Requires-Dist: aiohttp ; extra == 'full'
Requires-Dist: crontab ; extra == 'full'
Requires-Dist: cryptography ; extra == 'full'
Requires-Dist: Flask ; extra == 'full'
Requires-Dist: Flask-Admin ; extra == 'full'
Requires-Dist: Flask-BasicAuth ; extra == 'full'
Requires-Dist: Flask-Login ; extra == 'full'
Requires-Dist: freeopcua ; extra == 'full'
Requires-Dist: Jinja2 ; extra == 'full'
Requires-Dist: psutil ; extra == 'full'
Requires-Dist: pymodbus ; extra == 'full'
Requires-Dist: pytz ; extra == 'full'
Requires-Dist: paho-mqtt ; extra == 'full'
Requires-Dist: pyzmq ; extra == 'full'
Requires-Dist: Werkzeug ; extra == 'full'
Provides-Extra: full-stable
Requires-Dist: aiohttp (==3.5.4) ; extra == 'full-stable'
Requires-Dist: altgraph (==0.16.1) ; extra == 'full-stable'
Requires-Dist: asn1crypto (==0.24.0) ; extra == 'full-stable'
Requires-Dist: astroid (==2.2.5) ; extra == 'full-stable'
Requires-Dist: async-timeout (==3.0.1) ; extra == 'full-stable'
Requires-Dist: atomicwrites (==1.3.0) ; extra == 'full-stable'
Requires-Dist: attrs (==19.1.0) ; extra == 'full-stable'
Requires-Dist: cffi (==1.12.3) ; extra == 'full-stable'
Requires-Dist: chardet (==3.0.4) ; extra == 'full-stable'
Requires-Dist: Click (==7.0) ; extra == 'full-stable'
Requires-Dist: colorama (==0.4.1) ; extra == 'full-stable'
Requires-Dist: crontab (==0.22.5) ; extra == 'full-stable'
Requires-Dist: cryptography (==2.6.1) ; extra == 'full-stable'
Requires-Dist: Flask (==1.0.2) ; extra == 'full-stable'
Requires-Dist: Flask-Admin (==1.5.3) ; extra == 'full-stable'
Requires-Dist: Flask-BasicAuth (==0.2.0) ; extra == 'full-stable'
Requires-Dist: Flask-Login (==0.4.1) ; extra == 'full-stable'
Requires-Dist: freeopcua (==0.90.6) ; extra == 'full-stable'
Requires-Dist: future (==0.17.1) ; extra == 'full-stable'
Requires-Dist: idna (==2.8) ; extra == 'full-stable'
Requires-Dist: idna-ssl (==1.1.0) ; extra == 'full-stable'
Requires-Dist: isort (==4.3.18) ; extra == 'full-stable'
Requires-Dist: itsdangerous (==1.1.0) ; extra == 'full-stable'
Requires-Dist: Jinja2 (==2.10.1) ; extra == 'full-stable'
Requires-Dist: lazy-object-proxy (==1.4.0) ; extra == 'full-stable'
Requires-Dist: lxml (==4.3.3) ; extra == 'full-stable'
Requires-Dist: macholib (==1.11) ; extra == 'full-stable'
Requires-Dist: MarkupSafe (==1.1.1) ; extra == 'full-stable'
Requires-Dist: mccabe (==0.6.1) ; extra == 'full-stable'
Requires-Dist: more-itertools (==7.0.0) ; extra == 'full-stable'
Requires-Dist: multidict (==4.5.2) ; extra == 'full-stable'
Requires-Dist: opcua (==0.98.7) ; extra == 'full-stable'
Requires-Dist: pefile (==2019.4.18) ; extra == 'full-stable'
Requires-Dist: pluggy (==0.11.0) ; extra == 'full-stable'
Requires-Dist: psutil (==5.6.2) ; extra == 'full-stable'
Requires-Dist: py (==1.8.0) ; extra == 'full-stable'
Requires-Dist: pycparser (==2.19) ; extra == 'full-stable'
Requires-Dist: pymodbus (==2.2.0) ; extra == 'full-stable'
Requires-Dist: pyserial (==3.4) ; extra == 'full-stable'
Requires-Dist: python-dateutil (==2.8.0) ; extra == 'full-stable'
Requires-Dist: pytz (==2019.1) ; extra == 'full-stable'
Requires-Dist: pywin32-ctypes (==0.2.0) ; extra == 'full-stable'
Requires-Dist: six (==1.12.0) ; extra == 'full-stable'
Requires-Dist: typed-ast (==1.3.5) ; extra == 'full-stable'
Requires-Dist: typing-extensions (==3.7.2) ; extra == 'full-stable'
Requires-Dist: Werkzeug (==0.15.2) ; extra == 'full-stable'
Requires-Dist: wrapt (==1.11.1) ; extra == 'full-stable'
Requires-Dist: WTForms (==2.2.1) ; extra == 'full-stable'
Requires-Dist: yarl (==1.3.0) ; extra == 'full-stable'

netdef
======

* Documentation: Not yet finished. Working on it.
* Bitbucket: https://bitbucket.org/fholmer/netdef
* GitHub: https://github.com/fholmer/netdef
* PyPI: https://pypi.org/project/netdef/
* License: GNU Lesser General Public License v3 or later (LGPLv3+)

Summary
-------

An application framework with built-in drivers (Controllers),
data holders (Sources) and config parsers (Rules).
Also includes a web interface for configuration and troubleshooting.

Features
--------

* Abstract base classes for creating custom controllers, sources and rules
* The configuration is done using configparser with extended interpolation
* Start a new netdef project with cookiecutter. Templates available at https://bitbucket.org/fholmer/cookiecutter-netdef.
* Code in Rule-Source-Controller design pattern.

Built-in Controllers:

* OpcUa server / client ([freeopcua](https://pypi.org/project/freeopcua/))
* TcpModbus server / client ([pymodbus](https://pypi.org/project/pymodbus/))
* icmp ping / url ping
* XmlRpc client
* trigger events by using crontab format ([crontab](https://pypi.org/project/crontab/))
* disk, memory and CPU monitoring ([psutil](https://pypi.org/project/psutil/))
* MQTT client (using a simple messaging format called DataAccess) ([paho-mqtt](https://pypi.org/project/paho-mqtt/))
* Simple RESTJson client

Built-in Rules:

* Generic CSV config parser

Built-in application engines:

* threaded engine with stdout/stderr only
* threaded engine with web-interface (webadmin)
* serve webadmin behind nginx reverse proxy

Use Cases
---------

Netdef is useful if you want to create a middleware that can translate a
protocol into a completely different protocol or data format into a completely
different data format.

Getting started
---------------

First install cookiecutter and netdef templates:

    $ python3 -m venv cookiecutter/
    $ cookiecutter/bin/pip install cookiecutter
    $ hg clone https://bitbucket.org/fholmer/cookiecutter-netdef cookiecutter/cookiecutter-netdef

Create your first application:

    $ cookiecutter/bin/cookiecutter cookiecutter/cookiecutter-netdef/cookiecutter-minimal-app

Cookiecutter and netdef-templates can now be removed if you wish.

Setup your application:

    $ cd your-application
    $ python3 -m venv venv
    $ source venv/bin/activate
    $ pip install -r requirements-dev.txt
    $ pip install -r requirements.txt


