Changes between Version 31 and Version 32 of BluePrintRESTImplementation
- Timestamp:
- 01/11/09 09:33:17 (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
BluePrintRESTImplementation
v31 v32 10 10 SQLField('uuid',length=64,default=uuid.uuid4()), 11 11 SQLField('name')) 12 # NB Beware of lambdas & %s substitution as they get evaluated when called, not when defined! 13 db['%s' % table].represent=lambda table:shn_list_item(table,resource='shelter',action='display') 12 exec("s3.crud_fields.%s=['name']" % table) 13 db['%s' % table].exposes=s3.crud_fields['%s' % table] 14 # Moved to Controller - allows us to redefine for different scenarios (& also better MVC separation) 15 #db['%s' % table].displays=s3.crud_fields['%s' % table] 16 # NB Beware of lambdas & %s substitution as they get evaluated when called, not when defined! 17 #db['%s' % table].represent=lambda table:shn_list_item(table,resource='shelter',action='display') 14 18 title_create=T('Add Shelter') 15 19 title_display=T('Shelter Details') … … 24 28 msg_record_deleted=T('Shelter deleted') 25 29 msg_list_empty=T('No Shelters currently registered') 26 exec(' crud_strings.%s=Storage(title_create=title_create, title_display=title_display, title_list=title_list, title_update=title_update, subtitle_create=subtitle_create, subtitle_list=subtitle_list, label_list_button=label_list_button, label_create_button=label_create_button, msg_record_created=msg_record_created, msg_record_modified=msg_record_modified, msg_record_deleted=msg_record_deleted, msg_list_empty=msg_list_empty)' % table)30 exec('s3.crud_strings.%s=Storage(title_create=title_create, title_display=title_display, title_list=title_list, title_update=title_update, subtitle_create=subtitle_create, subtitle_list=subtitle_list, label_list_button=label_list_button, label_create_button=label_create_button, msg_record_created=msg_record_created, msg_record_modified=msg_record_modified, msg_record_deleted=msg_record_deleted, msg_list_empty=msg_list_empty)' % table) 27 31 }}} 28 32 These optional settings can also be set, if-desired: … … 35 39 {{{ 36 40 from gluon.storage import Storage 37 crud_strings=Storage() 41 # Keep all S3 framework-level elements stored off here, so as to avoid polluting global namespace & to make it clear which part of the framework is being interacted with 42 s3=Storage() 43 s3.crud_fields=Storage() 44 s3.crud_strings=Storage() 45 s3.listonly=Storage() 46 s3.undeletable=Storage() 38 47 39 48 def shn_crud_strings_lookup(resource): 40 49 "Look up CRUD strings for a given resource based on the definitions in models/module.py." 41 return getattr( crud_strings,'%s' % resource)50 return getattr(s3.crud_strings,'%s' % resource) 42 51 43 52 def shn_rest_controller(module,resource): … … 57 66 CSV (useful for synchronization) 58 67 - read-only for now 68 AJAX (designed to be run asynchronously to refresh page elements) 59 69 60 70 ToDo: … … 69 79 table=db['%s_%s' % (module,resource)] 70 80 if resource=='setting': 71 crud_strings=shn_crud_strings_lookup(resource)81 s3.crud_strings=shn_crud_strings_lookup(resource) 72 82 else: 73 crud_strings=shn_crud_strings_lookup(table) 83 s3.crud_strings=shn_crud_strings_lookup(table) 84 try: 85 s3.deletable=not s3.undeletable['%s' % table] 86 except: 87 s3.deletable=True 88 try: 89 s3.listadd=not s3.listonly['%s' % table] 90 except: 91 s3.listadd=True 74 92 75 93 # Which representation should output be in? … … 92 110 ) 93 111 if representation=="html": 112 if t2.logged_in and s3.deletable: 113 db['%s' % table].represent=lambda table:shn_list_item(table,resource='%s' % resource,action='display',extra="INPUT(_type='checkbox',_class='delete_row',_name='%s' % resource,_id='%i' % table.id)") 114 else: 115 db['%s' % table].represent=lambda table:shn_list_item(table,resource='%s' % resource,action='display') 94 116 list=t2.itemize(table) 95 117 if list=="No data": 96 list=crud_strings.msg_list_empty 97 title=crud_strings.title_list 98 subtitle=crud_strings.subtitle_list 99 if t2.logged_in: 118 list=s3.crud_strings.msg_list_empty 119 title=s3.crud_strings.title_list 120 subtitle=s3.crud_strings.subtitle_list 121 if t2.logged_in and s3.listadd: 122 # Display the Add form below List 123 if s3.deletable: 124 # Add extra column header to explain the checkboxes 125 if isinstance(list,TABLE): 126 list.insert(0,TR('',B('Delete?'))) 100 127 form=t2.create(table) 128 # Check for presence of Custom View 101 129 custom_view='%s_list_create.html' % resource 102 130 _custom_view=os.path.join(request.folder,'views',module,custom_view) … … 105 133 else: 106 134 response.view='list_create.html' 107 addtitle= crud_strings.subtitle_create135 addtitle=s3.crud_strings.subtitle_create 108 136 return dict(module_name=module_name,modules=modules,options=options,list=list,form=form,title=title,subtitle=subtitle,addtitle=addtitle) 109 137 else: 110 add_btn=A(crud_strings.label_create_button,_href=t2.action(resource,'create'),_id='add-btn') 138 # List only 139 if s3.listadd: 140 add_btn=A(s3.crud_strings.label_create_button,_href=t2.action(resource,'create'),_id='add-btn') 141 else: 142 add_btn='' 143 # Check for presence of Custom View 111 144 custom_view='%s_list.html' % resource 112 145 _custom_view=os.path.join(request.folder,'views',module,custom_view) … … 116 149 response.view='list.html' 117 150 return dict(module_name=module_name,modules=modules,options=options,list=list,title=title,subtitle=subtitle,add_btn=add_btn) 151 elif representation=="ajax": 152 if t2.logged_in and s3.deletable: 153 db['%s' % table].represent=lambda table:shn_list_item(table,resource='%s' % resource,action='display',extra="INPUT(_type='checkbox',_class='delete_row',_name='%s' % resource,_id='%i' % table.id)") 154 else: 155 db['%s' % table].represent=lambda table:shn_list_item(table,resource='%s' % resource,action='display') 156 list=t2.itemize(table) 157 if list=="No data": 158 list=s3.crud_strings.msg_list_empty 159 if s3.deletable: 160 # Add extra column header to explain the checkboxes 161 if isinstance(list,TABLE): 162 list.insert(0,TR('',B('Delete?'))) 163 response.view='plain.html' 164 return dict(item=list) 118 165 elif representation=="plain": 119 166 list=t2.itemize(table) … … 149 196 ) 150 197 if representation=="html": 198 try: 199 db['%s' % table].displays=s3.crud_fields['%s' % table] 200 except: 201 pass 151 202 item=t2.display(table) 203 # Check for presence of Custom View 152 204 custom_view='%s_display.html' % resource 153 205 _custom_view=os.path.join(request.folder,'views',module,custom_view) … … 156 208 else: 157 209 response.view='display.html' 158 title= crud_strings.title_display210 title=s3.crud_strings.title_display 159 211 edit=A(T("Edit"),_href=t2.action(resource,['update',t2.id]),_id='edit-btn') 160 delete=A(T("Delete"),_href=t2.action(resource,['delete',t2.id]),_id='delete-btn') 161 list_btn=A(crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn') 212 if s3.deletable: 213 delete=A(T("Delete"),_href=t2.action(resource,['delete',t2.id]),_id='delete-btn') 214 else: 215 delete='' 216 list_btn=A(s3.crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn') 162 217 return dict(module_name=module_name,modules=modules,options=options,item=item,title=title,edit=edit,delete=delete,list_btn=list_btn) 163 218 elif representation=="plain": … … 215 270 ) 216 271 if representation=="html": 217 t2.messages.record_created= crud_strings.msg_record_created272 t2.messages.record_created=s3.crud_strings.msg_record_created 218 273 form=t2.create(table) 274 # Check for presence of Custom View 219 275 custom_view='%s_create.html' % resource 220 276 _custom_view=os.path.join(request.folder,'views',module,custom_view) … … 223 279 else: 224 280 response.view='create.html' 225 title= crud_strings.title_create226 list_btn=A( crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn')281 title=s3.crud_strings.title_create 282 list_btn=A(s3.crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn') 227 283 return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn) 228 284 elif representation=="plain": … … 260 316 ) 261 317 if representation=="html": 262 t2.messages.record_modified= crud_strings.msg_record_modified318 t2.messages.record_modified=s3.crud_strings.msg_record_modified 263 319 form=t2.update(table,deletable=False) 320 # Check for presence of Custom View 264 321 custom_view='%s_update.html' % resource 265 322 _custom_view=os.path.join(request.folder,'views',module,custom_view) … … 268 325 else: 269 326 response.view='update.html' 270 title= crud_strings.title_update271 list_btn=A( crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn')327 title=s3.crud_strings.title_update 328 list_btn=A(s3.crud_strings.label_list_button,_href=t2.action(resource),_id='list-btn') 272 329 return dict(module_name=module_name,modules=modules,options=options,form=form,title=title,list_btn=list_btn) 273 330 elif representation=="plain": … … 302 359 new_value='' 303 360 ) 304 t2.messages.record_deleted=crud_strings.msg_record_deleted 305 t2.delete(table,next=resource) 361 t2.messages.record_deleted=s3.crud_strings.msg_record_deleted 362 if representation=="ajax": 363 t2.delete(table,next='%s?format=ajax' % resource) 364 else: 365 t2.delete(table,next=resource) 306 366 else: 307 367 t2.redirect('login',vars={'_destination':'%s/delete/%i' % (resource,t2.id)})