netdef.Engines package

Abstract baseclass

BaseEngine

This is an abstract baseclass

class netdef.Engines.BaseEngine.BaseEngine(shared=None)[source]

Bases: object

add_controller_classes(controllers)[source]
add_rule_classes(rules)[source]
add_shared_object(shared)[source]
add_source_classes(sources)[source]
static block()[source]
init()[source]
load(base_package)[source]
start()[source]
stop()[source]
wait()[source]
class netdef.Engines.BaseEngine.BaseExpressionExecutor(name, shared)[source]

Bases: object

add_interrupt(interrupt)[source]
add_name(name)[source]
add_shared(shared)[source]
handle_run_expression(source_item, expressions, value, source_time, status_code)[source]
has_interrupt()[source]
init_queue()[source]
loop_incoming()[source]
run()[source]

Expressions

Expression

class netdef.Engines.expression.Expression.Argument(source_instance, instigator, frozen_value=None)[source]

Bases: object

A wrapper for source instances.

Parameters:
  • source_instance (BaseSource) – An source instance
  • instigator (boolean) – True if given source instance triggered the execution
controller

Returns the controller attribute from source instance

create_interface(value=None)[source]

Wrap given value into the source interface. (See interface attr of netdef.Sources.BaseSource.BaseSource)

Parameters:value (object) – value to be wrapped
Returns:An interface instance
Return type:netdef.Interfaces.DefaultInterface
get

Returns the value from source instance. NB! this is not a frozen copy of the value. It may change if the controller updates the value.

instance

reference to the source instance

key

Returns the key attribute from source instance

new

Returns True if source triggered the expression and this is the first value. (StatusCode.INITIAL)

set

Write a new value to the source. This will trigger a WRITE_SOURCE message to the controller.

status_ok

Returns True if value is StatusCode.GOOD or StatusCode.INITIAL

update

Returns True if source triggered the expression. (StatusCode.GOOD or INVALID)

value

a frozen copy of the value in self.instance.get

class netdef.Engines.expression.Expression.Expression(expression, filename)[source]

Bases: object

A class containing a reference to the expression-function and references to the source-instances that will become arguments to the expression function

Parameters:
  • expression (callable) – A reference to the actual function
  • filename (str) – Filename of the module where the function is found
add_arg(arg)[source]

arg: this should be a source instance

add_kwarg(keyword, arg)[source]

This could be anything. This function exist for you to extend arguments for the expressions. netdef itself do not use this

disable()[source]

If there is problems with the expression it can be automaticly disabled by calling this function

execute(args, kwargs)[source]

Execute the expression-function with given arguments

get_args(source_instance=None, frozen_value=None)[source]

Wrap each source-instance into its own Argument instance Return a tuple of Arguments

get_kwargs()[source]

Collector

class netdef.Engines.expression.Collector.Collector(fn, wait, mode)[source]

Bases: object

Takes a function but does not call it right away. After the given wait time has elapsed the function is called based on the given mode.

Parameters:
  • fn (callable) – a function or callable
  • wait (float) – seconds to wait
  • mode (Mode) – how to call the callable
__call__(*args)[source]

Add arguments to a queue. Only the first call will acquire self.lock and sleep until wait time has elapsed. After sleep the arguments in queue is used to call the function self.fn based on the chosen mode.

class netdef.Engines.expression.Collector.Mode[source]

Bases: enum.Enum

collector modes

FIRST = 1

Use arguments from the first call

FIRST_WITH_EVENT = 4

Use arguments from the first call and an additional argument called event

LAST = 2

Use arguments from the last call

LAST_WITH_EVENT = 5

Use arguments from the last call and an additional argument called event

LIST_ALL = 3

Convert arguments to lists with every call

netdef.Engines.expression.Collector.collect(wait, mode)[source]

A decorator for expressions.

Usage:

from netdef.Engines.expression.Collector import collect, Mode

@collect(wait=0.1, mode=Mode.LIST_ALL)
def expression(c1, c2, c3):
    pass

Built-in engine modules

ThreadedEngine

class netdef.Engines.ThreadedEngine.ExpressionExecutor(*args, **kwargs)[source]

Bases: netdef.Engines.BaseEngine.BaseExpressionExecutor

handle_run_expression(source_item, expressions, value, source_time, status_code)[source]
loop_futures()[source]
run()[source]
class netdef.Engines.ThreadedEngine.ThreadedEngine(shared)[source]

