Commit 67e1da5a authored by Serge S. Koval's avatar Serge S. Koval

Merge pull request #1155 from pawl/fix_1141

SQLA - Use database defaults for number of decimal places in DecimalFields
parents f6a0348b b3db9b7d
......@@ -270,7 +270,7 @@ class AdminModelConverter(ModelConverterBase):
if column.type.length:
field_args['validators'].append(validators.Length(max=column.type.length))
@converts('String', 'Unicode')
@converts('String') # includes VARCHAR, CHAR, and Unicode
def conv_String(self, column, field_args, **extra):
if hasattr(column.type, 'enums'):
accepted_values = list(column.type.enums)
......@@ -293,8 +293,7 @@ class AdminModelConverter(ModelConverterBase):
self._string_common(column=column, field_args=field_args, **extra)
return fields.StringField(**field_args)
@converts('Text', 'UnicodeText',
'sqlalchemy.types.LargeBinary', 'sqlalchemy.types.Binary')
@converts('Text', 'LargeBinary', 'Binary') # includes UnicodeText
def conv_Text(self, field_args, **extra):
self._string_common(field_args=field_args, **extra)
return fields.TextAreaField(**field_args)
......@@ -308,7 +307,7 @@ class AdminModelConverter(ModelConverterBase):
field_args['widget'] = form.DatePickerWidget()
return fields.DateField(**field_args)
@converts('DateTime')
@converts('DateTime') # includes TIMESTAMP
def convert_datetime(self, field_args, **extra):
return form.DateTimeField(**field_args)
......@@ -316,40 +315,32 @@ class AdminModelConverter(ModelConverterBase):
def convert_time(self, field_args, **extra):
return form.TimeField(**field_args)
@converts('Integer', 'SmallInteger')
@converts('Integer') # includes BigInteger and SmallInteger
def handle_integer_types(self, column, field_args, **extra):
unsigned = getattr(column.type, 'unsigned', False)
if unsigned:
field_args['validators'].append(validators.NumberRange(min=0))
return fields.IntegerField(**field_args)
@converts('Numeric', 'Float')
@converts('Numeric') # includes DECIMAL, Float/FLOAT, REAL, and DOUBLE
def handle_decimal_types(self, column, field_args, **extra):
places = getattr(column.type, 'scale', 2)
if places is not None:
field_args['places'] = places
# override default decimal places limit, use database defaults instead
field_args.setdefault('places', None)
return fields.DecimalField(**field_args)
@converts('databases.mysql.MSYear')
def conv_MSYear(self, field_args, **extra):
field_args['validators'].append(validators.NumberRange(min=1901, max=2155))
return fields.StringField(**field_args)
@converts('sqlalchemy.dialects.postgresql.base.INET',
'databases.postgres.PGInet', 'dialects.postgresql.base.INET')
@converts('sqlalchemy.dialects.postgresql.base.INET')
def conv_PGInet(self, field_args, **extra):
field_args.setdefault('label', u'IP Address')
field_args['validators'].append(validators.IPAddress())
return fields.StringField(**field_args)
@converts('sqlalchemy.dialects.postgresql.base.MACADDR',
'dialects.postgresql.base.MACADDR')
@converts('sqlalchemy.dialects.postgresql.base.MACADDR')
def conv_PGMacaddr(self, field_args, **extra):
field_args.setdefault('label', u'MAC Address')
field_args['validators'].append(validators.MacAddress())
return fields.StringField(**field_args)
@converts('dialects.postgresql.base.UUID')
@converts('sqlalchemy.dialects.postgresql.base.UUID')
def conv_PGUuid(self, field_args, **extra):
field_args.setdefault('label', u'UUID')
field_args['validators'].append(validators.UUID())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment