diff --git a/app/inventory/forms.py b/app/inventory/forms.py index ff8956343a17c248b22a52067ae4ec28e3f79534..008c72e5d89329228039633a73bdad17223b5c1b 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 6347dd4fdf1ae001ddca642ff0410089c62e4a71..33bf7a4b8bea65d84b1c7cd4cccee55bdb188666 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 0cbba4b7f20254db64aeba9680c05555725c0d00..cc36dcd600ea97300acd19c66dd1ec170315333a 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 3f0bfe04880e9e7264b4511685bb4aa687e72103..fca4dcd36cc72d6a0426ca8821f616000cd31711 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>