Skip to content

Instantly share code, notes, and snippets.

@mckabi
Last active August 24, 2022 02:18
Show Gist options
  • Save mckabi/7990635 to your computer and use it in GitHub Desktop.
Save mckabi/7990635 to your computer and use it in GitHub Desktop.
Flask Converters
class ListConverter(BaseConverter):
def to_python(self, value):
if isinstance(value, (set, list, tuple)):
return list(value)
try:
parsed_value = json.loads(value)
except:
parsed_value = None
if isinstance(parsed_value, (set, list, tuple)):
return parsed_value
return value.split(',')
def to_url(self, values):
return ','.join(map(url_quote, values))
class LongConverter(IntegerConverter):
num_convert = long
class BooleanConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
self.regex_true = ['yes', 'y', 'true', 't', '1']
self.regex_false = ['no', 'n', 'false', 'f', '0']
super(BooleanConverter, self).__init__(url_map)
self.randomify = randomify
self.regex = '(?:{0}|{1}|maybe)'.format('|'.join(self.regex_true), '|'.join(self.regex_false))
def to_python(self, value):
if hasattr(value, 'lower'):
value = value.lower()
if value == 'maybe':
if self.randomify:
return not random.randrange(2)
raise ValidationError()
return value in self.regex_true
def to_url(self, value):
return value and self.regex_true[0] or self.regex_false[0]
class DateTimeConverter(BaseConverter):
def to_python(self, value):
if value == 'now':
return now()
elif value in ('', None):
return value
try:
value = parse(value)
except (ValueError, AttributeError):
return value
if value.tzinfo is None:
current_timezone = getattr(g, 'current_timezone') if hasattr(g, 'current_timezone') else tzlocal()
value = value.replace(tzinfo=current_timezone)
return value.astimezone(tzutc())
def to_url(self, value):
value = value.replace(microsecond=0)
if value.tzinfo is None:
current_timezone = getattr(g, 'current_timezone') if hasattr(g, 'current_timezone') else tzlocal()
value = as_localtime(value, current_timezone)
return value.isoformat()
app.url_map.converters.update({
'long': helpers.LongConverter,
'list': helpers.ListConverter,
'bool': helpers.BooleanConverter,
'datetime': helpers.DateTimeConverter,
'date': helpers.DateTimeConverter,
'time': helpers.DateTimeConverter,
})
@waymen
Copy link

waymen commented Aug 24, 2022

Very good!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment