'Numeric field constructor
@param tablename: the table name
@param row: the s3_field Row
@return: the Field instance'

@staticmethod
def _numeric_field(tablename, row):

    fieldname = row.name
    fieldtype = row.field_type
    settings = (row.settings or {})
    minimum = settings.get('min')
    maximum = settings.get('max')
    if (fieldtype == 'integer'):
        parse = int
        requires = IS_INT_IN_RANGE(minimum=minimum, maximum=maximum)
    elif (fieldtype == 'double'):
        parse = float
        requires = IS_FLOAT_IN_RANGE(minimum=minimum, maximum=maximum)
    else:
        parse = None
        requires = None
    default = row.default_value
    if (default and (parse is not None)):
        try:
            default = parse(default)
        except ValueError:
            default = None
    else:
        default = None
    field = Field(fieldname, fieldtype, default=default, requires=requires)
    return field
