web2py Changelog

What's new in web2py 2.14.6

May 10, 2016
  • Increased test coverage
  • Fixed some newly discovered security issues in admin: CSRF vulnerability in admin that allows disabling apps Brute force password attack vulnerability in admin

New in web2py 2.14.1-4 (Apr 13, 2016)

  • fixed two major security issues that caused the examples app to leak information
  • new Auth(…,host_names=[…]) to prevent host header injection
  • improved scheduler
  • pep8 enhancements
  • many bug fixes
  • restored GAE support that was broken in 2.13.*
  • improved fabfile for deployment
  • refactored examples with stupid.css
  • new JWT implementation (experimental)
  • new gluon.contrib.redis_scheduler
  • myconf.get
  • LDAP groups (experimental)
  • .flash -> .w2p_flash
  • Updated feedparser.py 5.2.1
  • Updated jQuery 1.12.2
  • welcome app now checks for version number
  • Redis improvements.

New in web2py 2.13.2 (Dec 26, 2015)

  • Fixed a security issue in request_reset_password

New in web2py 2.13.1 (Dec 20, 2015)

  • added fabfile.py
  • fixed oauth2 renew token, thanks dokime7
  • fixed add_membership, del_membership, add_membership IntegrityError (when auth.enable_record_versioning)
  • allow passing unicode to template render
  • allow IS_NOT_IN_DB to work with custom primarykey, thanks timmyborg
  • allow HttpOnly cookies
  • french pluralizaiton rules, thanks Mathieu Clabaut
  • fixed bug in redirect to cas service, thanks Fernando González
  • allow deploying to pythonanywhere from the web2py admin that you're running locally, thanks Leonel
  • better tests
  • many more bug fixes

New in web2py 2.12.1 (Aug 7, 2015)

  • security fix: Validate for open redirect everywhere, not just in login()
  • allow to pack invidual apps and selected files as packed exe files
  • allow bulk user registration with default bulk_register_enabled=False
  • allow unsorted multiword query in grid search
  • better MongoDB support with newer pyDAL
  • enable /appadmin/manage/auth by default for user admin
  • allow mail.settings.server='logging:filename' to log emails to a file
  • better caching logic
  • fixed order of confirm-password field
  • TLS support in ldap
  • prettydate can do UTC
  • jquery 1.11.3
  • bootstrap 3.3.5
  • moved to codecov and enabled appveyor
  • many bug fixes

New in web2py 2.11.1 (Aug 7, 2015)

  • Many small but significative improvements and bug fixes

New in web2py 2.10.2 (Apr 1, 2015)

  • welcome app defaults to Bootstrap 3
  • DAL -> pyDAL (thanks Giovanni, Niphlod, Paolo)
  • new modular dal
  • fixed problems with GAE support
  • moved to full NDB support
  • improved connection pooling logic
  • optional cache.ram.max_ram_utilization = 90 (experimental)
  • improved cache.disk logic (thanks Niphlod and Leonel)
  • lots of pep8 improvements, thanks Richard
  • added support for email attchments when auth.settings.server='gae'
  • fixed app.yaml.example for GAE
  • fixed many small issues
  • many many more tests (thanks Giovanni, Niphlod, Paolo)
  • upgrading static libraries (bootstrap, codemirror, jquery, etc)

New in web2py 2.9.12 (Jan 20, 2015)

  • Tornado HTTPS support, thanks Diego
  • Modular DAL, thanks Giovanni
  • Added coverage support, thanks Niphlod
  • More tests, thanks Niphlod and Paolo Valleri
  • Added support for show_if in readonly sqlform, thanks Paolo
  • Improved scheduler, thanks Niphlod
  • Email timeout support
  • Made web2py's custom_import work with circular imports, thanks Jack Kuan
  • Added Portuguese, Catalan, and Burmese translations
  • Allow map_hyphen to work for application names, thanks Tim Nyborg
  • New module appconfig.py, thanks Niphlod
  • Added geospatial support to Teradata adaptor, thanks Andrew Willimott
  • Many bug fixes

New in web2py 2.9.10 (Sep 16, 2014)

  • markdown2 2.2.3
  • memcache 1.53

