Skip to content

Commit

Permalink
Work on new schema refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
vmalloc committed Jun 30, 2014
1 parent 6d32c9c commit 18feb90
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions api_object_schema/binding.py
Expand Up @@ -62,7 +62,7 @@ def get_value_from_api_value(self, system, objtype, obj, api_value):
:param api_value: the raw API value for this field
"""
returned = api_value
for translator in itertools.chain(self.from_api_translators, [self._normalize_value]):
for translator in itertools.chain(self.from_api_translators, [self._field.type.translator.from_api, self._normalize_value]):
returned = translator(returned)
assert returned is None or loose_isinstance(returned, self._field.type.type)
return returned
Expand All @@ -74,22 +74,16 @@ def _normalize_api_value(self, value):
return self._coerce(value, self._field.type.api_type)

def _coerce(self, value, result_type):

if value is None:
return None

if PY2 and result_type is str:
result_type = string_types

if PY2 and result_type is int:
result_type = (int, long)

if not isinstance(value, result_type):
if isinstance(result_type, tuple):
value = result_type[0](value)
else:
value = result_type(value)
value = result_type(value)

return value


def get_api_value_from_object(self, system, objtype, obj):
"""Retrieves the API representation of the field from a whole Pythonic object containing it.
Expand All @@ -107,7 +101,7 @@ def get_api_value_from_value(self, system, objtype, obj, value):
:param value: the Pythonic value for the field
"""
returned = value
for translator in itertools.chain(self.to_api_translators, [self._normalize_api_value]):
for translator in itertools.chain(self.to_api_translators, [self._field.type.translator.to_api, self._normalize_api_value]):
returned = translator(returned)
assert returned is None or loose_isinstance(returned, self._field.type.api_type)
return returned
Expand All @@ -121,8 +115,8 @@ def set_object_value_from_api_value(self, system, objtype, obj, api_value):
"""Controls how an API value is set for a Pythonic object
"""
value = self.get_value_from_api_value(
system, objtype, obj, self._field, api_value)
self.set_object_value(system, objtype, obj, self._field, value)
system, objtype, obj, api_value)
self.set_object_value(system, objtype, obj, value)

def get_object_value(self, system, objtype, obj):
"""Controls how a Pythonic value is fetched from a Pythonic object
Expand Down Expand Up @@ -177,7 +171,7 @@ def get_object_value(self, system, objtype, obj):
self._field.name)
return getattr(obj, getter_method_name)()

def set_object_value(self, obj, value):
def set_object_value(self, system, objtype, obj, value):
setter_method_name = self._setter_method_name or "set_{0}".format(
self._field.name)
return getattr(obj, setter_method_name)(value)
Expand All @@ -195,7 +189,7 @@ def get_object_value(self, system, objtype, obj):
return self._get_func(obj)
raise NotImplementedError() # pragma: no cover

def set_object_value(self, obj, value):
def set_object_value(self, system, objtype, obj, value):
if self._set_func:
return self._set_func(obj, value)
raise NotImplementedError() # pragma: no cover
Expand Down

0 comments on commit 18feb90

Please sign in to comment.