Warning: Can't synchronize with repository "(default)" (Unsupported version control system "svn": No module named svn). Look in the Trac log for more information.

Ticket #1207: formmaker.patch

File formmaker.patch, 4.9 KB (added by wavy, 5 years ago)
  • formmaker.py

     
    3939 
    4040def column_widget_generic_col(column): 
    4141    parms = column_parms(column) 
     42    if column.notNone: 
     43        parms['validator'] = validators.NotEmpty() 
    4244    return widgets.TextField(**parms) 
    4345column_widget_generic_col = column_widget.when( 
    4446        "isinstance(column, col.SOCol)")(column_widget_generic_col) 
    4547 
    4648def column_widget_int_col(column): 
    4749    parms = column_parms(column) 
    48     return widgets.TextField(validator=validators.Int(), **parms) 
     50    parms['validator'] = validators.Int(not_empty=column.notNone) 
     51    return widgets.TextField(**parms) 
    4952column_widget_int_col = column_widget.when( 
    5053        "isinstance(column, col.SOIntCol)")(column_widget_int_col) 
    5154 
    5255def column_widget_float_col(column): 
    5356    parms = column_parms(column) 
    54     return widgets.TextField(validator=validators.Number(), **parms) 
     57    parms['validator'] = validators.Number(not_empty=column.notNone) 
     58    return widgets.TextField(**parms) 
    5559column_widget_int_col = column_widget.when( 
    5660        "isinstance(column, (col.SOFloatCol))")(column_widget_float_col) 
    57      
     61 
    5862def column_widget_string_col(column): 
    5963    parms = column_parms(column) 
     64    parms['validator'] = validators.String(not_empty=column.notNone) 
    6065    if column.length: 
    6166        return widgets.TextField(**parms) 
    6267    else: 
     
    6772def column_widget_enum_col(column): 
    6873    params = column_parms(column) 
    6974    params['options'] = [(value, value) for value in column.enumValues ] 
     75    # currently EnumCols cannot be null 
    7076    params['validator'] = validators.OneOf(column.enumValues) 
    7177    return widgets.SingleSelectField(**params) 
    7278column_widget_enum_col = column_widget.when( 
    7379        "isinstance(column,col.SOEnumCol)")(column_widget_enum_col) 
    74          
     80 
    7581def column_widget_date_col(column): 
    7682    parms = column_parms(column) 
     83    # overide DatePicker validator as may be notNone 
     84    parms['validator'] = validators.DateConverter(not_empty=column.notNone) 
    7785    return widgets.CalendarDatePicker(**parms) 
    7886column_widget_date_col = column_widget.when( 
    7987        "isinstance(column,col.SODateCol)")(column_widget_date_col) 
    8088 
    8189def column_widget_datetime_col(column): 
    8290    parms = column_parms(column) 
     91    # overide DateTimePicker validator as may be notNone 
     92    parms['validator'] = validators.DateTimeConverter(not_empty=column.notNone) 
    8393    return widgets.CalendarDateTimePicker(**parms) 
    8494column_widget_date_col = column_widget.when( 
    8595        "isinstance(column,col.SODateTimeCol)")(column_widget_datetime_col) 
    8696 
    8797def column_boolean(column): 
    8898    parms = column_parms(column) 
     99    # overide CheckBox validator as may be notNone 
     100    parms['validator'] = validators.Bool(not_empty=column.notNone) 
    89101    return widgets.CheckBox(**parms) 
    90102column_boolean = column_widget.when("isinstance(column, col.SOBoolCol)")(column_boolean) 
    91103 
     
    96108    items = fkey_class.select() 
    97109    # make options a callable to retrieve fresh data  
    98110    # every time the widget is rendered 
    99     parms['options'] = lambda: [(None, '')] + [(item.id, unicode(item)) for item in items] 
     111    if column.notNone: 
     112        parms['options'] = lambda: [(item.id, unicode(item)) for item in items] 
     113    else: 
     114        parms['options'] = lambda: [(None, '')] + [(item.id, unicode(item)) for item in items] 
    100115    return DataSelectField(**parms) 
    101116column_widget_fkey_col = column_widget.when( 
    102117        "isinstance(column,col.SOKeyCol)")(column_widget_fkey_col) 
     118 
    103119def join_widget(join): 
    104120    pass 
    105121join_widget = dispatch.generic()(join_widget) 
     
    123139join_widget_related_col = join_widget.when( 
    124140        "isinstance(join,joins.SORelatedJoin)")(join_widget_related_join) 
    125141 
    126  
    127142def fields_for(sqlclass, fields=None): 
    128143    sqlclass_columns = so_columns(sqlclass) 
    129     sqlclass_joins = so_joins(sqlclass) 
     144    sqlclass_joins = dict((j.joinMethodName, j) for j in so_joins(sqlclass)) 
     145 
    130146    if fields: 
    131147        columnlist = fields 
    132148    elif hasattr(sqlclass, "form_order"): 
     
    136152    widgetlist = [] 
    137153    for column in columnlist: 
    138154        widget = None 
    139         if sqlclass_columns.has_key(column): 
     155        if column in sqlclass_columns: 
    140156            widget = column_widget(sqlclass_columns[column]) 
    141         elif sqlclass_columns.has_key(column + 'ID'): #key column 
     157        elif column + 'ID' in sqlclass_columns: #key column 
    142158            widget = column_widget(sqlclass_columns[column + 'ID']) 
    143         else: 
    144             for join in sqlclass_joins: 
    145                 if join.joinMethodName == column: 
    146                     widget = join_widget(join) 
    147                     break 
     159        elif column in sqlclass_joins: 
     160            widget = join_widget(sqlclass_joins[column]) 
     161 
    148162        if not widget: 
    149163            raise Exception, "Join or column %r not found in class %r" % (column, sqlclass.__name__) 
    150164        widgetlist.append(widget)