New in web2py 2.9.9 (Sep 9, 2014)

  • fixed support of GAE + SQL
  • fixed a typo in the license of some login_methods code. It is now LGPL consistently with the rest of the web2py code. This change applied to all previous web2py versions.
  • support for SAML2 (with pysaml2)
  • Sphinx documentation (thanks Niphlod)
  • improved scheduler (thanks Niphlod)
  • increased security
  • better cache.dick (thanks Leonel)•sessions are stored in subfolders for speed•postgres support for "INSERT ... RETURING ..."
  • ldap support for Certificate Authority (thanks Maggs and Shane)
  • improved support for S/Mime X.509 (thanks Gyuris)
  • better welcome app
  • support for Collection+JSON Hypermedia API (RESTful self documenting API)
  • jQuery 1.11
  • codemirror 4.0.3
  • support for the new janrain API
  • new "web2py.py -G config" to make GAE configuration easier
  • many small bug fixes

New in web2py 2.9.6 (Sep 2, 2014)

  • fixed a typo in the license of some login_methods code. It is now LGPL consistently with the rest of the web2py code. This change applied to all previous web2py versions.
  • support for SAML2 (with pysaml2)
  • Sphinx documentation (thanks Niphlod)
  • improved scheduler (thanks Niphlod)
  • increased security
  • postgres support for "INSERT ... RETURING ..."
  • ldap support for Certificate Authority (thanks Maggs and Shane)
  • improved support for S/Mime X.509 (thanks Gyuris)
  • better welcome app
  • support for Collection+JSON Hypermedia API (RESTful self documenting API)
  • jQuery 1.11
  • codemirror 4.0.3
  • support for the new janrain API
  • new "web2py.py -G config" to make GAE configuration easier
  • many small bug fixes

New in web2py 2.9.5 (Apr 4, 2014)

  • many small but important bug fixes
  • jquery 1.11
  • codemirror 3.21, thanks Paolo Valleri
  • fixed security issue with sessions in database, thanks Nathan Humphreys
  • fixed security issue with persistant data in session, thanks Kiran
  • fixed security issue with redirect after expired login, thanks André Kablu
  • cleaner DAL and rname integration, thanks niphlod and Michele
  • added mongodb and imap tests for dal, thanks Alan
  • NoSQL dal tests, thanks Alan
  • better docstrings, thanks Niphlod
  • allow URL(...,language=...) with parametric router, thanks Jonathan
  • allow non-expiration of gae-memcache, thanks crimsoncantab
  • MARKMIN(...,_class='...'), thanks Luca
  • better transliteration in building slugs
  • autolink emails
  • new Janrain API, thanks PeterQ2
  • enable admin app for GAE (experimental), thanks Alan
  • many bug fixes
  • invalidate function in web2py.js, thanks Paolo
  • DAL(...,adapter_args=dict(engine='MyISAM'))
  • todolist panel in admin editor, thanks Paolo Valleri

New in web2py 2.8.1 (Dec 14, 2013)

  • no more winservice (use nssm instead)
  • better imap support in DAL
  • db().select().as_tree()
  • bootstrap 2.3.2
  • codemirror 3.19
  • improved mongoDB support, thanks Alan
  • support for wiki custom render function
  • Wiki(...groups=['x','y']) allows bypassing default permissions
  • fixed websocket_messaging.py to support newer Tornado
  • NDB support for GAE, thanks Quint
  • fixed major concurrecy issue with MEMDB
  • blocked generic.jsonp for security reasons
  • many bug fixes, thanks Niphlod, Michele, Anthony, Tim, and many others.

New in web2py 2.7.4 (Oct 18, 2013)

  • jQuery 1.10.2
  • codemirror 3.18, thanks Paolo
  • namespaces in T("Welcome", ns="namespace"), thanks jamarcer (experimental)
  • more Auth options, thanks Charles
  • more admin configuration, thanks Roberto
  • new gluon.contrib.strip.StripeForm for PCI compliant payments
  • webclient can hendle lists, thanks Yair
  • allows SQLFORM.grid(...,ignore_common_filters=True)
  • more translations, thanks Vladyslav
  • better session2trash.py, works with scheduler, thanks niphlod
  • fixed problem with ENABLED/DISABLED
  • many bug fixes, thanks niphlod, michele, anthony, roberto, tim, and others

