From 2bb2eefa7747ef1fa30860b2a5d08d736fa6f22b Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Tue, 19 Dec 2017 22:36:26 +0100
Subject: [PATCH] Code cleaning

Move regex to validators.py
---
 app/admin/views.py     | 3 +--
 app/inventory/forms.py | 4 ++--
 app/models.py          | 5 +----
 app/network/forms.py   | 8 ++++----
 app/validators.py      | 3 +++
 5 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/app/admin/views.py b/app/admin/views.py
index 8ab0a16..96f75ed 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -13,8 +13,7 @@ from wtforms import validators, fields
 from flask_admin.contrib import sqla
 from flask_admin.model.form import converts
 from flask_login import current_user
-from ..validators import IPNetwork
-from ..models import ICS_ID_RE
+from ..validators import IPNetwork, ICS_ID_RE
 
 
 # Monkey patch flask-admin Unique validator to disable it
diff --git a/app/inventory/forms.py b/app/inventory/forms.py
index 90163be..e07a02f 100644
--- a/app/inventory/forms.py
+++ b/app/inventory/forms.py
@@ -11,7 +11,7 @@ This module defines the inventory blueprint forms.
 """
 from wtforms import SelectField, StringField, TextAreaField, validators
 from ..helpers import CSEntryForm
-from ..validators import Unique, RegexpList, MAC_ADDRESS_RE
+from ..validators import Unique, RegexpList, ICS_ID_RE, MAC_ADDRESS_RE
 from .. import utils, models
 
 
@@ -22,7 +22,7 @@ class AttributeForm(CSEntryForm):
 class ItemForm(CSEntryForm):
     ics_id = StringField('ICS id',
                          validators=[validators.InputRequired(),
-                                     validators.Regexp(models.ICS_ID_RE),
+                                     validators.Regexp(ICS_ID_RE),
                                      Unique(models.Item, 'ics_id')])
     serial_number = StringField('Serial number',
                                 validators=[validators.InputRequired()])
diff --git a/app/models.py b/app/models.py
index c32d22e..6577077 100644
--- a/app/models.py
+++ b/app/models.py
@@ -10,7 +10,6 @@ This module implements the models used in the app.
 
 """
 import ipaddress
-import re
 import qrcode
 import sqlalchemy as sa
 from sqlalchemy.dialects import postgresql
@@ -23,12 +22,10 @@ from flask_login import UserMixin
 from wtforms import ValidationError
 from .extensions import db, login_manager, ldap_manager
 from .plugins import FlaskUserPlugin
+from .validators import ICS_ID_RE, HOST_NAME_RE, VLAN_NAME_RE
 from . import utils
 
 
-ICS_ID_RE = re.compile('[A-Z]{3}[0-9]{3}')
-HOST_NAME_RE = re.compile('^[a-z0-9\-]{2,20}$')
-VLAN_NAME_RE = re.compile('^[A-Za-z0-9\-]{3,25}$')
 make_versioned(plugins=[FlaskUserPlugin()])
 
 
diff --git a/app/network/forms.py b/app/network/forms.py
index c141eb3..7f563fe 100644
--- a/app/network/forms.py
+++ b/app/network/forms.py
@@ -13,7 +13,7 @@ from flask_login import current_user
 from wtforms import (SelectField, StringField, TextAreaField,
                      SelectMultipleField, BooleanField, validators)
 from ..helpers import CSEntryForm
-from ..validators import Unique
+from ..validators import Unique, HOST_NAME_RE, VLAN_NAME_RE
 from .. import utils, models
 
 
@@ -45,7 +45,7 @@ class NetworkForm(CSEntryForm):
     vlan_name = StringField('Vlan name',
                             description='hostname must be 3-25 characters long and contain only letters, numbers and dash',
                             validators=[validators.InputRequired(),
-                                        validators.Regexp(models.VLAN_NAME_RE),
+                                        validators.Regexp(VLAN_NAME_RE),
                                         Unique(models.Network, column='vlan_name')])
     vlan_id = NoValidateSelectField('Vlan id', choices=[])
     description = TextAreaField('Description')
@@ -64,7 +64,7 @@ class HostForm(CSEntryForm):
     name = StringField('Hostname',
                        description='hostname must be 2-20 characters long and contain only letters, numbers and dash',
                        validators=[validators.InputRequired(),
-                                   validators.Regexp(models.HOST_NAME_RE),
+                                   validators.Regexp(HOST_NAME_RE),
                                    Unique(models.Host)],
                        filters=[utils.lowercase_field])
     type = SelectField('Type', choices=utils.get_choices(('Virtual', 'Physical')))
@@ -86,7 +86,7 @@ class InterfaceForm(CSEntryForm):
         'Interface name',
         description='name must be 2-20 characters long and contain only letters, numbers and dash',
         validators=[validators.InputRequired(),
-                    validators.Regexp(models.HOST_NAME_RE),
+                    validators.Regexp(HOST_NAME_RE),
                     Unique(models.Interface)],
         filters=[utils.lowercase_field])
     mac_id = SelectField('MAC', coerce=utils.coerce_to_str_or_none)
diff --git a/app/validators.py b/app/validators.py
index 88f8f9a..004543e 100644
--- a/app/validators.py
+++ b/app/validators.py
@@ -14,6 +14,9 @@ import re
 import sqlalchemy as sa
 from wtforms import ValidationError
 
+ICS_ID_RE = re.compile('[A-Z]{3}[0-9]{3}')
+HOST_NAME_RE = re.compile('^[a-z0-9\-]{2,20}$')
+VLAN_NAME_RE = re.compile('^[A-Za-z0-9\-]{3,25}$')
 MAC_ADDRESS_RE = re.compile('^(?:[0-9a-fA-F]{2}[:-]){5}[0-9a-fA-F]{2}$')
 
 
-- 
GitLab