/usr/share/pyshared/sprox/widgetselector.py is in python-sprox 0.6.4-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | """
widgetselecter Module
this contains the class which allows the ViewConfig to select the appropriate widget for the given field
Classes:
Name Description
WidgetSelecter Parent Class
SAWidgetSelector Selecter Based on sqlalchemy field types
DatabaseViewWidgetSelector Database View always selects the same widget
TableDefWidgetSelector Table def fields use the same widget
Exceptions:
None
Functions:
None
Copyright (c) 2007 Christopher Perkins
Original Version by Christopher Perkins 2007Database
Released under MIT license.
"""
from sqlalchemy.schema import Column
from sqlalchemy.types import *
from sqlalchemy.orm import PropertyLoader, SynonymProperty
from tw.api import Widget
from tw.forms.fields import *
from sprox.widgets import *
class WidgetSelector:
def select(self, field):
return Widget
class EntitiesViewWidgetSelector(WidgetSelector):
def select(self, field):
return EntityLabelWidget
class EntityDefWidgetSelector(WidgetSelector):
def select(self, field):
return EntityDefWidget
class RecordViewWidgetSelector(WidgetSelector):
def select(self, field):
return RecordFieldWidget
text_field_limit=100
class SAWidgetSelector(WidgetSelector):
default_widgets = {
String: TextField,
Integer: TextField,
Numeric: TextField,
DateTime: SproxCalendarDateTimePicker,
Date: SproxCalendarDatePicker,
Time: SproxTimePicker,
Binary: FileField,
PickleType: TextField,
Boolean: SproxCheckBox,
# NullType: TextField
}
default_name_based_widgets = {}
default_multiple_select_field_widget_type = PropertyMultipleSelectField
default_single_select_field_widget_type = PropertySingleSelectField
def select(self, field):
if hasattr(field, 'name'):
if field.name in self.default_name_based_widgets:
return self.default_name_based_widgets[field.name]
if field.name.lower() == 'password':
return PasswordField
# this is really the best we can do, since we cannot know
# what type the field represents until execution occurs.
if isinstance(field, SynonymProperty):
#fix to handle weird synonym prop stuff
if isinstance(field.descriptor, property) or field.descriptor.__class__.__name__.endswith('SynonymProp'):
return TextField
if isinstance(field, PropertyLoader):
if field.uselist:
return self.default_multiple_select_field_widget_type
return self.default_single_select_field_widget_type
type_ = String
for t in self.default_widgets.keys():
if isinstance(field.type, t):
type_ = t
break
widget = self.default_widgets[type_]
if widget is TextField and hasattr(field.type, 'length') and (field.type.length is None or field.type.length>text_field_limit):
widget = TextArea
return widget
|