|
|
|
@ -372,32 +372,32 @@ class StringParam(Parameter):
|
|
|
|
|
class ParsedParameter(Parameter):
|
|
|
|
|
"""A template parameter with cached parsed value."""
|
|
|
|
|
|
|
|
|
|
__slots__ = ('parsed',)
|
|
|
|
|
__slots__ = ('_parsed',)
|
|
|
|
|
|
|
|
|
|
def __init__(self, name, schema, value=None):
|
|
|
|
|
super(ParsedParameter, self).__init__(name, schema, value)
|
|
|
|
|
self._update_parsed()
|
|
|
|
|
|
|
|
|
|
def set_default(self, value):
|
|
|
|
|
super(ParsedParameter, self).set_default(value)
|
|
|
|
|
self._update_parsed()
|
|
|
|
|
|
|
|
|
|
def _update_parsed(self):
|
|
|
|
|
if self.has_value():
|
|
|
|
|
if self.user_value is not None:
|
|
|
|
|
self.parsed = self.parse(self.user_value)
|
|
|
|
|
self._parsed = None
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def parsed(self):
|
|
|
|
|
if self._parsed is None:
|
|
|
|
|
if self.has_value():
|
|
|
|
|
if self.user_value is not None:
|
|
|
|
|
self._parsed = self.parse(self.user_value)
|
|
|
|
|
else:
|
|
|
|
|
self._parsed = self.parse(self.default())
|
|
|
|
|
else:
|
|
|
|
|
self.parsed = self.parse(self.default())
|
|
|
|
|
self._parsed = self.default_parsed()
|
|
|
|
|
return self._parsed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CommaDelimitedListParam(ParsedParameter, collections.Sequence):
|
|
|
|
|
"""A template parameter of type "CommaDelimitedList"."""
|
|
|
|
|
|
|
|
|
|
__slots__ = ('parsed',)
|
|
|
|
|
__slots__ = tuple()
|
|
|
|
|
|
|
|
|
|
def __init__(self, name, schema, value=None):
|
|
|
|
|
self.parsed = []
|
|
|
|
|
super(CommaDelimitedListParam, self).__init__(name, schema, value)
|
|
|
|
|
def default_parsed(self):
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
def parse(self, value):
|
|
|
|
|
# only parse when value is not already a list
|
|
|
|
@ -439,11 +439,10 @@ class CommaDelimitedListParam(ParsedParameter, collections.Sequence):
|
|
|
|
|
class JsonParam(ParsedParameter):
|
|
|
|
|
"""A template parameter who's value is map or list."""
|
|
|
|
|
|
|
|
|
|
__slots__ = ('parsed',)
|
|
|
|
|
__slots__ = tuple()
|
|
|
|
|
|
|
|
|
|
def __init__(self, name, schema, value=None):
|
|
|
|
|
self.parsed = {}
|
|
|
|
|
super(JsonParam, self).__init__(name, schema, value)
|
|
|
|
|
def default_parsed(self):
|
|
|
|
|
return {}
|
|
|
|
|
|
|
|
|
|
def parse(self, value):
|
|
|
|
|
try:
|
|
|
|
|