From f5604193e6ca9efcc904fa38c0c7fda12dae8ece Mon Sep 17 00:00:00 2001 From: Benjamin Bertrand <benjamin.bertrand@esss.se> Date: Wed, 13 Dec 2017 14:46:05 +0100 Subject: [PATCH] Allow to register MAC addresses with items --- app/inventory/forms.py | 16 ++++++++++++++-- app/inventory/views.py | 1 + app/networks/forms.py | 2 +- app/templates/inventory/create_item.html | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/inventory/forms.py b/app/inventory/forms.py index ff89563..008c72e 100644 --- a/app/inventory/forms.py +++ b/app/inventory/forms.py @@ -9,10 +9,19 @@ This module defines the inventory blueprint forms. :license: BSD 2-Clause, see LICENSE for more details. """ +import re from flask_wtf import FlaskForm -from wtforms import SelectField, StringField, SelectMultipleField, validators +from wtforms import SelectField, StringField, validators from .. import utils, models +MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$') + + +def check_mac_addresses_list(form, field): + for address in field.data.split(): + if MAC_ADDRESS_RE.match(address) is None: + raise validators.ValidationError('Invalid Mac address') + class AttributeForm(FlaskForm): name = StringField('name', validators=[validators.DataRequired()]) @@ -29,7 +38,10 @@ class ItemForm(FlaskForm): location_id = SelectField('Location') status_id = SelectField('Status') parent_id = SelectField('Parent') - # macs = SelectMultipleField('Macs') + mac_addresses = StringField( + 'MAC addresses', + description='space separated list of MAC addresses', + validators=[validators.Optional(), check_mac_addresses_list]) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/app/inventory/views.py b/app/inventory/views.py index 6347dd4..33bf7a4 100644 --- a/app/inventory/views.py +++ b/app/inventory/views.py @@ -81,6 +81,7 @@ def create_item(): location_id=form.location_id.data or None, status_id=form.status_id.data or None, parent_id=form.parent_id.data or None) + item.macs = [models.Mac(address=address) for address in form.mac_addresses.data.split()] current_app.logger.debug(f'Trying to create: {item!r}') db.session.add(item) try: diff --git a/app/networks/forms.py b/app/networks/forms.py index 0cbba4b..cc36dcd 100644 --- a/app/networks/forms.py +++ b/app/networks/forms.py @@ -10,7 +10,7 @@ This module defines the networks blueprint forms. """ from flask_wtf import FlaskForm -from wtforms import SelectField, StringField, SelectMultipleField, validators +from wtforms import SelectField, StringField, validators from .. import utils, models diff --git a/app/templates/inventory/create_item.html b/app/templates/inventory/create_item.html index 3f0bfe0..fca4dcd 100644 --- a/app/templates/inventory/create_item.html +++ b/app/templates/inventory/create_item.html @@ -24,6 +24,7 @@ {{ render_field(form.location_id) }} {{ render_field(form.status_id) }} {{ render_field(form.parent_id) }} + {{ render_field(form.mac_addresses) }} <div class="form-group row"> <div class="col-sm-10"> <button type="submit" class="btn btn-primary">Submit</button> -- GitLab