These features are now documented in the html book. Working on more. [x] Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan [x] db(...).select(cacheable=True) make select 30% faster [x] db(...).select(cache=(cache.ram,3600)) now caches parsed data 100x faster [x] db(...).count(cache=(cache.ram,3600)) now supported [x] MongoDB support in DAL (experimental), thanks Mark Breedveld [x] db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks) [x] DAL BIGINT support and DAL(...,bigint_id=True) [x] IS_IN_DB(..., distinct=True) [x] new syntax: db.mytable.insert(myuploadfield=open(....)), thank you Iceberg [x] db(...).select(db.mytable.myfield.count(distinct=True)) [x] teradata adapter, thanks Andrew Willimott [x] experimental Sybase Adapter [x] added db.table.field.avg() [x] Field(... 'upload', default=path) now accepts a path to a local file as default value, if user does not upload a file. Relative path looks inside current application folder, thanks Marin [x] executesql(...,fields=,columns=) allows parsing of results in Rows, thanks Anthony
[x] @auth.requires_login(otherwise=URL(...)) [x] CRYPT now defaults to pbkdf2(1000,20,sha1) [x] allow storage of uploads on any PyFileSystem (including amazon) [x] more export options in SQLFORM.grid and SQLFORM.smartgrid (html, xml, csv, ...) [x] new layout based on Twitter Bootstrap [x] New generic views: generic.ics (Mac Mail Calendar) and generic.map (Google Maps) [x] request.args(0,default=0, cast=int, otherwise=URL(...)), thanks Anthony [x] redirect(...,type='auto') will be handled properly in ajax responses [x] routes in can redirect outside with routes_in=[('/path','303->http://..')] [x] .coffee and .less support in response.files, thanks Sam Sheftel [x] ldap certificate support [x] pg8000 postgresql driver support (experimental) [x] db.table.field.like(...,case_sensitive=False) (thanks Floyd) [x] db.table.field.regexp(...) for sqlite and postgres [ ] db(...,ignore_common_filters=True) [x] db(db.dog_id.belongs(db.dogs.owner=='james')).select() [ ] db(...).select().group_by_value(db.table.field) (thanks Yair) [x] db = DAL('imap://user:password@server:port') support (thanks Alan Etkin) [x] db = DAL('teradata://DSN=dsn;UID=user;PWD=pass; DATABASE=database') (thanks Adrew Willmott) [x] db = DAL('mongodb://127.0.0.1:5984/db') (experimental, thanks Mark Breedveld) [x] db = DAL('cubrid') (experimental) [x] db = DAL('postgres:pg8000:...') and DAL('postgres:psycopg2:...') [x] pg8000 now ships with web2py (thanks Mariano) [x] reponse.delimiters = ('\\[','\\]') (thanks Denes) [x] conditional menu items (reponse.menu=[(title,bool,link,[],condition)] I could use some help documenting these features [ ] geodal and spatialite, thanks Denes and Fran (experimental) [ ] Support for Google App Engine projections, thanks Christian [ ] Scheduler Improvements (thanks to niphlod, ykessler, dhx, toomim) [ ] DIV(..).elements(...replace=...), thanks Anthony [ ] new fpdf, thanks Mariano [ ] included web-based debugger (experimental, thanks Mariano) [ ] pluralization system (Vladyslav) [ ] T.M helper (Vladyslav) Eventually some of the new features require a loger discussion in a blog-like fashion than just a mention and a short example in the book. > > --