New in web2py 2.6.4 (Oct 18, 2013)

  • Attention all users: For pre 2.6 applications to work with web2py >=2.6, you must copy static/js/web2py.js, controllers/appadmin.py, and views/appadmin.html from the welcome app to your own apps (all of them).
  • Attention production users: The updated handlers and examples are in handlers/ and examples/. The updated ones will not override the existing ones. To use the new ones it is not sufficient to upgrade web2py, you also need to copy the desired handler/example in the root web2py/ folder.
  • Attention MySQL users: The length of string fields changed from 255 to 512 bytes. If you have migrations enabled this will trigger a large migration. To prevent it, first set migrate_enabled=False, upgrade, check everything is ok, then add length=255 to your string Fields, then re-enable migrations with migrate_enabled=True if needed.
  • better directory structure: handlers/ extras/ examples/
  • better MongoDb support, thanks Alan
  • better Admin editor interface, thanks Paolo, Roberto (codemirror 3), and Lightdot
  • better layout.html and web2py_bootstrap.css, thanks Paolo
  • refactored web2py.js makes code more readable, thanks Niphlod
  • compute fields can depend on other compute(d) fields
  • more functions in appadmin (/manage/auth), thanks Anthony
  • support for CAST in SQL generation
  • new API jQuery('#component').reload()
  • new API rows.render()
  • new API table.field.referent, table._references
  • new API db(...).validate_and_update(...)
  • new API Wiki(..., force_render=True) renders the page source again instead of using cached
  • Wiki now automatically parses named component arguments @{f:a=1,b='twp',c=variable}
  • auth.get_or_create_user(login=False)
  • auth = Auth(crsf_protection = False) prevents creating sessions in login/register forms.
  • enable multiple renderers in wiki, thanks Alan
  • log messages from Auth are no longer translated (for speed and readability)
  • update jQuery mobile to 1.3.1
  • reduced memory footprint by conditionally loading Tk
  • faster pbkdf2 uses OpenSSL, thanks Michele
  • many speed improvements, thanks Michele
  • better session logic, prevents false positive when detecting session changes.
  • scripts/import_static.py converts a static site to a web2py app (experimental)
  • support for new http error code 451
  • profiler saves dump in dir, thanks Niphlod
  • upgraded pyfpdf, thanks Mariano
  • gluon/contrib/pdfinvoice.py for generating PDF invoices (assumes reportlab)
  • no more double submission of forms (even without crsf protection), thanks Niphlod
  • speedup for define_table, thanks Michele
  • settings.cfg to admin, thanks Paolo
  • many bugs fixed, thanks Niphlod, Michele, Roberto, Jonathan, and many others
  • 2.6,3 specifically fixed a possible DoS vulnerability
  • 2.6.4 specifically fixes major problem introduced in 2.6.1 with session logic

New in web2py 2.5.2 (Oct 18, 2013)

  • Web editor with tabs

New in web2py 2.5.1 (Oct 18, 2013)

  • New style virtual fields in grid
  • Conditional fields (experimental) db.table.field.show_if = db.table.otherfield==True or db.table.field.show_if = db.table.otherfiel.contains(values)
  • auth.settings.manager_group_role="manager" enables http://.../app/appadmin/auth_manage and http://.../app/appadmin/manage for members of the "manager" group. (also experimental)
  • support for POST variables in DELETE
  • Fixed memory leak when using the TAG helper

New in web2py 2.4.7 (May 29, 2013)

  • pypy support, thanks Niphlod
  • more bug fixes

New in web2py 2.4.6 (May 29, 2013)

  • better tests
  • new ANY_OF and IS_IPV6 validators
  • new custom save option
  • many small bug fixes

New in web2py 2.4.5 (Mar 25, 2013)

  • travis.ci integration (thanks Marc Abramowitz and Niphlod). Passes all tests (thanks Niplod).
  • IS_DATE and IS_DATETIME can specify timezone

