Skip to content

Commit

Permalink
make invariants a property, rename _validate(), add authoritative_field
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Wiebe committed Jun 28, 2016
1 parent 367d6c6 commit 10905b5
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 20 deletions.
2 changes: 1 addition & 1 deletion src/obscheme/__init__.py
Expand Up @@ -11,4 +11,4 @@
:license: BSD, see LICENSE for more details.
"""

__version__ = '0.1.0'
__version__ = '0.2.0'
8 changes: 5 additions & 3 deletions src/obscheme/field.py
Expand Up @@ -42,6 +42,7 @@ def add_invariant(self, invariant):
self._invariants.append(invariant)

#----------------------------------------------------------------------
@property
def invariants(self):
return tuple(self._invariants)

Expand All @@ -50,12 +51,13 @@ def is_defined(self, value):
return not isinstance(value, Undefined)

#----------------------------------------------------------------------
def validate(self, name, value):
self._validate(name, value)
@property
def authoritative_field(self):
return self

#----------------------------------------------------------------------
@abstractmethod
def _validate(self, name, value):
def validate(self, name, value):
pass

#----------------------------------------------------------------------
Expand Down
10 changes: 4 additions & 6 deletions src/obscheme/fields/list.py
Expand Up @@ -35,14 +35,12 @@ def __init__(self, field):
self.field = field

#----------------------------------------------------------------------
def __getattr__(self, name):
"""Passthrough access to field attributes and methods"""
if not name.startswith('_'):
return getattr(self.field, name)
raise AttributeError(name)
@property
def authoritative_field(self):
return self.field

#----------------------------------------------------------------------
def _validate(self, name, values):
def validate(self, name, values):
for index, value in enumerate(values):
try:
self.field.validate(name, value)
Expand Down
10 changes: 4 additions & 6 deletions src/obscheme/fields/nillable.py
Expand Up @@ -33,14 +33,12 @@ def __init__(self, field):
self.field = field

#----------------------------------------------------------------------
def __getattr__(self, name):
"""Passthrough access to field attributes and methods"""
if not name.startswith('_'):
return getattr(self.field, name)
raise AttributeError(name)
@property
def authoritative_field(self):
return self.field

#----------------------------------------------------------------------
def _validate(self, name, value):
def validate(self, name, value):
if value is not None:
try:
self.field.validate(name, value)
Expand Down
2 changes: 1 addition & 1 deletion src/obscheme/fields/schema_object.py
Expand Up @@ -37,7 +37,7 @@ def factor(self, *a, **kw):
return self.cls(*a, **kw)

#----------------------------------------------------------------------
def _validate(self, name, value):
def validate(self, name, value):
if value is not None:
try:
self.field.validate(name, value)
Expand Down
2 changes: 1 addition & 1 deletion src/obscheme/fields/string.py
Expand Up @@ -56,7 +56,7 @@ def __init__(self, min_length=None, max_length=None):
self.max_length = max_length

#----------------------------------------------------------------------
def _validate(self, name, value):
def validate(self, name, value):
self._assert_is_string_type(name, value)
if self._min_length_given():
self._assert_string_long_enough(name, value)
Expand Down
2 changes: 1 addition & 1 deletion src/obscheme/schema.py
Expand Up @@ -115,6 +115,6 @@ def validate(self, obj):
value = getattr(obj, name)
if field.is_defined(value):
field.validate(name, value)
invariants.update(field.invariants())
invariants.update(field.invariants)
for invariant in invariants:
invariant(obj)
2 changes: 1 addition & 1 deletion src/obscheme/schemameta.py
Expand Up @@ -82,7 +82,7 @@ def __delete__(self, obj):
def _validate_invariants(self, obj, field_value):
override_kw = dict()
override_kw[self._name] = field_value
for invariant in self._field.invariants():
for invariant in self._field.invariants:
kw = factor_invariant_kw(invariant, obj, **override_kw)
invariant(**kw)

Expand Down

0 comments on commit 10905b5

Please sign in to comment.