~kissiel/checkbox/validation-rework

« back to all changes in this revision

Viewing changes to plainbox/plainbox/impl/unit/category.py

  • Committer: Maciej Kisielewski
  • Date: 2016-09-28 20:10:43 UTC
  • Revision ID: maciej.kisielewski@canonical.com-20160928201043-tzbv9q9fuuc8yi7f
plainbox:unit: make validation work on validator instances ONLY

Previously field_validators of any unit could be a IFieldValidator instance, a
IFieldValidator descendant, or a list containg any of the previous two.
This was unintuitive, and as measurements shown, subotimal.

This patch replaces all that with instances.

It introduces concrete_validators module that contains commonly used
validators, so callees don't have to re-instantiate them.

Signed-off-by: Maciej Kisielewski <maciej.kisielewski@canonical.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
import logging
32
32
 
33
 
from plainbox.i18n import gettext as _
34
33
from plainbox.i18n import gettext_noop as N_
35
34
from plainbox.impl.symbol import SymbolDef
 
35
from plainbox.impl.unit import concrete_validators
36
36
from plainbox.impl.unit.unit_with_id import UnitWithId
37
 
from plainbox.impl.unit.validators import CorrectFieldValueValidator
38
 
from plainbox.impl.unit.validators import PresentFieldValidator
39
 
from plainbox.impl.unit.validators import TemplateVariantFieldValidator
40
 
from plainbox.impl.unit.validators import TranslatableFieldValidator
41
 
from plainbox.impl.validation import Problem
42
 
from plainbox.impl.validation import Severity
43
37
 
44
38
__all__ = ['CategoryUnit']
45
39
 
108
102
 
109
103
        field_validators = {
110
104
            fields.name: [
111
 
                TranslatableFieldValidator,
112
 
                TemplateVariantFieldValidator,
113
 
                PresentFieldValidator,
114
 
                # We want the name to be a single line
115
 
                CorrectFieldValueValidator(
116
 
                    lambda name: name.count("\n") == 0,
117
 
                    Problem.wrong, Severity.warning,
118
 
                    message=_("please use only one line"),
119
 
                    onlyif=lambda unit: unit.name is not None),
120
 
                # We want the name to be relatively short
121
 
                CorrectFieldValueValidator(
122
 
                    lambda name: len(name) <= 80,
123
 
                    Problem.wrong, Severity.warning,
124
 
                    message=_("please stay under 80 characters"),
125
 
                    onlyif=lambda unit: unit.name is not None),
 
105
                concrete_validators.translatable,
 
106
                concrete_validators.templateVariant,
 
107
                concrete_validators.present,
 
108
                concrete_validators.oneLine,
 
109
                concrete_validators.shortValue,
126
110
            ]
127
111
        }