Bases: netdef.Engines.BaseEngine.BaseEngine

static block()[source]
init()[source]
load(base_package)[source]
start()[source]
stop()[source]
wait()[source]

ThreadedWebGuiEngine

class netdef.Engines.ThreadedWebGuiEngine.ThreadedWebGuiEngine(shared)[source]

Bases: netdef.Engines.ThreadedEngine.ThreadedEngine

Integrates a simple werkzeug webserver to serve flask_admin webpages

block()[source]

Run webserver and wait for KeyboardInterrupt

get_flask_app()[source]

Returns the main flask app.

Common use case is to integrate an existing flask app.

main.py Example:

def init_app(app):

    @app.route('/')
    def hello_world():
        return 'Hello, World!'
    
    return app


def main():
    ...

    engine = ThreadedWebGuiEngine.ThreadedWebGuiEngine(shared)

    # here we go
    init_app(engine.get_flask_app())

    engine.add_controller_classes(controllers)
    engine.add_source_classes(sources)
    engine.add_rule_classes(rules)
    engine.load([__package__, 'netdef'])
    engine.init()
    engine.start()
    engine.block() # until ctrl-c or SIG_TERM
    engine.stop()
    ...
init()[source]
load(base_package)[source]
netdef.Engines.ThreadedWebGuiEngine.init_app(app, webadmin_views, shared)[source]

Configure flask. Setup flask_admin and flask_login

netdef.Engines.ThreadedWebGuiEngine.make_admin_users_dict(config, section)[source]

NginxWebGuiReverseProxy

class netdef.Engines.NginxWebGuiReverseProxy.NginxReverseProxy(shared)[source]

Bases: netdef.Engines.ThreadedWebGuiEngine.ThreadedWebGuiEngine

block()[source]

Run webserver and wait for KeyboardInterrupt

Webadmin

AdminIndex

class netdef.Engines.webadmin.AdminIndex.LoginForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

