PK Šœ4Ý¡ïBBEGG-INFO/entry_points.txt [turbogears.extensions] fastdata = tgfastdata.plugin PK Šœ4EGG-INFO/not-zip-safePK Šœ4i×ùÈççEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TGFastData Version: 0.9a5 Summary: Automatic user interface generation for TurboGears Home-page: http://www.turbogears.org Author: Kevin Dangoor Author-email: dangoor+turbogears@gmail.com License: MIT Download-URL: http://www.turbogears.org/download/ Description: FastData generates a user interface based upon model objects in user projects. Platform: UNKNOWN Classifier: Development Status :: 3 - Alpha Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Software Development :: Libraries :: Python Modules PK Šœ4 ,¶¢EGG-INFO/requires.txtTurboGears > 0.9a2PK Šœ4¡pææEGG-INFO/SOURCES.txtLICENSE.txt README.txt setup.cfg setup.py TGFastData.egg-info/PKG-INFO TGFastData.egg-info/SOURCES.txt TGFastData.egg-info/entry_points.txt TGFastData.egg-info/not-zip-safe TGFastData.egg-info/requires.txt TGFastData.egg-info/top_level.txt tgfastdata/__init__.py tgfastdata/datacontroller.py tgfastdata/datawidgets.py tgfastdata/formmaker.py tgfastdata/plugin.py tgfastdata/release.py tgfastdata/templates/__init__.py tgfastdata/templates/datagrid.kid tgfastdata/templates/form.kid tgfastdata/templates/item.kid tgfastdata/templates/list.kid tgfastdata/templates/master.kid tgfastdata/tests/__init__.py tgfastdata/tests/formmodel.py tgfastdata/tests/test_datacontroller.py tgfastdata/tests/test_fastdata.py tgfastdata/tests/test_formmaker.py PK Šœ4a`¯H EGG-INFO/top_level.txttgfastdata PK$;”41Dd]>>tgfastdata/__init__.pyfrom datacontroller import DataController, AjaxDataController PK Šœ4·Ú7Æ<<tgfastdata/__init__.pyc;ò ”oGDc@sdklZlZdS((sDataControllersAjaxDataControllerN(sdatacontrollersDataControllersAjaxDataController(sAjaxDataControllersDataController((sCbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/__init__.pys?sPK$;”4ôßOàZ*Z*tgfastdata/datacontroller.pyfrom turbogears import widgets, database, validators import turbogears import formmaker from datawidgets import FastDataGrid import cherrypy import simplejson import formencode from sqlobject import SQLObjectNotFound, IN class BaseDataController(object): sql_class = None getter = None def __init__(self, sql_class=None, id_column=None): if not (self.sql_class or sql_class): raise ValueError("You must set an sql_class to use a DataController") if sql_class: self.sql_class = sql_class if id_column: getterName = sql_class.sqlmeta.columns[id_column].alternateMethodName self.getter = getattr(self.sql_class, getterName) else: self.getter = self.sql_class.get def _get_item(self, atom): ''' Hook to allow retrieval by something other than meaningless (lame) integer primary key. ''' # Coerce the ID to the correct db type try: #id = int(atom) return self.getter(int(atom)) except SQLObjectNotFound: return None def default(self, *vpath, **params): """Do RESTful-style access to database objects. Based on the RESTful resource recipe by Robert Brewer.""" if not vpath: return self.index(**params) # Make a copy of vpath in a list vpath = list(vpath) atom = vpath.pop(0) # See if the first virtual path member is a container action method = getattr(self, atom, None) if method and getattr(method, "expose_container"): return method(*vpath, **params) # Not a container action; the URI atom must be an existing ID item = self._get_item(atom) if item is None: raise cherrypy.NotFound # There may be further virtual path components. # Try to map them to methods in this class. if vpath: method = getattr(self, vpath[0], None) if method and getattr(method, "exposed"): return method(item, *vpath[1:], **params) # No further known vpath components. Call a default handler. return self.show(item, *vpath, **params) default = turbogears.expose()(default) def _filterJoins(self, obj, data): # check if the object has joins jdata = [] for join in obj.sqlmeta.joins: jname = join.joinMethodName # is join data present in the form? if jname in data.keys(): # keep the data and update joins after object's update jdata.append((join, data.pop(jname))) return data, jdata def _updateJoins(self, obj, jdata): for join, data in jdata: jname = join.joinMethodName addRelation = 'add' + join.addRemoveName removeRelation = 'remove' + join.addRemoveName if join.hasIntermediateTable: # many-to-many join # remove all relations relations = getattr(obj, jname) for relation in relations: getattr(obj, removeRelation)(relation) # add selected relations if data: relations = join.otherClass.select(IN(join.otherClass.q.id, data)) for relation in relations: getattr(obj, addRelation)(relation) else: # TODO: implement one-to-many and one-to-one raise NotImplementedError, \ 'Only many-to-many relations are supported at this time' class AjaxDataController(BaseDataController): ''' A DataController specifically for use with Ajax requests. ''' def __init__(self, sql_class=None, id_column=None, schema=None): super(AjaxDataController,self).__init__(sql_class, id_column) self.schema= schema def _read_incoming_data(): ''' Returns a tuple containing the incoming data and any errors ''' values = simple_json.load(cherrypy.request.body) if self.schema: try: values= self.schema.to_python( values ) except validators.Invalid, e: errors= {} for key,error in e.error_dict.items(): errors[key]= dict(message=str(error), invalid_value=e.value) # Return error code and info cherrypy.response.status=400 # Bad request return (None,errors) return (values,None) def index(self): return dict( objects=self.sql_class.select(), errors=None ) index = turbogears.expose( format="json" )(index) def create(self, **data): obj_data,errors= self._read_incoming_data() if errors: cherrypy.response.status=400 # Bad request return dict( id=None, errors=errors ) obj= self.sql_class(obj_data) return dict( id=obj.id, errors=None ) create = turbogears.expose( format="json" )(create) def update(self, obj, **data): obj_data,errors= self._read_incoming_data() if errors: cherrypy.response.status=400 # Bad request return dict( id=obj.id, errors=errors ) # If the update data specifies an ID, it *must* match the object's ID. if "id" in obj_data: if obj_data["id"]!=obj.id: # IDs don't match. Can't update this object. cherrypy.response.status=409 # Conflict return dict( id=obj.id, errors= dict( id=dict( message="Object ID invalid", value=obj_data["id"] ) ) ) # IDs match, but we don't need to update the ID. del obj_data["id"] # Validate/convert the JSON data to data ready for SQLObject errors= dict() for key in obj_data.keys(): try: col= obj.sqlmeta.columns[key] validator= col.validator values[key] = validator.to_python( obj_data[key], None ) except formencode.Invalid, e: # if the value doesn't validate correctly, then note it errors[key]= dict( message=str(e), invalid_value=e.value ) except KeyError: # remove entries in updateValues that don't appear in the object del obj_data[key] # If any values didn't validate correctly, return a Bad Request (400) # status code and indicate the errors. if errors: cherrypy.response.status=400 # Bad request return dict( id=obj.id, errors=errors ) # Update the SQLObject object obj.set( obj_data ) return dict( id=obj.id, errors=None ) update = turbogears.expose( format="json" )(update) def delete(self, obj): obj.destroySelf() return dict( id=obj.id, errors=None ) delete = turbogears.expose( format="json" )(delete) def show(self, obj): return dict( object=obj, errors=None ) show = turbogears.expose( format="json" )(show) class DataController(BaseDataController): """Provides basic add/edit/delete capability""" list_widget = FastDataGrid() form_widget_class = widgets.TableForm form_template = "tgfastdata.templates.form" list_template = "tgfastdata.templates.list" item_template = "tgfastdata.templates.item" form_fields = None list_fields = None def __init__(self, sql_class=None, form_widget_class=None, id_column=None, list_widget=None, form_template=None, list_template=None, item_template=None, form_fields=None, list_fields=None): super(DataController,self).__init__(sql_class, id_column) if list_fields: self.list_fields = list_fields if form_fields: self.form_fields = form_fields if form_widget_class: self.form_widget_class = form_widget_class self.form_widget = self.form_widget_class( fields=formmaker.fields_for(self.sql_class, self.form_fields)) if list_widget: self.list_widget = list_widget elif self.list_fields: self.list_widget = FastDataGrid(self.list_fields or self.form_fields) if form_template: self.form_template = form_template if list_template: self.list_template = list_template if item_template: self.item_template = item_template def _get_form(self): return self.form_widget def index(self): return dict(tg_template=self.list_template, list_widget=self.list_widget, data=self.sql_class.select()) index = turbogears.expose()(index) def add(self): return dict(tg_template=self.form_template, obj=None, form=self.form_widget, action="create") add = turbogears.expose()(add) add.expose_container = True def create(self, tg_errors=None, **data): if tg_errors: return self.add() data, jdata = self._filterJoins(self.sql_class, data) obj = self.sql_class(**data) self._updateJoins(obj, jdata) turbogears.flash("Record added!") raise cherrypy.HTTPRedirect("./") create = turbogears.expose()(create) create = turbogears.validate(form=_get_form)(create) def edit(self, obj): return dict(tg_template=self.form_template, form=self.form_widget, obj=obj, action="update") edit = turbogears.expose()(edit) def update(self, obj, tg_errors=None, **data): if tg_errors: return self.edit(None) data, jdata = self._filterJoins(obj, data) obj.set(**data) self._updateJoins(obj, jdata) turbogears.flash("Changes saved!") raise cherrypy.HTTPRedirect("../") update = turbogears.expose()(update) update = turbogears.validate(form=_get_form)(update) def delete(self, obj): obj.destroySelf() turbogears.flash("Record deleted!") raise cherrypy.HTTPRedirect("../") delete = turbogears.expose()(delete) def show(self, obj): value = database.so_to_dict(obj) columns = obj.sqlmeta.columns if self.form_fields: column_keys = self.form_fields else: column_keys = columns.keys() # Get the title from the sqlcolumn column_list = [ (formmaker.column_parms(columns[key])['label'], key) for key in column_keys ] value["tg_columns"] = column_list value["tg_template"] = self.item_template return value show = turbogears.expose()(show) PK Šœ4Ÿ 9ûm5m5tgfastdata/datacontroller.pyc;ò ”oGDc@s¬dklZlZlZdkZdkZdklZdkZdkZdk Z dk l Z l Z de fd„ƒYZdefd„ƒYZdefd „ƒYZdS( (swidgetssdatabases validatorsN(s FastDataGrid(sSQLObjectNotFoundsINsBaseDataControllercBsYtZeZeZeed„Zd„Zd„Zei ƒeƒZd„Z d„Z RS(NcCs||ip| otdƒ‚n|o ||_n|o,|ii|i}t|i|ƒ|_ n|ii |_ dS(Ns1You must set an sql_class to use a DataController( sselfs sql_classs ValueErrors id_columnssqlmetascolumnssalternateMethodNames getterNamesgetattrsgettersget(sselfs sql_classs id_columns getterName((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys__init__s cCs5y|it|ƒƒSWntj o tSnXdS(sq Hook to allow retrieval by something other than meaningless (lame) integer primary key. N(sselfsgettersintsatomsSQLObjectNotFoundsNone(sselfsatom((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys _get_items cOsþ| o|i|Snt|ƒ}|idƒ}t||tƒ}|o t|dƒo|||ŽSn|i |ƒ}|tjo t i ‚n|oIt||dtƒ}|o t|dƒo|||d|ŽSqçn|i|||ŽSdS(skDo RESTful-style access to database objects. Based on the RESTful resource recipe by Robert Brewer.isexpose_containersexposediN(svpathsselfsindexsparamsslistspopsatomsgetattrsNonesmethods _get_itemsitemscherrypysNotFoundsshow(sselfsvpathsparamssitemsatomsmethod((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pysdefault%s    cCsgg}xP|iiD]B}|i}||iƒjo |i ||i |ƒfƒqqW||fSdS(N( sjdatasobjssqlmetasjoinssjoinsjoinMethodNamesjnamesdataskeyssappendspop(sselfsobjsdatasjdatasjoinsjname((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys _filterJoinsCs  $c CsÛxÔ|D]Ì\}}|i}d|i}d|i} |ioŠt ||ƒ}x!|D]}t || ƒ|ƒqVW|oL|i it|i ii|ƒƒ}x%|D]}t ||ƒ|ƒq¥WqÓqtd‚qWdS(Nsaddsremoves6Only many-to-many relations are supported at this time(sjdatasjoinsdatasjoinMethodNamesjnames addRemoveNames addRelationsremoveRelationshasIntermediateTablesgetattrsobjs relationssrelations otherClasssselectsINsqsidsNotImplementedError( sselfsobjsjdatasjoins relationss addRelationsrelationsjnamesdatasremoveRelation((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys _updateJoinsNs      $( s__name__s __module__sNones sql_classsgetters__init__s _get_itemsdefaults turbogearssexposes _filterJoinss _updateJoins(((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pysBaseDataController s  sAjaxDataControllercBsÎtZdZeeed„Zd„Zd„ZeiddƒeƒZd„Z eiddƒe ƒZ d„Z eiddƒe ƒZ d„Z eiddƒe ƒZ d „Z eiddƒe ƒZ RS( sC A DataController specifically for use with Ajax requests. cCs&tt|ƒi||ƒ||_dS(N(ssupersAjaxDataControllersselfs__init__s sql_classs id_columnsschema(sselfs sql_classs id_columnsschema((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys__init__hscCsÀtitiiƒ}tio“ytii|ƒ}Wq²t i j og}h}x?|i iƒD].\}}tdt|ƒd|iƒ||  (s__name__s __module__s__doc__s FastDataGrids list_widgetswidgetss TableFormsform_widget_classs form_templates list_templates item_templatesNones form_fieldss list_fieldss__init__s _get_formsindexs turbogearssexposesaddsTruesexpose_containerscreatesvalidateseditsupdatesdeletesshow(((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pysDataControllerºs6   $         (s turbogearsswidgetssdatabases validatorss formmakers datawidgetss FastDataGridscherrypys simplejsons formencodes sqlobjectsSQLObjectNotFoundsINsobjectsBaseDataControllersAjaxDataControllersDataController(sSQLObjectNotFoundscherrypys turbogearssdatabases validatorss FastDataGrids formencodes simplejsonsDataControllers formmakerswidgetssBaseDataControllersINsAjaxDataController((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datacontroller.pys?s      YWPKtš4n'ÉøÏÏtgfastdata/datawidgets.pyimport turbogears from turbogears import widgets, validators from turbogears.widgets.datagrid import DataGrid from sqlobject import SQLObject class FastDataGrid(DataGrid): """Grid that displays SQLObject's SelectResults with add/edit/delete controls. """ css = [widgets.CSSLink(widgets.static, "grid.css")] template = "tgfastdata.templates.datagrid" params = ["show_actions", "show_add_link", "add_link_title", "delete_link_msg", "get_edit_url", "get_delete_url", "get_add_url"] add_link_title = "Add a record" show_actions = True show_add_link = True delete_link_msg = "Are you sure you want to delete this?" def __init__(self, fields=None, **kw): """Ctor. You can pass fields to control what and how is displayed to override sqlmeta. """ super(FastDataGrid, self).__init__([], **kw) self.fields = fields def get_add_url(): return lambda id=None: turbogears.url('add') get_add_url = staticmethod(get_add_url) def get_edit_url(): return lambda id: turbogears.url([str(id), 'edit']) get_edit_url = staticmethod(get_edit_url) def get_delete_url(): return lambda id: turbogears.url([str(id), 'delete']) get_delete_url = staticmethod(get_delete_url) def update_params(self, d): "Sets up headers based on the select results columns" fields = d.get('fields') or self.fields d['fields'] = self._prepare_fields(d['value'], fields) super(FastDataGrid, self).update_params(d) def _prepare_fields(self, value, fields): if hasattr(value, 'sourceClass'): # check if we have SelectResults columns_meta = value.sourceClass.sqlmeta.columns else: columns_meta = {} collist_raw = fields or columns_meta.keys() if not collist_raw: raise ValueError, 'no fields information can be found' if columns_meta: # transform old-style collist_raw to new-style if needed def f(col): if not (isinstance(col, tuple) or \ isinstance(col, DataGrid.Column)): # backward compatibility name = col # assume col is just a name of the column if columns_meta.has_key(name): column = columns_meta[name] # get columns' metadata header = column.title or column.name.capitalize() elif columns_meta.has_key(name + 'ID'): # key column column = columns_meta[name + 'ID'] header = column.title or column.name[:-2].capitalize() else: header = name # assume col is a property col = DataGrid.Column(name=name, title=header) return col collist_raw = [f(col) for col in collist_raw] return collist_raw class EmptyStringConverter(validators.FancyValidator): """ Converts empty string to None value. Doesn't change any other values. """ def _to_python(self, value, state): if isinstance(value, basestring) and len(value) == 0: return None else: return value def option_selected(input_value, option_value): if hasattr(input_value, '__getitem__') and \ not isinstance(input_value, basestring): return option_value in [row.id for row in input_value] elif isinstance(input_value, SQLObject): return option_value==input_value.id else: return option_value==input_value class DataCheckBoxList(widgets.CheckBoxList): validator = validators.Set() def checked(self, input_value, option_value): return self._is_option_selected(option_value, input_value) def _is_option_selected(self, option_value, value): if option_selected(value, option_value): return "checked" class DataSelectField(widgets.SingleSelectField): validator = EmptyStringConverter() def selected(self, input_value, option_value): return self._is_option_selected(option_value, input_value) def _is_option_selected(self, option_value, value): if option_selected(value, option_value): return "selected" PK Šœ4;¥g8tgfastdata/datawidgets.pyc;ò -ÑODc@s¤dkZdklZlZdklZdklZdefd„ƒYZdeifd„ƒYZ d„Z d ei fd „ƒYZ d ei fd „ƒYZdS( N(swidgetss validators(sDataGrid(s SQLObjects FastDataGridcBs¼tZdZeieidƒgZdZddddddd gZd Z e Z e Z d Z ed „Zd „ZeeƒZd„ZeeƒZd„ZeeƒZd„Zd„ZRS(sPGrid that displays SQLObject's SelectResults with add/edit/delete controls. sgrid.cssstgfastdata.templates.datagrids show_actionss show_add_linksadd_link_titlesdelete_link_msgs get_edit_urlsget_delete_urls get_add_urls Add a records%Are you sure you want to delete this?cKs&tt|ƒig|||_dS(sdCtor. You can pass fields to control what and how is displayed to override sqlmeta. N(ssupers FastDataGridsselfs__init__skwsfields(sselfsfieldsskw((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pys__init__scCstd„SdS(NcCs tidƒS(Nsadd(s turbogearssurl(sid((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pyss(sNone(((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pys get_add_urlscCs d„SdS(NcCstit|ƒdgƒS(Nsedit(s turbogearssurlsstrsid(sid((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pys s((((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pys get_edit_urlscCs d„SdS(NcCstit|ƒdgƒS(Nsdelete(s turbogearssurlsstrsid(sid((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pys$s((((sFbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/datawidgets.pysget_delete_url#scCsM|idƒp|i}|i|d|ƒ|dassoptions( s column_parmsscolumnsparmss classregistrys findClasss foreignKeys fkey_classsselectsitemssDataSelectField(scolumnsitemss fkey_classsparms((sitemssDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pyscolumn_widget_fkey_colZs   sisinstance(column,col.SOKeyCol)cCsdS(N((sjoin((sDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pys join_widgetescCs,hd|i<dt|iƒ<}|SdS(se Helper function to convert join attributes to parameters needed to initialize a widget. snameslabelN(sjoinsjoinMethodNames name2labelsparms(sjoinsparms((sDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pys join_parmsis$cs9t|ƒ}|iiƒ‰‡d†|dwssoptions(s join_parmssjoinsparmss otherClasssselectsitemssDataCheckBoxList(sjoinsparmssitems((sitemssDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pysjoin_widget_related_joinrs s$isinstance(join,joins.SORelatedJoin)cCs.|o |}n*t|dƒo |i}n |ii}g}xã|D]Û}t }|iii |ƒot |ii|ƒ}nq|iii |dƒot |ii|dƒ}n9x5|ii D]'}|i|jot|ƒ}PqÈqÈW| otd||if‚n|i|ƒqGW|SdS(Ns form_ordersIDs'Join or column %r not found in class %r(sfieldss columnlistshasattrssqlclasss form_orderssqlmetascolumnss widgetlistscolumnsNoneswidgetshas_keys column_widgetsjoinssjoinsjoinMethodNames join_widgets Exceptions__name__sappend(ssqlclasssfieldsswidgetsjoins widgetlistscolumns columnlist((sDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pys fields_for|s,      cCs-dk}|idtdƒt||ƒSdS(Ns*Use fields_for() rather than sqlwidgets().i(swarningsswarnsDeprecationWarnings fields_forssqlclasssfields(ssqlclasssfieldsswarnings((sDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pys sqlwidgets”s (!s turbogearsswidgetss validatorsstgfastdata.datawidgetssDataCheckBoxListsDataSelectFieldsdispatchsres sqlobjectscolsjoinss classregistrys column_widgetsgenerics name2labels column_parmsscolumn_widget_generic_colswhenscolumn_widget_int_colscolumn_widget_float_colscolumn_widget_string_colscolumn_widget_enum_colscolumn_widget_date_colscolumn_widget_datetime_colscolumn_booleanscolumn_widget_fkey_cols join_widgets join_parmssjoin_widget_related_joinsjoin_widget_related_colsNones fields_fors sqlwidgets(scolumn_widget_enum_cols sqlwidgetssdispatchsjoin_widget_related_joins name2labels validatorsscolumn_widget_string_colscolumn_widget_date_cols join_parmss join_widgetscolumn_widget_datetime_colsreswidgetssDataSelectFieldscolumn_widget_generic_colscolumn_booleanscolumn_widget_fkey_cols column_widgetscolumn_widget_float_colsjoinss classregistryscolumn_widget_int_cols fields_forsDataCheckBoxLists column_parmsscolsjoin_widget_related_col((sDbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/formmaker.pys?sD                  PK$;”4Ý5´%LLtgfastdata/plugin.pydef tgsymbols(): import tgfastdata return dict(fastdata=tgfastdata) PK Šœ4 µ]E••tgfastdata/plugin.pyc;ò ”oGDc@s d„ZdS(cCsdk}td|ƒSdS(Nsfastdata(s tgfastdatasdict(s tgfastdata((sAbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/plugin.pys tgsymbolss N(s tgsymbols(s tgsymbols((sAbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/plugin.pys?sPKü‰œ4ÑäÖõõtgfastdata/release.pyversion = "0.9a5" author = "Kevin Dangoor" email = "dangoor+turbogears@gmail.com" copyright = "Copyright 2005 Kevin Dangoor and contributors" url = "http://www.turbogears.org" download_url = "http://www.turbogears.org/download/" license = "MIT" PK Šœ489 ²--tgfastdata/release.pyc;ò †RDc@s.dZdZdZdZdZdZdZdS(s0.9a5s Kevin Dangoorsdangoor+turbogears@gmail.coms-Copyright 2005 Kevin Dangoor and contributorsshttp://www.turbogears.orgs#http://www.turbogears.org/download/sMITN(sversionsauthorsemails copyrightsurls download_urlslicense(slicenses copyrightsauthorsurls download_urlsversionsemail((sBbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/release.pys?s PK$;”4 tgfastdata/templates/__init__.pyPK Šœ4˜Ã÷!tgfastdata/templates/__init__.pyc;ò ”oGDc@sdS(N((((sMbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/templates/__init__.pys?sPK$;”4„PøhÌÌ!tgfastdata/templates/datagrid.kid
  ${col.title}