New in web2py 2.4.2 (Mar 4, 2013)

  • 2D GEO API: geoPoint, getLine, geoPolygon
  • support for 'json' field type in DAL
  • schema export with db.as_json/as_xml, thanks Alan
  • graph representation of models
  • admin based on bootstrap, thanks Paolo
  • support for semantic versioning
  • new bootstrap based admin, thanks Paolo
  • improved scheduler (and change in scheduler field names), thanks Niphlod
  • graphiz support added to adm, thanks Jose
  • on_failure in grid
  • db.table.field.abs()
  • better wiki
  • geoPoint, getLine, geoPolygon
  • better reporting of 500 ajax errors
  • better grid
  • improved/fixed mongodb support
  • improved parse_as_rest(patterns=...), thanks Denes
  • improved IMAP DAL support, thanks Alan
  • improved security when cookies in sessions
  • Row.as_xml, as_json, as_dict, as_yaml thanks Alan
  • smarted custom_import
  • setup-ubuntu-12-04-redmine-unicorn-web2py-uwsgi-nginx.sh
  • added support for motor and pulsar servers, thanks Niphlod
  • added json-rpc2 support
  • added pypyodbc.py driver
  • allow auth.settings.ondelete='CASCADE'
  • new syntax IS_EXPR(lambda value: ...
  • using google for QR codes (although Graph API will be deprecated in 2015)
  • upgraded fpdf to 1.7.1
  • bug fixes (including issues with calendar.js and archive tables)

New in web2py 2.3.1 (Dec 15, 2012)

  • new virtual fields syntax: db.define_table('person',Field('name'),Field.Virtual('namey',lambda row: row.person.name+'y'))
  • db.thing(name='Cohen',_orderby=db.thing.name), thanks Yair
  • made many modules Python 3.3 friendly (compile but not tested)
  • better welcome css, thanks Paolo
  • jQuery 1.8.3
  • Bootstrap 2.2.2
  • Modernizr 2.6.2 (custom full options)
  • integration with analyitics.js (0.2.0)
  • better scheduler, thanks Niphlod
  • page and media preview in wiki, thanks Niphlod
  • create new auth.wiki page from slug model, thanks Nico
  • conditional menus with auth.wiki(menugroups=['wiki_editor'])
  • better security in grid/smartgrid
  • allow LOADing multiple grids, thanks Niphlod
  • auth.settings.login_onfail, thanks Yair
  • better handling of session files for speed
  • added heroku support (experimental)
  • added rocket support for IPV6, thanks Chirs Winebrinner
  • more customizable menus with MENU(li_first, li_last..)
  • added support for paymentech (gluon/contrib/paymentech.py)
  • fixed broken cron
  • fixed possible xss with share.js
  • many bug fixes. Closed more than 50 tickets since 2.2.1

New in web2py 2.2.1 (Oct 22, 2012)

  • session.connect(cookie_key='secret', compression_level=9) stores sessions in cookies
  • T.is_writable = False prevents T from dynamically updating langauge files
  • all code is more PEP8 compliant
  • better custom_importer behaviour (now works per app, is smalled and faster)
  • fixed some bugs
  • upgraded feedparser.py and rss2.py
  • codemirror has autoresize

New in web2py 2.1.0 (Oct 20, 2012)

  • overall faster web2py
  • when apps are deleted, a w2p copy left in deposit folder
  • change in cron (it is now disabled by default). removed -N option and introduced -Y.
  • faster web2py_uuid() and request initialization logic, thanks Michele
  • static asset management, thanks Niphlod
  • improved mobile admin
  • request.requires_https and Auth(secure=True), thanks Yarin and Niphlod
  • better custom_import (works per app and is faster), thanks Michele
  • redis_sesssion.py, thanks Niphlod
  • allow entropy computation in IS_STRONG and web2py.js, thanks Jonathan and Niphlod
  • fixed many aith.wiki problems
  • support for auth.wiki(render='html')
  • better welcome layout, thanks Paolo
  • db.define_table(...,redefine=overall faster web2py
  • when apps are deleted, a w2p copy left in deposit folder
  • change in cron (it is now disabled by default). removed -N option and introduced -Y.
  • faster web2py_uuid() and request initialization logic, thanks Michele
  • static asset management, thanks Niphlod
  • improved mobile admin
  • request.requires_https and Auth(secure=True), thanks Yarin and Niphlod
  • better custom_import (works per app and is faster), thanks Michele
  • redis_sesssion.py, thanks Niphlod
  • allow entropy computation in IS_STRONG and web2py.js, thanks Jonathan and Niphlod
  • fixed many aith.wiki problems
  • support for auth.wiki(render='html')
  • better welcome layout, thanks Paolo
  • db.define_table(...,redefine=True)
  • DAL, Row, and Rows object can now be pickled/unpickled, thanks to zombie DAL.
  • admin uses codemirror
  • allow syntax auth = Auth(db).define_tables()
  • better auth.wiki with preview, thanks Alan
  • better auth.impersonate, thanks Alan
  • upgraded jQuery 1.8
  • upgraded Bootstrap 2.1
  • fixed problem with dropbox_account.py
  • many fixes to cache.ram, cache.disk, memcache and gae_memcache
  • cache.with_prefix(cache.ram,'prefix')
  • db.table.field.epoch() counts seconds from epoch
  • DAL support for SQL CASE, example: db().select(...query.case('true','false))
  • DAL(...,do_connect=False) allows faking connections
  • DAL(...,auto_import=True) now retieves some fiel attributes
  • mail can specify a sender: mail.send(...,sender='Mr X ')
  • renamed gluon/contrib/comet_messaging.py -> gluon/contrib/websocket_messaging.py
  • True)
  • DAL, Row, and Rows object can now be pickled/unpickled, thanks to zombie DAL.
  • admin uses codemirror
  • allow syntax auth = Auth(db).define_tables()
  • better auth.wiki with preview, thanks Alan
  • better auth.impersonate, thanks Alan
  • upgraded jQuery 1.8
  • upgraded Bootstrap 2.1
  • fixed problem with dropbox_account.py
  • many fixes to cache.ram, cache.disk, memcache and gae_memcache
  • cache.with_prefix(cache.ram,'prefix')
  • db.table.field.epoch() counts seconds from epoch
  • DAL support for SQL CASE, example: db().select(...query.case('true','false))
  • DAL(...,do_connect=False) allows faking connections
  • DAL(...,auto_import=True) now retieves some fiel attributes
  • mail can specify a sender: mail.send(...,sender='Mr X ')
  • renamed gluon/contrib/comet_messaging.py -> gluon/contrib/websocket_messaging.py

New in web2py 1.99.4 (Dec 19, 2011)

  • Improved mobile admin, thanks Angelo Improved examples page, thanks Anthony fixed a SQLCustomField bug

New in web2py 1.99.3 (Dec 10, 2011)

  • moved to GitHub and abandoned Lanchpad
  • new web site layout, thanks Anthony
  • new welcome app using skeleton, thanks Anthony
  • jQuery 1.7.1
  • modernizr 2.0.6 (customized)
  • define_table('thing', singluar='thing',plural='things')
  • CAS 1.0 and 2.0 compliant, thanks Olivier
  • fixed validate_and_insert and validate_and_update, thanks Anthony
  • request.user_agent().is_mobile etc., thanks Ross and Angelo
  • better router, thanks Jonathan
  • app on/off buttons
  • support for dropbox_login
  • improved markmin recognizes qr code, supports auto audio/video/embed
  • response.optimize_css = 'concat,minify,inline', thanks Ross
  • response.optimize_js = 'concat,minify,inline' thanks Ross
  • db.define_table(...,common_filter=query), thanks Yair
  • db(...,ignore_common_filter=True)
  • support for stripe payments
  • support for DowCommerce payments, thanks Dave
  • experimental PyPy support
  • experimental mongodb support, thanks Mark
  • tickets in db now accessible from admin, thanks Niphlod
  • many grid improvements and bug fixes

New in web2py 1.99.1 (Sep 22, 2011)

  • experimental gluon/scheduler.py
  • scripts/make_min_web2py.py
  • crud.search has more options, thanks Denes
  • gluon/contrib/simplejsonrpc.py
  • gluon/contrib/redis_cache.py
  • cleanup of code
  • support for A(name,callback=url,target='id',delete='tr')
  • support for A(name,component=url,target='id',delete='tr')
  • isapiwsgihandler.py
  • dal expression.coalesce(*options)
  • new pip installer, thanks Chris Steel
  • gluon/contrib/simplejsonrpc.py, thanks Mariano
  • expire_sessions.py respects expiration time, thanks iceberg
  • fixed problem with max text length
  • addressed this issue: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/
  • x509 support (needs rocket upgrade, thanks Michele)
  • form.process() and for.validate()
  • rocket upgrade (1.2.4)
  • jQuery upgrade (1.6.3)
  • new syntax rows[i]('tablename.fieldname')
  • new query syntax field.contains(list,all=True or False)
  • new SQLFORM.grid and SQLFORM.smartgrid (should replace crud.search and crud.select)
  • support for natural language queries (english only) in SQLFORM.grid
  • support for computed columns and additional links in SQLFORM.grid
  • new style virtual fields (experimental): db.table.field=Field.Lazy(...)
  • request.utcnow
  • cleaner/simpler welcome/models/db.py and welcome layout.html
  • response.include_meta() and response.include_files(), thanks Denes
  • dal auto-reconnect on time-out connections
  • COL and COLGROUP helpers
  • addresed OWASP #10, thanks Anthony and Eric
  • auth.settings.login_after_registration=True
  • detection of mobile devices and @mobilize helper (view.mobile.html), thanks Angelo
  • many bug fixes (thanks Jonathan, Michele, Fran and others)

New in web2py 1.98.1 (Aug 2, 2011)

  • fixed some problems with LOAD(ajax=False), thanks Anthony
  • jquery 1.6.2
  • gevent.pywsgi adds ssl support, thanks Vasile
  • import/export of blobs are base64 encoded
  • max number of login attemts in admin, thanks Ross
  • fixed joins with alias tables
  • new field.custom_delete attribute
  • removed resctions on large 'text fields, thanks Martin
  • field.represent = lambda value,record: .... (record is optional)
  • FORM.validate() and FORM.process(), thanks Bruno
  • faster visrtualfields, thanks Howsec
  • mail has ssl support separate from tls, thanks Eric
  • TAG objects are now pickable
  • new CAT tag for no tags
  • request.user_agent(), thanks Ross
  • fixed fawps support
  • SQLFORM(...,separator=': ') now customizable
  • many small bug fixes

New in web2py 1.97.1 (Jun 27, 2011)

  • = validate_and_update, thanks Bruno
  • fixed problem with new custom import, thanks Mart
  • fixed pyamf 0.6, thanks Alexei and Nickd
  • fixed "+ =" bug in wizard
  • fixed problem with allowed_patterns
  • fixed problems with LOAD and vars and ajax
  • closed lots of google code tickets
  • checkboxes should now work with list:string
  • web2py works on Android, thanks Corne Dickens
  • new cpdb.py, thanks Mart
  • improved translation (frech in particuler), thanks Pierre
  • improved cas_auth.py, thanks Sergio
  • IS_DATE and IS_DATETIME validators now work with native types
  • better description of --shell, thanks Anthony
  • extra SQLTABLE columns, thanks Martin
  • fixed toolbar conflics, thanks Simon
  • GAE password shows with

New in web2py 1.96.2 (Jun 3, 2011)

  • bug fixes

New in web2py 1.96.1 (Jun 2, 2011)

  • "from gluon import *" imports in every python module a web2py environment (A, DIV,..SQLFORM, DAL, Field,...) including current.request, current.response, current.session, current.T, current.cache, thanks Jonathan.
  • conditional models in models//a.py and models///a.py
  • from mymodule import *, looks for mymodule in applications/thisapp/modules first and then in sys.path. No more need for local_import. Thanks Pierre.
  • usage of generic.* views is - by default - restricted to localhost for security. This can be changed in a granular way with: response.generic_patterns=['*']. This is a slight change of behavior for new app but a major security fix.
  • all applications have cas 2.0 provider at http://.../user/cas/login
  • all applications can delegate to login to external provider Auth(...,cas_provider='http://.../other_app/default/user/cas')
  • A(...,callback=URL(...),larget='id') does Ajax
  • URL(...,user_signature=True), LOAD(...,user_signature=True) can sign urls and @auth.requires_signature() will check the signature for any decorated action.
  • DAL(...,migrate_enabled=False) to disable all migrations
  • DAL(...,fake_migrate_all=True) to rebuild all corrupted metadata
  • new DAL metadata format (databases/*.table)
  • DAL(...,adapter_arg={}) allows support for alternate drivers
  • DAL now allows circular table defintions
  • DAL(..,auto_import=True) automatically imports tables from metadata without need to db.define_table(...)s.
  • new alterante syntax for inner joins: db(...).select(join=...)
  • experimental cubrid database support
  • DAL 'request_tenant' fields are special, the altomatically filer all records based on their default value.
  • db._common_fields.append(Field('owner')) allows to add fields to ALL tables
  • DAL ignores repeated fields with same names
  • web2py_ajax.html is more modular, thanks Anthony
  • request.is_local
  • request.is_http
  • new sessions2trash.py thanks Jim Karsten
  • corrupted cache files are automatically deleted
  • new simpler API gluon.contrib.AuthorizeNet.procss(...)
  • fixed recaptcha (as they released new API)
  • messages in validators have default internationalization
  • No more Auth(globals(),db), just Auth(db). Same for Crud and Service.
  • scripts/access.wsgi allows apache+mod_wsgi to delegate authentication of any URL to any web2py app
  • json now supports T(...)
  • scripts/setup-web2py-nginx-uwsgi-ubuntu.sh
  • web2py HTTP responses now set: "X-Powered-By: web2py", thanks Bruno
  • mostly fixed generic.pdf. You can view any page in PDF if you have pdflatex installed or if your html follows the pyfpdf convention.
  • auth.settings.extra_fields['auth_user'].append(Field('country')) allows to extend auth_* tables without need of definiting a custom auth_* table. Must be placed before auth.define_tables()
  • {{=response.toolbar()}} to help you debug applications
  • web based shell now supports object modifications (but no redefinitions of non-serializable types)
  • jQuery 1.6.1
  • Lots of bug fixes

New in web2py 1.95.1 (Apr 26, 2011)

  • Google MySQL support (experimental)
  • pip support
  • better setup_exe.py
  • importved pyfpdf
  • domain check in email_auth.py
  • added change_password_onvalidation and change_password_onaccept
  • DAL(...,migrate_enabled=True)
  • login_methods/loginza.py
  • bpython shell support
  • request.uuid and response.uuid (for a future toolbar)
  • db._timings contains database query timing info
  • efficient db(...).isempty()
  • setup-web2py-nginx-uwsgi-ubuntu.sh
  • Many bug fixes

New in web2py 1.94.4 (Mar 21, 2011)

  • Removed debug print statement that caused problems on GAE and mod_wsgi

New in web2py 1.94.3 (Mar 21, 2011)

  • Fixed major bug in auth redirection

New in web2py 1.94.2 (Mar 21, 2011)

  • reverted wrong behavior of auth.requires(condition) in 1.94.1

New in web2py 1.94.1 (Mar 21, 2011)

  • moderniz 1.17
  • web2py no longer saves session if no change, this makes it up up to 10x faster for simple actions
  • experimental REST API
  • better support for MSSQL NOT NULL
  • small bug fixes

New in web2py 1.93.1-2 (Mar 21, 2011)

  • support for multiple interfaces, thanks Jonathan
  • jquery 1.5.1
  • simplejson 2.1.3
  • customizable simplejson
  • leaner app.yaml
  • css3 buttons in welcome
  • android support (experimental)
  • Field(':hidden'), Field('.readonly'), Field('name=value')
  • combined expressions print db.data.body.len().sum()
  • wizard can download plugins
  • better json serilization (object.custom_json)
  • better xml serialization (object.custom_xml)
  • better formstyle support
  • better comet_messaging.py (needs more testing)
  • many bug fixes

New in web2py 1.92.1 (Feb 16, 2011)

  • much improved routing (thanks Jonathan)
  • Expression.__mod__ (thanks Denes)
  • admin has MULTI_USER_MODE (admin/models/0.py)
  • support for count(distinct=...)
  • has_permissions(...,group_id)
  • IS_MATCH(...,strict=True)
  • URL(...,scheme=,host=,port=), thanks Jonathan
  • admin in Afrikaans, thanks Caleb
  • auth.signature (experimental)
  • many other bug fixes

New in web2py 1.91.6 (Jan 4, 2011)

  • web2py comet via gluon/contrib/comet_messaging.py (html5 websockets) experimental
  • fixed problem with services (broken in 1.91.5), thanks Vollrath
  • customizable uploadwidget, thanks Fran
  • fixed problem with mail unicode support, thanks Richard
  • fixed problem with linkto=None and references fields in SQLTABLE, thanks villas
  • no more upgrade button on windows since does not work
  • better remember-me login, thanks Martin Weissenboeck
  • support for recatcha options
  • support for GAE namespaces via DAL('gae://namespace')
  • new rocket (1.2.2), thanks Tim
  • many other bug fixes and improvements (thanks Jonathan)

New in web2py 1.91.1 (Dec 22, 2010)

  • LICENSE CHANGE FROM GPLv2 to LGPLv3
  • URL(...,hash_vars=...) allows to specify which vars need to be signed
  • fixed bug with aliasing in new DAL

New in web2py 1.89.1 (Nov 15, 2010)

  • new admin layout
  • new admin search
  • new admin language selector
  • new Welcome app
  • beter wizard
  • admin support for DEMO_MODE=True
  • admin exposes GAE deployment button (always)
  • MENU support None links
  • web2py.py -J for running cron
  • fixed ~db.table.id on GAE
  • service.jsonrpc supports service.JsonRpcException

New in web2py 1.87.3 (Oct 24, 2010)

  • fixed a major bug introduced in 1.87.1 that prevents appadmin from working for new apps created with 1.87.1-2.
  • upgraded to clockpick 1.28

New in web2py 1.86.3 (Oct 11, 2010)

  • fixed some bugs
  • Storage getfirst, getlast, getall by Kevin and Nathan db(db.table), db(db.table.id) both suported and equivalent to db(db.table.id>0) postresql ssl support less un-necessary logging and warnings on GAE IS_DECIMAL_IN_RANGE and IS_FLOAT_IN_RANGE support dot="," (dot="." is default) on_failed_authorization can be a function, thanks Niphold gluon/contrib/login_methods/cas_auth.py for integration between CAS and Auth.

New in web2py 1.82.1 (Aug 8, 2010)

  • request.ajax to detect if action is called via ajax, tahnks Jonathan and David Mako
  • more captcha options, thanks Vidul
  • openid and oauth2 thanks Michele and Keith
  • better PluginManager and load components
  • new template system, thanks Thadeus
  • new db.table(id,[field=value]) and db.table(query) syntax
  • URL('index') (no more r=request), thanks Thadeus
  • mail.send(message='...', ....)
  • DAL([....]) for load balancing
  • @service.soap(...) with mysimplesoap, thanks Mariano
  • hideerror

New in web2py 1.81.4 (Jul 19, 2010)

  • Fixed gluon.tools to work work with load and base.css to nowrap labels

New in web2py 1.78.3 (Jun 1, 2010)

  • x509 emails, thanks Gyuris
  • attachment and html in Mail on GAE, thanks PanosJee
  • fixed docstring in SQLTABLE, thanks aabelyakov
  • TAG(html) parese html into helpers (experimental, still some problems with unicode, , thanks RobertVa for unicode help)
  • DIV.elements(find=re.compile(....))
  • DIV.flatten()
  • DIV.elements('....') supports jQuery syntax in '....'
  • better it-it.py and it.py, thanks Marcello Della Longa
  • Many Bug fixes:
  • improved support for DAL and joins in postgresql/oracle, thanks Nico de Groot
  • bux fixex in html.py, thanks Ian
  • fixed an issue with registration_key==None, thanks Jay Kelkar
  • fixed bug in gql.py, thanks NoNoNo
  • fixed problem with multiple and checkboxes, thanks MIchael Howden
  • fixed bug in gae, thanks NoNoNo
  • restored 2.4 compatibility, thanks Paolo Gasparello
  • auth.update() when pictures in profile

New in web2py 1.76.5 (Apr 15, 2010)

  • Fixed a typo in auth that created some registration problems

New in web2py 1.75.1 (Feb 24, 2010)

  • better cron
  • better fetch
  • logging of email failures
  • new web2py.fedora.sh
  • new setup-web2py-ubuntu.sh
  • experimental autocomplete
  • menus work on IE6

New in web2py 1.71.0 (Nov 2, 2009)

  • Complete rewrite of Rows
  • Renamed DALStorage->Rows, DALRef->Reference
  • Experimental serializarion of Row and Rows (get serialized to dict and list of dict)

New in web2py 1.68.2 (Oct 22, 2009)

  • Fixing bug with rewrite.load on GAE (thanks Willian Wang)
  • Fixing bug with admin and missing crontab

New in web2py 1.33 (May 15, 2008)

  • There was a critical bug in version 1.32. You need to upgrade to version 1.33.

New in web2py 1.32 (May 14, 2008)

  • Since version 1.30 web2py apps runs on Google App Engine (beta).