get_user()[source]
login = <UnboundField(StringField, (), {'validators': [<wtforms.validators.Required object>]})>
password = <UnboundField(PasswordField, (), {'validators': [<wtforms.validators.Required object>]})>
validate_login(field)[source]
class netdef.Engines.webadmin.AdminIndex.MyAdminIndexView(name=None, category=None, endpoint=None, url=None, template='admin/index.html', menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.base.AdminIndexView

command_result_view()[source]
index()[source]
login_view()[source]
logout_view()[source]
restart_view()[source]
restarting = 0
shutdown_view()[source]
shuttingdown = 0
class netdef.Engines.webadmin.AdminIndex.User(userid, roles)[source]

Bases: flask_login.mixins.UserMixin

has_role(roles)[source]
netdef.Engines.webadmin.AdminIndex.shutdown_server()[source]

ExpressionsView

class netdef.Engines.webadmin.ExpressionsView.ExpressionsModel(expression)[source]

Bases: object

function_arguments
function_name
module_filename
class netdef.Engines.webadmin.ExpressionsView.ExpressionsModelForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

function_arguments = <UnboundField(StringField, ('function_arguments',), {})>
function_name = <UnboundField(StringField, ('function_name',), {})>
module_filename = <UnboundField(StringField, ('module_filename',), {})>
class netdef.Engines.webadmin.ExpressionsView.ExpressionsModelView(model, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView, flask_admin.model.base.BaseModelView

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

can_create = False
can_delete = False
can_edit = False
column_list = ('module_filename', 'function_name', 'function_arguments')
column_searchable_list = ('module_filename', 'function_name', 'function_arguments')
column_sortable_list = ()
create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export(export_type)
form

alias of ExpressionsModelForm

get_list(page, sort_field, sort_desc, search, filters, page_size=None)[source]

Return a paginated and sorted list of models from the data source.

Must be implemented in the child class.

Parameters:
  • page – Page number, 0 based. Can be set to None if it is first page.
  • sort_field – Sort column name or None.
  • sort_desc – If set to True, sorting is in descending order.
  • search – Search query
  • filters – List of filter tuples. First value in a tuple is a search index, second value is a search value.
  • page_size – Number of results. Defaults to ModelView’s page_size. Can be overriden to change the page_size limit. Removing the page_size limit requires setting page_size to 0 or False.
get_pk_value(model_)[source]

Return PK value from a model object.

index_view()

List view

Initialize search. If data provider does not support search, init_search will return False.

is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

static sampling(selection, offset=0, limit=None)[source]
netdef.Engines.webadmin.ExpressionsView.setup(admin)[source]

FileModel

class netdef.Engines.webadmin.FileModel.Files(base_path, *args, **kwargs)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView, flask_admin.contrib.fileadmin.FileAdmin

action_view()
allowed_extensions = ('txt', 'conf', 'csv', 'der', 'pam', 'key', 'zip', 'gz', '7z', 'py', 'ini', 'yaml')
can_download = True
delete()

Delete view method

download(path=None)

Download view method.

Parameters:path – File path.
edit()

Edit view method

edit_template = 'admin/fileedit.html'
editable_extensions = ('txt', 'conf', 'csv', 'py', 'ini', 'yaml')
get_edit_form()[source]

Create form class for file editing view.

Override to implement customized behavior.

index(path=None)
index_view(path=None)

Index view method

Parameters:path – Optional directory path. If not provided, will use the base directory
is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

is_accessible_path(path)[source]

Verify if the provided path is accessible for the current user.

Override to customize behavior.

Parameters:path – Relative path to the root
list_template = 'admin/filelist.html'
mkdir(path=None)

Directory creation view method

Parameters:path – Optional directory path. If not provided, will use the base directory
rename()

Rename view method

upload(path=None)

Upload view method

Parameters:path – Optional directory path. If not provided, will use the base directory
class netdef.Engines.webadmin.FileModel.InstallationRepo(base_path, *args, **kwargs)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView, flask_admin.contrib.fileadmin.FileAdmin

action_view()
allowed_extensions = ('zip', 'whl', 'gz')
can_download = True
can_rename = False
delete()

Delete view method

download(path=None)

Download view method.

Parameters:path – File path.
edit()

Edit view method

index(path=None)
index_view(path=None)

Index view method

Parameters:path – Optional directory path. If not provided, will use the base directory
is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

list_template = 'admin/filelist.html'
mkdir(path=None)

Directory creation view method

Parameters:path – Optional directory path. If not provided, will use the base directory
rename()

Rename view method

upload(path=None)

Upload view method

Parameters:path – Optional directory path. If not provided, will use the base directory
netdef.Engines.webadmin.FileModel.setup(admin)[source]

MyBaseView

class netdef.Engines.webadmin.MyBaseView.MyBaseView(name=None, category=None, endpoint=None, url=None, static_folder=None, static_url_path=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.base.BaseView

has_role(roles)[source]
inaccessible_callback(name, **kwargs)[source]

Handle the response to inaccessible views.

By default, it throw HTTP 403 error. Override this method to customize the behaviour.

is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

SettingsModel

class netdef.Engines.webadmin.SettingsModel.SettingsModel(section, key, value)[source]

Bases: object

key
section
value
class netdef.Engines.webadmin.SettingsModel.SettingsModelForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

key = <UnboundField(StringField, ('key',), {})>
section = <UnboundField(StringField, ('section',), {})>
value = <UnboundField(StringField, ('value',), {})>
class netdef.Engines.webadmin.SettingsModel.SettingsModelView(model, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView, flask_admin.model.base.BaseModelView

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

can_create = False
can_delete = False
can_edit = False
column_list = ('section', 'key', 'value')
column_searchable_list = 'key'
column_sortable_list = ()
create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export(export_type)
form

alias of SettingsModelForm

get_list(page, sort_field, sort_desc, search, filters, page_size=None)[source]

Return a paginated and sorted list of models from the data source.

Must be implemented in the child class.

Parameters:
  • page – Page number, 0 based. Can be set to None if it is first page.
  • sort_field – Sort column name or None.
  • sort_desc – If set to True, sorting is in descending order.
  • search – Search query
  • filters – List of filter tuples. First value in a tuple is a search index, second value is a search value.
  • page_size – Number of results. Defaults to ModelView’s page_size. Can be overriden to change the page_size limit. Removing the page_size limit requires setting page_size to 0 or False.
get_pk_value(model_)[source]

Return PK value from a model object.

index_view()

List view

Initialize search. If data provider does not support search, init_search will return False.

is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

static sampling(selection, offset=0, limit=None)[source]
netdef.Engines.webadmin.SettingsModel.setup(admin)[source]

SourcesModel

class netdef.Engines.webadmin.SourcesModel.SourcesModelForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

key = <UnboundField(StringField, ('key',), {'render_kw': {'readonly': True}})>
process(*args, **kwargs)[source]

Take form, object data, and keyword arg input and have the fields process them.

Parameters:
  • formdata – Used to pass data coming from the enduser, usually request.POST or equivalent.
  • obj – If formdata is empty or not provided, this object is checked for attributes matching form field names, which will be used for field values.
  • data – If provided, must be a dictionary of data. This is only used if formdata is empty or not provided and obj does not contain an attribute named the same as the field.
  • **kwargs – If formdata is empty or not provided and obj does not contain an attribute named the same as a field, form will assign the value of a matching keyword argument to the field, if one exists.
set_origin = <UnboundField(StringField, ('set_origin',), {'render_kw': {'readonly': True}})>
set_source_time = <UnboundField(StringField, ('set_source_time',), {'render_kw': {'readonly': True}})>
set_status_code = <UnboundField(StringField, ('set_status_code',), {'render_kw': {'readonly': True}})>
set_value = <UnboundField(StringField, ('set_value',), {'render_kw': {'readonly': True}})>
source = <UnboundField(StringField, ('source',), {'render_kw': {'readonly': True}})>
source_datatype = <UnboundField(StringField, ('source_datatype',), {'render_kw': {'readonly': True}})>
class netdef.Engines.webadmin.SourcesModel.SourcesModelView(model, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView, flask_admin.model.base.BaseModelView

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

can_create = False
can_delete = False
can_edit = True
can_view_details = True
column_details_list = ('key', 'rule', 'source', 'controller', 'value_as_string', 'status_code', 'source_time', 'source_datatype', 'get_value', 'get_source_time', 'get_status_code', 'get_origin', 'set_value', 'set_source_time', 'set_status_code', 'set_origin')
column_list = ('key', 'rule', 'source', 'controller', 'value_as_string', 'status_code', 'source_time')
column_searchable_list = ('key', 'rule', 'source', 'controller', 'value')
column_sortable_list = ()
create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export(export_type)
form

alias of SourcesModelForm

get_list(page, sort_field, sort_desc, search, filters, page_size=None)[source]

Return a paginated and sorted list of models from the data source.

Must be implemented in the child class.

Parameters:
  • page – Page number, 0 based. Can be set to None if it is first page.
  • sort_field – Sort column name or None.
  • sort_desc – If set to True, sorting is in descending order.
  • search – Search query
  • filters – List of filter tuples. First value in a tuple is a search index, second value is a search value.
  • page_size – Number of results. Defaults to ModelView’s page_size. Can be overriden to change the page_size limit. Removing the page_size limit requires setting page_size to 0 or False.
get_one(ref)[source]

Return one model by its id.

Must be implemented in the child class.

Parameters:id – Model id
get_pk_value(model_)[source]

Return PK value from a model object.

index_view()

List view

Initialize search. If data provider does not support search, init_search will return False.

is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

static sampling(selection, offset=0, limit=None)[source]
update_model(form, model)[source]

Update model from the form.

Returns True if operation succeeded.

Must be implemented in the child class.

Parameters:
  • form – Form instance
  • model – Model instance
netdef.Engines.webadmin.SourcesModel.setup(admin)[source]

StatisticsModel

class netdef.Engines.webadmin.StatisticsModel.StatisticsModel(key, value)[source]

Bases: object

key
value
class netdef.Engines.webadmin.StatisticsModel.StatisticsModelForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

key = <UnboundField(StringField, ('key',), {})>
value = <UnboundField(StringField, ('value',), {})>
class netdef.Engines.webadmin.StatisticsModel.StatisticsModelView(model, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.SourcesModel.SourcesModelView

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

can_create = False
can_delete = False
can_edit = False
can_view_details = False
column_list = ('key', 'value')
column_searchable_list = 'key'
column_sortable_list = ()
create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export(export_type)
form

alias of StatisticsModelForm

get_list(page, sort_field, sort_desc, search, filters, page_size=None)[source]

Return a paginated and sorted list of models from the data source.

Must be implemented in the child class.

Parameters:
  • page – Page number, 0 based. Can be set to None if it is first page.
  • sort_field – Sort column name or None.
  • sort_desc – If set to True, sorting is in descending order.
  • search – Search query
  • filters – List of filter tuples. First value in a tuple is a search index, second value is a search value.
  • page_size – Number of results. Defaults to ModelView’s page_size. Can be overriden to change the page_size limit. Removing the page_size limit requires setting page_size to 0 or False.
get_pk_value(model_)[source]

Return PK value from a model object.

index_view()

List view

netdef.Engines.webadmin.StatisticsModel.setup(admin)[source]

Tools

class netdef.Engines.webadmin.Tools.Tools(name=None, category=None, endpoint=None, url=None, static_folder=None, static_url_path=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView

autoupgrade()[source]
autoupgrade_upgrade()[source]
echo()[source]
index()[source]
is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

logfile()[source]
netdef.Engines.webadmin.Tools.get_update_cmd(executable, no_index, pre, force_reinstall, find_links, trusted_host, minimal_timeout, package)[source]
netdef.Engines.webadmin.Tools.setup(admin, view=None)[source]
netdef.Engines.webadmin.Tools.stdout_from_terminal(*command, err_msg=None)[source]
netdef.Engines.webadmin.Tools.stdout_from_terminal_as_generator(*command, err_msg=None, pre='', post='')[source]

SecurityWebadminView

class netdef.Engines.webadmin.SecurityWebadminView.BasicSecurityForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: netdef.Engines.webadmin.SecurityWebadminView.SecurityForm

new_flask_secret = <UnboundField(SelectField, ('Renew session cookie',), {'choices': [('yes', 'Yes'), ('no', 'No')]})>
old_password = None
validate_password = None
class netdef.Engines.webadmin.SecurityWebadminView.SecurityForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

confirm = <UnboundField(PasswordField, ('Repeat Password',), {})>
login = <UnboundField(StringField, ('Login', [<wtforms.validators.Required object>]), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'webadmin', 'users.admin.user', fallback='admin')})>
new_flask_secret = <UnboundField(SelectField, ('Renew session cookie',), {'choices': [('no', 'No'), ('yes', 'Yes')]})>
old_password = <UnboundField(PasswordField, ('Current password',), {})>
password = <UnboundField(PasswordField, ('New Password',), {})>
ssl_certificate = <UnboundField(SelectField, ('SSL Certificate',), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'webadmin', 'ssl_certificate', fallback=''), 'choices': []})>
ssl_certificate_key = <UnboundField(SelectField, ('SSL Key',), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'webadmin', 'ssl_certificate_key', fallback=''), 'choices': []})>
ssl_on = <UnboundField(SelectField, ('HTTPS On',), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'webadmin', 'ssl_on', fallback='0'), 'choices': [('0', 'Off'), ('1', 'On')]})>
update_on = <UnboundField(SelectField, ('Package upgrade',), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'auto_update', 'on', fallback=0), 'choices': [('0', 'Disable'), ('1', 'Enable')]})>
update_pre_release = <UnboundField(SelectField, ('Accept pre-releases',), {'default': functools.partial(<bound method RawConfigParser.get of <configparser.ConfigParser object>>, 'auto_update', 'pre_release', fallback=0), 'choices': [('0', 'No'), ('1', 'Yes')]})>
static validate_old_password(form, field)[source]
static validate_password(form, field)[source]
class netdef.Engines.webadmin.SecurityWebadminView.SecurityWebadminView(name=None, category=None, endpoint=None, url=None, static_folder=None, static_url_path=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView

choices_crts = [('', 'None')]
choices_keys = [('', 'None')]
index()[source]
is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

setup_conf_secrets_and_https(webadmin_conf, form)[source]
setup_conf_userdata(webadmin_conf, form)[source]
setup_form_defaults(form)[source]
update_usertable(form)[source]
usertable_is_empty()[source]
netdef.Engines.webadmin.SecurityWebadminView.setup(admin, view=None)[source]

SecurityCertificatesView

class netdef.Engines.webadmin.SecurityCertificatesView.SecurityCertificatesForm(formdata=None, obj=None, prefix='', data=None, meta=None, **kwargs)[source]

Bases: wtforms.form.Form

basicConstraints = <UnboundField(StringField, ('basicConstraints',), {'default': 'CA:TRUE', 'validators': [<wtforms.validators.Regexp object>]})>
cn = <UnboundField(StringField, ('Common name',), {'default': 'build-14281606-project-477358-netdef', 'validators': [<wtforms.validators.Regexp object>], 'render_kw': {'placeholder': 'Hostname, DNS, IP-address or leave it blank'}})>
current_password = <UnboundField(PasswordField, ('Current password',), {})>
days = <UnboundField(IntegerField, ('Days valid',), {'default': 7300})>
dns_1 = <UnboundField(StringField, ('DNS.1',), {'default': 'build-14281606-project-477358-netdef', 'validators': [<wtforms.validators.Regexp object>]})>
dns_2 = <UnboundField(StringField, ('DNS.2',), {'default': '', 'validators': [<wtforms.validators.Regexp object>]})>
dns_3 = <UnboundField(StringField, ('DNS.3',), {'default': '', 'validators': [<wtforms.validators.Regexp object>]})>
extendedKeyUsage = <UnboundField(StringField, ('extendedKeyUsage',), {'default': 'critical, serverAuth', 'validators': [<wtforms.validators.Regexp object>]})>
form_opts = <flask_admin.form.FormOpts object>
gen_opcua = <UnboundField(SelectField, ('OpcUa certificate',), {'default': '1', 'choices': [('0', 'No change'), ('1', 'Generate new')], 'description': 'Following files will be overwritten:<ul><li>ssl/certs/opcua_certificate.pem</li><li>ssl/private/opcua_certificate.pem.key</li><li>ssl/certs/opcua_certificate.der</li><li>ssl/private/opcua_certificate.der.key</li></ul>'})>
gen_webadmin = <UnboundField(SelectField, ('Webadmin certificate',), {'default': '1', 'choices': [('0', 'No change'), ('1', 'Generate new')], 'description': 'Following files will be overwritten:<ul><li>ssl/certs/webadmin_certificate.pem</li><li>ssl/private/webadmin_certificate.pem.key</li><li>ssl/certs/webadmin_certificate.der</li><li>ssl/private/webadmin_certificate.der.key</li></ul>'})>
ip_1 = <UnboundField(StringField, ('IP.1',), {'default': '127.0.0.1', 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.IPAddress object>]})>
ip_2 = <UnboundField(StringField, ('IP.2',), {'default': '172.17.0.2', 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.IPAddress object>]})>
ip_3 = <UnboundField(StringField, ('IP.3',), {'default': '', 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.IPAddress object>]})>
ip_4 = <UnboundField(StringField, ('IP.4',), {'default': '', 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.IPAddress object>]})>
ip_5 = <UnboundField(StringField, ('IP.5',), {'default': '', 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.IPAddress object>]})>
keyUsage = <UnboundField(StringField, ('keyUsage',), {'default': 'critical, cRLSign, digitalSignature, keyCertSign', 'validators': [<wtforms.validators.Regexp object>]})>
subjectAltName = <UnboundField(HiddenField, ('subjectAltName:',), {})>
uri_1 = <UnboundField(StringField, ('URI.1',), {'default': <function get_uri>, 'validators': [<wtforms.validators.Regexp object>]})>
uri_2 = <UnboundField(StringField, ('URI.2',), {'default': '', 'validators': [<wtforms.validators.Regexp object>]})>
uri_3 = <UnboundField(StringField, ('URI.3',), {'default': '', 'validators': [<wtforms.validators.Regexp object>]})>
static validate_current_password(form, field)[source]
class netdef.Engines.webadmin.SecurityCertificatesView.SecurityCertificatesView(name=None, category=None, endpoint=None, url=None, static_folder=None, static_url_path=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: netdef.Engines.webadmin.MyBaseView.MyBaseView

index()[source]
is_accessible()[source]

Override this method to add permission checks.

Flask-Admin does not make any assumptions about the authentication system used in your application, so it is up to you to implement it.

By default, it will allow access for everyone.

netdef.Engines.webadmin.SecurityCertificatesView.get_uri()[source]
netdef.Engines.webadmin.SecurityCertificatesView.setup(admin, view=None)[source]

Views

class netdef.Engines.webadmin.Views.Views(shared=None)[source]

Bases: object

A collection of all loaded webadmin views

add_shared_object(shared)[source]
load(base_packages)[source]
setup(admin)[source]
netdef.Engines.webadmin.Views.register(name)[source]

A decorator to register webadmin views. Example:

from netdef.Engines.webadmin import Views

@Views.register("NewView")
def setup(admin, view=None):
    if not view:
        view = NewView(name='NewView', endpoint='newview')
    admin.add_view(view)
    ...