${col.get_field(row)}

${add_link_title}

PK$;”4²ý&µµtgfastdata/templates/form.kid Welcome to TurboGears ${form.display(obj, action=action)} PK$;”4Z•1ZZtgfastdata/templates/item.kid Welcome to TurboGears
Column Name Column Data
PK$;”4+—Ȳ²tgfastdata/templates/list.kid Welcome to TurboGears ${list_widget.display(data)} PK$;”4“d%ª¹¹tgfastdata/templates/master.kid Your title goes here
PK$;”4tgfastdata/tests/__init__.pyPK Šœ4Zr|™™tgfastdata/tests/__init__.pyc;ò ”oGDc@sdS(N((((sIbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/__init__.pys?sPK$;”4mðàhéétgfastdata/tests/formmodel.pyfrom sqlobject import * from turbogears.database import PackageHub hub = PackageHub("turbogears.widgets.tests.formmodel") __connection__ = hub class Person(SQLObject): form_order = ["name", "age", "date", "friends","company", "status", "salary"] name = StringCol(title='Full Name') age = IntCol(default=30) date = DateCol() friends = RelatedJoin('Person', otherColumn="friend_id") company = ForeignKey('Company', title='Company', default=None) status = EnumCol(enumValues=['Employed','Unemployed'], default='Unemployed', title='Status') salary = FloatCol() def __unicode__(self): return unicode(self.name) class Company(SQLObject): name = UnicodeCol(title='Company name') employees = MultipleJoin('Person') def __unicode__(self): return self.name class TestStringColWithTitle(SQLObject): """ Test model for ticket #272 and #300 """ name = StringCol(title="This is the name") age = IntCol(title='Edad') PK Šœ4ËÑ Ü Ü tgfastdata/tests/formmodel.pyc;ò ”oGDc@sldkTdklZedƒZeZdefd„ƒYZdefd„ƒYZdefd„ƒYZd S( (s*(s PackageHubs"turbogears.widgets.tests.formmodelsPersoncBs§tZdddddddgZedd ƒZed d ƒZeƒZe d d dƒZ e dddd e ƒZ edddgd dddƒZeƒZd„ZRS(Nsnamesagesdatesfriendsscompanysstatusssalarystitles Full NamesdefaultisPersons otherColumns friend_idsCompanys enumValuessEmployeds UnemployedsStatuscCst|iƒSdS(N(sunicodesselfsname(sself((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pys __unicode__s(s__name__s __module__s form_orders StringColsnamesIntColsagesDateColsdates RelatedJoinsfriendss ForeignKeysNonescompanysEnumColsstatussFloatColssalarys __unicode__(((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pysPersons ! sCompanycBs,tZeddƒZedƒZd„ZRS(Nstitles Company namesPersoncCs |iSdS(N(sselfsname(sself((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pys __unicode__s(s__name__s __module__s UnicodeColsnames MultipleJoins employeess __unicode__(((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pysCompanys sTestStringColWithTitlecBs,tZdZeddƒZeddƒZRS(s% Test model for ticket #272 and #300 stitlesThis is the namesEdad(s__name__s __module__s__doc__s StringColsnamesIntColsage(((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pysTestStringColWithTitle s N( s sqlobjectsturbogears.databases PackageHubshubs__connection__s SQLObjectsPersonsCompanysTestStringColWithTitle(shubsCompanys PackageHubsPersonsTestStringColWithTitles__connection__((sJbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/formmodel.pys?s   PK$;”49vêf**'tgfastdata/tests/test_datacontroller.pyimport turbogears import cherrypy import formmodel import turbogears.testutil as testutil import tgfastdata as fastdata class TestDataController(testutil.DBTest): model = formmodel class MyRoot(turbogears.controllers.RootController): test = fastdata.DataController( sql_class = formmodel.TestStringColWithTitle) def test_string_col_with_title(self): """ Test case for ticket #272 """ root = self.MyRoot() cherrypy.root = root cherrypy.tree.mount_points = {} print "\n\nRequest 1" testutil.createRequest("/test/") print cherrypy.response.body[0] assert "This is the name" in cherrypy.response.body[0] print "\n\nRequest 2" testutil.createRequest("/test/add") print cherrypy.response.body[0] assert "This is the name" in cherrypy.response.body[0] formmodel.TestStringColWithTitle(name="testName", age=25) testutil.createRequest("/test/1/edit") print cherrypy.response.body[0] assert "This is the name" in cherrypy.response.body[0] assert "testName" in cherrypy.response.body[0] testutil.createRequest("/test/1/show") print cherrypy.response.body[0] assert "testName" in cherrypy.response.body[0] PK Šœ4²÷nNN(tgfastdata/tests/test_datacontroller.pyc;ò ”oGDc@sMdkZdkZdkZdkiZdkZdeifd„ƒYZdS(NsTestDataControllercBs3tZeZdeiifd„ƒYZd„ZRS(NsMyRootcBstZeideiƒZRS(Ns sql_class(s__name__s __module__sfastdatasDataControllers formmodelsTestStringColWithTitlestest(((sTbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_datacontroller.pysMyRoot scCsK|iƒ}|t_hti_dGHtidƒtii dGHdtii djpt ‚dGHtidƒtii dGHdtii djpt ‚t i ddd d ƒtid ƒtii dGHdtii djpt ‚dtii djpt ‚tid ƒtii dGHdtii djpt ‚d S(s Test case for ticket #272 s Request 1s/test/isThis is the names Request 2s /test/addsnamestestNamesageis /test/1/edits /test/1/showN( sselfsMyRootsrootscherrypystrees mount_pointsstestutils createRequestsresponsesbodysAssertionErrors formmodelsTestStringColWithTitle(sselfsroot((sTbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_datacontroller.pystest_string_col_with_titles(       ( s__name__s __module__s formmodelsmodels turbogearss controllerssRootControllersMyRootstest_string_col_with_title(((sTbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_datacontroller.pysTestDataControllers( s turbogearsscherrypys formmodelsturbogears.testutilstestutils tgfastdatasfastdatasDBTestsTestDataController(stestutilsfastdatas turbogearsscherrypys formmodelsTestDataController((sTbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_datacontroller.pys?s     PKtš4"‚#C  !tgfastdata/tests/test_fastdata.py from sqlobject import SQLObject, StringCol, IntCol, connectionForURI from tgfastdata.datawidgets import FastDataGrid class FakeUser(SQLObject): _connection = connectionForURI("sqlite:///:memory:") userId = IntCol() name = StringCol() def _get_displayName(self): return self.name.capitalize() FakeUser.createTable() class TestFastDataGrid: def setup(self): self.grid = FastDataGrid(template = "tgfastdata.templates.datagrid") def test_dynamic_fields(self): fields = [ 'userId', 'displayName', ('Name', FakeUser._get_displayName), ('Name', 'displayName'), ] sr = FakeUser.select() d = dict(value=sr, fields=fields) self.grid.update_params(d) get_field = d['get_field'] assert ['userId', 'displayName', 'column-2', 'column-3'] == d['collist'] row = FakeUser(userId=123, name='john') assert 123 == get_field(row, 'userId') assert 'John' == get_field(row, 'displayName') assert 'John' == get_field(row, 'column-2') assert 'John' == get_field(row, 'column-3') def test_derive_fields_from_sr(self): sr = FakeUser.select() d = dict(value=sr) self.grid.update_params(d) get_field = d['get_field'] assert ['userId', 'name'] == d['collist'] row = FakeUser(userId=123, name='john') assert 123 == get_field(row, 'userId') assert 'john' == get_field(row, 'name') PK Šœ4fÓ!K "tgfastdata/tests/test_fastdata.pyc;ò -ÑODc@scdklZlZlZlZdklZdefd„ƒYZeiƒdfd„ƒYZ dS((s SQLObjects StringColsIntColsconnectionForURI(s FastDataGridsFakeUsercBs/tZedƒZeƒZeƒZd„ZRS(Nssqlite:///:memory:cCs|iiƒSdS(N(sselfsnames capitalize(sself((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pys_get_displayName s( s__name__s __module__sconnectionForURIs _connectionsIntColsuserIds StringColsnames_get_displayName(((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pysFakeUsers   sTestFastDataGridcBs#tZd„Zd„Zd„ZRS(NcCstddƒ|_dS(Nstemplatestgfastdata.templates.datagrid(s FastDataGridsselfsgrid(sself((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pyssetupscCs dddtifddfg}tiƒ}td|d|ƒ}|ii |ƒ|d}ddddg|d jpt ‚tdd d d ƒ}d ||dƒjpt ‚d ||dƒjpt ‚d ||dƒjpt ‚d ||dƒjpt ‚dS(NsuserIds displayNamesNamesvaluesfieldss get_fieldscolumn-2scolumn-3scollisti{snamesjohnsJohn( sFakeUsers_get_displayNamesfieldssselectssrsdictsdsselfsgrids update_paramss get_fieldsAssertionErrorsrow(sselfsdsfieldsssrs get_fieldsrow((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pystest_dynamic_fieldss!  $cCs¦tiƒ}td|ƒ}|ii|ƒ|d}ddg|djpt ‚tddddƒ}d||dƒjpt ‚d||dƒjpt ‚dS(Nsvalues get_fieldsuserIdsnamescollisti{sjohn( sFakeUsersselectssrsdictsdsselfsgrids update_paramss get_fieldsAssertionErrorsrow(sselfsdssrs get_fieldsrow((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pystest_derive_fields_from_sr%s  (s__name__s __module__ssetupstest_dynamic_fieldsstest_derive_fields_from_sr(((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pysTestFastDataGrids  N( s sqlobjects SQLObjects StringColsIntColsconnectionForURIstgfastdata.datawidgetss FastDataGridsFakeUsers createTablesTestFastDataGrid(s SQLObjectsconnectionForURIs FastDataGridsIntCols StringColsFakeUsersTestFastDataGrid((sNbuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_fastdata.pys?s  PK$;”4Š•]‹ÌÌ"tgfastdata/tests/test_formmaker.pyfrom turbogears.testutil import DBTest import formencode from tgfastdata import formmaker from turbogears import validators from turbogears import widgets import formmodel class TestSQLObjectWidgets(DBTest): model = formmodel def test_simpleWidgets(self): fields = formmaker.fields_for(formmodel.Person) assert len(fields) == 7 assert fields[1].name == "age" assert fields[1].default == 30 assert isinstance(fields[1].validator, validators.Int) assert fields[0].label == "Full Name" assert isinstance(fields[2], widgets.CalendarDatePicker) assert fields[3].name == "friends" assert isinstance(fields[3].validator, formencode.ForEach) assert fields[4].name == "company" assert len(fields[4].options) > 0 assert fields[5].name == "status" assert isinstance(fields[5], widgets.SingleSelectField) assert isinstance(fields[5].validator, validators.OneOf) assert fields[6].name == "salary" assert isinstance(fields[6].validator, validators.Number) # Quick test of name capitalization ltests = ( ('first_name', "First Name"), ('firstName', "First Name"), ('ADDRESS1', "Address1"), ('email', "Email"), ('secureID', "Secure Id"), ('PhoneNO', "Phone No"), ('floor1id', "Floor1id"), ) for ltest in ltests: # print "'%s' --> '%s (%s)'" % (ltest[0], formmaker.name2label(ltest[0]), ltest[1]) assert formmaker.name2label(ltest[0]) == ltest[1] PK Šœ4¾„a’: : #tgfastdata/tests/test_formmaker.pyc;ò ”oGDc@sÛdklZdkZdklZdklZdklZdkZdefd„ƒYZ ddfd dfd d fd d fddfddfddffZ x3e D]+Z ei e dƒe djpt ‚q¨WdS((sDBTestN(s formmaker(s validators(swidgetssTestSQLObjectWidgetscBstZeZd„ZRS(NcCsÎtitiƒ}t|ƒdjpt‚|didjpt‚|didjpt‚t |di t i ƒpt‚|di djpt‚t |dtiƒpt‚|did jpt‚t |di tiƒpt‚|d id jpt‚t|d iƒdjpt‚|d id jpt‚t |d tiƒpt‚t |d i t iƒpt‚|didjpt‚t |di t iƒpt‚dS(Niisageiis Full Nameiisfriendsiscompanyisstatusissalary(s formmakers fields_fors formmodelsPersonsfieldsslensAssertionErrorsnamesdefaults isinstances validators validatorssIntslabelswidgetssCalendarDatePickers formencodesForEachsoptionssSingleSelectFieldsOneOfsNumber(sselfsfields((sObuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_formmaker.pystest_simpleWidgets s !!!!(s__name__s __module__s formmodelsmodelstest_simpleWidgets(((sObuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_formmaker.pysTestSQLObjectWidgetsss first_names First Names firstNamesADDRESS1sAddress1semailsEmailssecureIDs Secure IdsPhoneNOsPhone Nosfloor1idsFloor1idii(sturbogears.testutilsDBTests formencodes tgfastdatas formmakers turbogearss validatorsswidgetss formmodelsTestSQLObjectWidgetssltestssltests name2labelsAssertionError( sltestss formencodes formmodels formmakersTestSQLObjectWidgetsswidgetssltests validatorssDBTest((sObuild/bdist.darwin-8.6.0-Power_Macintosh/egg/tgfastdata/tests/test_formmaker.pys?s      E PK Šœ4Ý¡ïBB¤EGG-INFO/entry_points.txtPK Šœ4¤yEGG-INFO/not-zip-safePK Šœ4i×ùÈç礬EGG-INFO/PKG-INFOPK Šœ4 ,¶¢¤ÂEGG-INFO/requires.txtPK Šœ4¡pææ¤EGG-INFO/SOURCES.txtPK Šœ4a`¯H ¤EGG-INFO/top_level.txtPK$;”41Dd]>>¤^tgfastdata/__init__.pyPK Šœ4·Ú7Æ<<¤Ðtgfastdata/__init__.pycPK$;”4ôßOàZ*Z*¤A tgfastdata/datacontroller.pyPK Šœ4Ÿ 9ûm5m5¤Õ3tgfastdata/datacontroller.pycPKtš4n'ÉøÏϤ}itgfastdata/datawidgets.pyPK Šœ4;¥g8¤ƒztgfastdata/datawidgets.pycPK$;”4 ýz¤Ñ™tgfastdata/formmaker.pyPK Šœ4m®Ks$s$¤°tgfastdata/formmaker.pycPK$;”4Ý5´%LL¤¿Ôtgfastdata/plugin.pyPK Šœ4 µ]E••¤=Õtgfastdata/plugin.pycPKü‰œ4ÑäÖõõ¤×tgfastdata/release.pyPK Šœ489 ²--¤-Øtgfastdata/release.pycPK$;”4 ¤ŽÚtgfastdata/templates/__init__.pyPK Šœ4˜Ã÷!¤ÌÚtgfastdata/templates/__init__.pycPK$;”4„PøhÌÌ!¤¨Ûtgfastdata/templates/datagrid.kidPK$;”4²ý&µµ¤³ßtgfastdata/templates/form.kidPK$;”4Z•1ZZ¤£átgfastdata/templates/item.kidPK$;”4+—Ȳ²¤8ätgfastdata/templates/list.kidPK$;”4“d%ª¹¹¤%ætgfastdata/templates/master.kidPK$;”4¤étgfastdata/tests/__init__.pyPK Šœ4Zr|™™¤Uétgfastdata/tests/__init__.pycPK$;”4mðàhéé¤)êtgfastdata/tests/formmodel.pyPK Šœ4ËÑ Ü Ü ¤Mîtgfastdata/tests/formmodel.pycPK$;”49vêf**'¤eøtgfastdata/tests/test_datacontroller.pyPK Šœ4²÷nNN(¤Ôýtgfastdata/tests/test_datacontroller.pycPKtš4"‚#C  !¤htgfastdata/tests/test_fastdata.pyPK Šœ4fÓ!K "¤´ tgfastdata/tests/test_fastdata.pycPK$;”4Š•]‹ÌÌ"¤utgfastdata/tests/test_formmaker.pyPK Šœ4¾„a’: : #¤tgfastdata/tests/test_formmaker.pycPK## ü(