web2py 2.0.2 is out

4,670 views
Skip to first unread message

Massimo Di Pierro

unread,
Aug 29, 2012, 11:41:34 PM8/29/12
to web...@googlegroups.com
After 5 months. It is done. This is the most waited and the most feature-packed release.

I am sure we'll find some corners that need to be ironed but it is considerably better than 1.99.7. It adds lot of new features and improves many existing ones:

- 57,000 new lines of code and closed 279 issues since 1.99.7.
- Retrieving data from DB should be faster, in particular select(cacheable=True)
- Has a new scheduler, a built-in wiki, new language and pluralization system, better markmin with oembed support and better scaffolding app, increased security.
- Lots of experimental features including GIS support, mongodb support, built-in auth.wiki(), and more.

Should be 100% backward compatible. If you run into any issue let us know ASAP.

I personally want to thank the major contributors to this release (in alphabetic order)
Alan, Andrew, Anthony, Bruno, Christian, Dave, Dominic, Iceberg, Jonathan, Marc, Mariano, Marin, Martin, Mark, Michael, Michele, Niphlod, Patrick, Vladyslav, 
They spend many nights testing, coding, debugging at a very fast pace.

Many many people have contributed.

If your contribution has not been properly acknowledged please let us know ASAP. It is probably an oversight.


Massimo


Detailed changelog
===============

## 2.00.2

### DAL Improvements

- Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan
- db(...).select(cacheable=True) make select 30% faster
- db(...).select(cache=(cache.ram,3600)) now caches parsed data 100x faster
- db(...).count(cache=(cache.ram,3600)) now supported
- MongoDB support in DAL (experimental), thanks Mark Breedveld
- geodal and spatialite, thanks Denes and Fran (experimental)
- db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks)
- db(...).update_naive(...) same as update but ignores table._before_update and table._after_update
- DAL BIGINT support and DAL(...,bigint_id=True)
- IS_IN_DB(..., distinct=True)
- new syntax: db.mytable.insert(myuploadfield=open(....)), thank you Iceberg
- db(...).select(db.mytable.myfield.count(distinct=True))
- db(db.a)._update(name=db(db.b.a==db.a.id).nested_select(db.b.id))
- db.mytable.myfield.filter_in, filter_out
- db.mytable._enable_record_versioning(db) adds versioning to this table
- teradata adapter, thanks Andrew Willimott
- experimental Sybase Adapter
- added db.table.field.avg()
- Support for Google App Engine projections, thanks Christian
- 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
- executesql(...,fields=,columns=) allows parsing of results in Rows, thanks Anthony

### Auth improvements

- auth.enable_record_versioning(db)  adds full versioning to all tables
- @auth.requires_login(otherwise=URL(...))
- auth supports salt and compatible with third party data, thanks Dave Stoll
- CRYPT now defaults to pbkdf2(1000,20,sha1)
- Built-in wiki with menu, tags, search, media, permissions. def index: return auth.wiki()
- auth.settings.everybody_group_id
- allow storage of uploads on any PyFileSystem (including amazon)

### Form improvements

- FORM.confirm('Are you sure?',{'Back':URL(...)})
- SQLFORM.smartdictform(dict)
- form.add_button(value,link)
- SQLFORM.grid(groupby='...')
- fixed security issue with SQLFORM.grid and SQLFORM.smartgrid
- more export options in SQLFORM.grid and SQLFORM.smartgrid (html, xml, csv, ...)

### Admin improvements

- new admin pages: manage_students, bulk_regsiter, and progress reports
- increased security in admin against CSRF
- experimental Git integration
- experimental OpenShift deployment
- multi-language pluralization engine 
- ace text web editor in admin
- Ukrainian translations, thanks Vladyslav Kozlovskyy
- Romanian translation for welcome, thanks ionel
- support for mercurial 2.6, thanks Vlad

### Scheduler Improvements (thanks to niphlod, ykessler, dhx, toomim)

- web2py.py -K myapp -X starts the myapp scheduler alongside the webserver
- tasks are marked EXPIRED (if stop_time passed)
- functions with no result don't end up in scheduler_run
- more options: web2py.py -E -b -L
- scheduler can now handle 10k tasks with 20 concurrent workers and with no issues
- new params:
    tasks can be found in the environment (no need to define the tasks parameter)
    max_empty_runs kills the workers automatically if no new tasks are found in queue (nice for "spikes" of processing power)
    discard_results to completely discard the results (if you don't need the output of the task)
    utc_time enables datetime calculations with UTC time
- scheduler_task changes:
    task_name is no longer required (filled automatically with function_name if found empty)
    uuid makes easy to coordinate scheduler_task maintenance (filled automatically if not provided)
    stop_time has no default (previously was today+1)
    retry_failed to requeue automatically failed tasks
    sync_output refreshes automatically the output (nice to report percentages)
- workers can be:
    DISABLED (put to sleep and do nothing if not sending the heartbeat every 30 seconds)
    TERMINATE (complete the current task and then die)
    KILL (kill ASAP)

### Other Improvements 

- gluon/contrib/webclient.py makes it easy to create functional tests for app
- DIV(..).elements(...replace=...), thanks Anthony
- new layout based on Twitter Bootstrap
- New generic views: generic.ics (Mac Mail Calendar) and generic.map (Google Maps)
- request.args(0,default=0, cast=int, otherwise=URL(...)), thanks Anthony
- redirect(...,type='auto') will be handled properly in ajax responses
- routes in can redirect outside with routes_in=[('/path','303->http://..')]
- better memcache support
- improved spreadsheet, thanks Alan
- new internationalization engine, thanks Vladyslav
- pluralization engine, thanks Vladyslav
- new markmin with support for nested lists, <i>, <em>, autolinks, thanks Vladyslav
- new syntax: {{=BR()*5}}
- gluon.cache.lazy_cache decorator allows caching functions in modules
- .coffee and .less support in response.files, thanks Sam Sheftel
- ldap certificate support
- pg8000 postgresql driver support (experimental)
- @cache('%(name)s%(args)s%(vars)s',5) and cache.autokey
- added tox.ini, thanks Marc
- web2py.py --run_system_tests, thanks Marc Abramowitz
- html.py (and web2py helpers) can be used without web2py dependencies
- new fpdf, thanks Mariano

Kevin Miller

unread,
Aug 30, 2012, 12:15:52 AM8/30/12
to web...@googlegroups.com
Massimo and the team and all those who have contributed, a HUGE THANK YOU.



--
 
 
 


Tim Richardson

unread,
Aug 30, 2012, 12:24:12 AM8/30/12
to web...@googlegroups.com
Thanks to Massimo et al for web2py. I don't know what part of web2py I like most: how productive it is, or how much fun it is to use.

Alfonso de la Guarda

unread,
Aug 30, 2012, 12:30:28 AM8/30/12
to web...@googlegroups.com
Good Job! Thanks...

I will help in the next releases soon...



Saludos,

--------------------------------
Alfonso de la Guarda
Twitter: @alfonsodg
Redes sociales: alfonsodg
Telef. 991935157
1024D/B23B24A4
5469 ED92 75A3 BBDB FD6B 58A5 54A1 851D B23B 24A4


On Wed, Aug 29, 2012 at 10:41 PM, Massimo Di Pierro
<massimo....@gmail.com> wrote:
> --
>
>
>

ochi...@gmail.com

unread,
Aug 30, 2012, 12:55:16 AM8/30/12
to web...@googlegroups.com
Wow! Great release !!
Sent from my Verizon Wireless BlackBerry
--



Anthony

unread,
Aug 30, 2012, 12:57:17 AM8/30/12
to web...@googlegroups.com
Congratulations to all! And special thanks to Massimo for all his hard work, diligence, and patience.

Anthony

Michael Toomim

unread,
Aug 30, 2012, 1:17:48 AM8/30/12
to web...@googlegroups.com
Wow, this is cool!

But I'm hitting a bug in rewrite_on_error: http://code.google.com/p/web2py/issues/detail?id=964

Michael Toomim

unread,
Aug 30, 2012, 1:23:28 AM8/30/12
to web...@googlegroups.com
I'm really excited about the new scheduler -X option.

What do -E -b -L do? I don't see them in --help or in the widget.py code.

Michael Toomim

unread,
Aug 30, 2012, 1:46:12 AM8/30/12
to web...@googlegroups.com
Oh, I see, these are scheduler.py options!
  -b: sets the heartbeat time
  -L: sets the logging level
  -E: sets the max empty runs

Rahul

unread,
Aug 30, 2012, 1:54:15 AM8/30/12
to web...@googlegroups.com
I just can't think of a better web framework for Python than WEB2PY .. which just got better [best, I mean] :)  .. Great job done by entire web2py team.. Thanks all and Massimo for this wonderful framework. ..

Cheers, Rahul D.

Michael Toomim

unread,
Aug 30, 2012, 2:25:34 AM8/30/12
to web...@googlegroups.com
I just discovered this sweet hidden improvement:

>> db(db.mytable.id>1).select()
<Rows (648)>

The Rows object now prints out the number of rows in the repr() function! That's so useful!

Thanks everyone!

David Marko

unread,
Aug 30, 2012, 2:30:28 AM8/30/12
to web...@googlegroups.com
Really amazing !!! Thanks to all contributors, testers !!!

Dne čtvrtek, 30. srpna 2012 5:41:34 UTC+2 Massimo Di Pierro napsal(a):

Annet

unread,
Aug 30, 2012, 3:02:42 AM8/30/12
to web...@googlegroups.com
Congratulations to all!


Should be 100% backward compatible. If you run into any issue let us know ASAP.

It's not a backward compatibility issue but after updating from 2.0.1 to 2.0.2 the admin's flash messages no longer show up.

Kind regards,

Annet

Johann Spies

unread,
Aug 30, 2012, 3:34:26 AM8/30/12
to web...@googlegroups.com
Thank you again to all the developers for your hard work enabling us to work with a product that is a pleasure to work with.
Regards
Johann
--
Because experiencing your loyal love is better than life itself,
my lips will praise you.  (Psalm 63:3)

Alec Taylor

unread,
Aug 30, 2012, 3:44:33 AM8/30/12
to web...@googlegroups.com
Thank you kindly!

--
 
 
 

Liam

unread,
Aug 30, 2012, 4:30:00 AM8/30/12
to web...@googlegroups.com
Thanks

Marek Mollin

unread,
Aug 30, 2012, 6:02:35 AM8/30/12
to web...@googlegroups.com
Hmmm...
nohup should do similar thing...
nohup python web2py.py -K appname

will make it a background task on linux

Marek Mollin

unread,
Aug 30, 2012, 6:04:40 AM8/30/12
to web...@googlegroups.com
Big work.
We are all really thankful.

Especially lazy_tables and triggers + audit !

Martín Mulone

unread,
Aug 30, 2012, 6:17:48 AM8/30/12
to web...@googlegroups.com
+1

2012/8/30 Anthony <abas...@gmail.com>
--
 
 
 



--

Don_X

unread,
Aug 30, 2012, 7:01:03 AM8/30/12
to web...@googlegroups.com
Let it be said & Let it be heard :
Web2py is not only awesome .. It is simply the best python framework out there ! ...
at least for me, and many others !

Congratulations to the web2py developer team

Move over ! make way !  PHP & Python Frameworks .. here we come !

Ovidio Marinho

unread,
Aug 30, 2012, 7:29:37 AM8/30/12
to web...@googlegroups.com
I´m test now.
      


       Ovidio Marinho Falcao Neto
                Web Developer
             ovid...@gmail.com 
          ovidio...@itjp.net.br
                 ITJP - itjp.net.br
               83   8826 9088 - Oi
               83   9334 0266 - Claro
                        Brasil
              



2012/8/30 Don_X <don.cl...@gmail.com>

--
 
 
 

chinakr

unread,
Aug 30, 2012, 7:42:48 AM8/30/12
to web...@googlegroups.com
Thanks a lot, Massimo!

在 2012年8月30日星期四UTC+8上午11时41分34秒,Massimo Di Pierro写道:

Tyrone

unread,
Aug 30, 2012, 8:12:23 AM8/30/12
to web...@googlegroups.com

I'm having a problem with the scheduler when I upgraded my application. It appears that if I attempt to run the line:
Scheduler(db, dict(demo=demo))

I'm getting the error:

<class 'sqlite3.OperationalError'> Cannot add a UNIQUE column


Regards

Tyrone

unread,
Aug 30, 2012, 8:23:18 AM8/30/12
to web...@googlegroups.com
It appears that it's an incompatibility with the original tables, when I delete everything the problem goes away. I got around the problem by deleting everything, and then overwriting the new database with the old one, excluding the scheduler tables.

Niphlod

unread,
Aug 30, 2012, 8:48:05 AM8/30/12
to web...@googlegroups.com
yep, a new column was added and it's defined to be unique. When it gets created if you have n rows already in the table the values in the column are not unique, hence the error. If no rows are in the scheduler_task table, no error should show up.

Emanuel Woiski

unread,
Aug 30, 2012, 8:55:16 AM8/30/12
to web...@googlegroups.com
Thank you to Maximo and all the developers for making the best web framework even better:)
regards
woiski

2012/8/30 Massimo Di Pierro <massimo....@gmail.com>

Massimo Di Pierro

unread,
Aug 30, 2012, 9:32:44 AM8/30/12
to web...@googlegroups.com
Please can you post a concrete example?

Mike Girard

unread,
Aug 30, 2012, 9:36:45 AM8/30/12
to web...@googlegroups.com
Great news. Can't wait to try it out. Thanks, everyone!


On Wednesday, August 29, 2012 11:41:34 PM UTC-4, Massimo Di Pierro wrote:
After 5 months. It is done. This is the most waited and the most feature-packed release.

I am sure we'll find some corners that need to be ironed but it is considerably better than 1.99.7. It adds lot of new features and improves many existing ones:

- 57,000 new lines of code and closed 279 issues since 1.99.7.
- Retrieving data from DB should be faster, in particular select(cacheable=True)
- Has a new scheduler, a built-in wiki, new language and pluralization system, better markmin with oembed support and better scaffolding app, increased security.
- Lots of experimental features including GIS support, mongodb support, built-in auth.wiki(), and more.

Should be 100% backward compatible. If you run into any issue let us know ASAP.

I personally want to thank the major contributors to this release (in alphabetic order)
Alan, Andrew, Anthony, Bruno, Christian, Dave, Dominic, Iceberg, Jonathan, Marc, Mariano, Marin, Martin, Mark, Michael, Michele, Niphlod, Patrick, Vladyslav, 
They spend many nights testing, coding, debugging at a very fast pace.

Many many people have contributed.

If your contribution has not been properly acknowledged please let us know ASAP. It is probably an oversight.


Massimo


Yarin

unread,
Aug 30, 2012, 10:09:24 AM8/30/12
to web...@googlegroups.com
Congratulations and many thanks to Massimo and all contributors - the best framework keeps getting better

Richard Vézina

unread,
Aug 30, 2012, 10:12:20 AM8/30/12
to web...@googlegroups.com
Only one word : Thanks

Richard

On Thu, Aug 30, 2012 at 10:09 AM, Yarin <ykes...@gmail.com> wrote:
Congratulations and many thanks to Massimo and all contributors - the best framework keeps getting better

--
 
 
 

Adi

unread,
Aug 30, 2012, 10:32:55 AM8/30/12
to web...@googlegroups.com
Thank you Massimo and ALL contributors!!!

Starting migration tests now...

Annet

unread,
Aug 30, 2012, 12:03:36 PM8/30/12
to web...@googlegroups.com

Please can you post a concrete example?

In:

Editing file "init/models/db.py"

... when I click the save button, normally a flash showed up in the top-right corner:

<div class="flash" style="display: none;">file saved on Thu Aug 30 17:55:13 2012</div>


In 2.0.2 the <div> is empty after clicking the save button:

<div class="flash" style="display: none;"></div>


I also noticed that when I inspect the footer element there's a <div> with the following contents:

<div id="footer" class="fixed">
<div style="height: auto; width: auto; top: -40000px; left: -40000px; visibility: hidden; position: absolute; overflow: visible; white-space: nowrap; font-family: 'Monaco','Menlo','Ubuntu Mono','Droid Sans Mono','Consolas',monospace; font-size: 12px; font-weight: 400; font-style: normal; line-height: 16.25px;">XyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyX....</div>


Kind regards,

Annet

apps in tables

unread,
Aug 30, 2012, 1:47:33 PM8/30/12
to web...@googlegroups.com
Hi massimo,

I would like to thank your family and the families of the contributors, for their great support.

Their support made it come true.

Regards,

Ashraf

jotbe

unread,
Aug 30, 2012, 2:37:29 PM8/30/12
to
Congratulations to Massimo and all contributors! Great job! :)

Jan

Massimo Di Pierro

unread,
Aug 30, 2012, 4:49:21 PM8/30/12
to web...@googlegroups.com
All bugs reported today have been fixed in 2.0.3 out now (except a minor issue with markmin that we are investigating).

If you find other issues, please continue report them. We'd rather fix them sooner rather than later.

Thanks for all your help and testing.

Massimo



On Wednesday, 29 August 2012 22:41:34 UTC-5, Massimo Di Pierro wrote:
After 5 months. It is done. This is the most waited and the most feature-packed release.

Cliff Kachinske

unread,
Aug 30, 2012, 4:50:05 PM8/30/12
to web...@googlegroups.com
This is the best Christmas ever.  So many shiny new toys.  

Thanks to Massimo and all who contributed.

Cliff Kachinske

Massimo Di Pierro

unread,
Aug 30, 2012, 5:04:00 PM8/30/12
to web...@googlegroups.com
I made a mistake in the announcement. We do not have "GIS support". What I meant is "Spatialite and PostGIS support" for Slite and postgresql geographical functionalities.

massimo

Mike Girard

unread,
Aug 30, 2012, 6:43:16 PM8/30/12
to web...@googlegroups.com
This seems like a good place to say that leaving php/Drupal for Python/web2py has been like getting out of jail. This is great software with a supernaturally patient and helpful community. 

Massimo Di Pierro

unread,
Aug 30, 2012, 9:26:21 PM8/30/12
to web...@googlegroups.com
:-)

Andrew

unread,
Aug 30, 2012, 10:09:29 PM8/30/12
to web...@googlegroups.com
The Issue is still there in 2.0.3

On Thursday, August 30, 2012 11:40:07 PM UTC+12, Sridhar wrote:
Hi Team, 

Thanks a ton for the new features and improvements!

I'm just getting started and was trying to run web2py.exe on Windows 7 after downloading it from http://www.web2py.com/examples/static/web2py_win.zip (2.0.2 stable).

However, ran into this error:

****************************** 
D:\web2py>web2py -S welcome
Traceback (most recent call last):
  File "web2py.py", line 16, in <module>
  File "gluon/__init__.py", line 15, in <module>
  File "gluon/globals.py", line 24, in <module>
  File "gluon/serializers.py", line 11, in <module>
  File "gluon/languages.py", line 264, in <module>
  File "gluon/languages.py", line 250, in read_possible_plurals
WindowsError: [Error 3] The system cannot find the path specified: 'D:\\web2py\\gluon\\contrib\\rules/*.*'
******************************

Then, realized there was no folder called "gluon" in the extracted folder. I downloaded the source from http://www.web2py.com/examples/static/web2py_src.zip and copied the "gluon" folder from this source code to the previous web2py folder.

This solved the error and was able to web2py GUI. Hope this helps.

Regards,
Sridhar

Andrew

unread,
Aug 30, 2012, 10:13:18 PM8/30/12
to web...@googlegroups.com
Well, perhaps not.
The Download page says 2.0.3, but when I start it says 2.0.2. in the app ?  Perhaps the windoes exe has not been updated.  

Massimo Di Pierro

unread,
Aug 30, 2012, 11:31:20 PM8/30/12
to web...@googlegroups.com
Can you please try again the windows binary and let me know if the problem persists.

Ramkrishan Bhatt

unread,
Aug 31, 2012, 12:50:26 AM8/31/12
to web...@googlegroups.com
Congtras all of you . Is CMS is also completed?

Andrew

unread,
Aug 31, 2012, 1:00:32 AM8/31/12
to web...@googlegroups.com
Still 2.0.2.

Massimo Di Pierro

unread,
Aug 31, 2012, 1:36:42 AM8/31/12
to web...@googlegroups.com
I just downloaded it myself, unziped and VERSION says 2.0.3. 

I am not sure what is wrong. try another clean download in its own folder. many sure you only have one web2py running.

Annet

unread,
Aug 31, 2012, 1:42:14 AM8/31/12
to web...@googlegroups.com
I am still having this issue:

Massimo Di Pierro

unread,
Aug 31, 2012, 1:55:46 AM8/31/12
to web...@googlegroups.com
ace.js does that. Yes it is odd. I am not sure why. Also there is no flash because of the box that now flashes green. We may move from ace to codemirror.

lyn2py

unread,
Aug 31, 2012, 4:17:17 AM8/31/12
to web...@googlegroups.com
HUGE Thanks to Massimo and all who have contributed to this release!
Long awaited and anticipated!

web2py is my favorite framework because of all you wonderful people!

Alec Taylor

unread,
Aug 31, 2012, 6:34:43 AM8/31/12
to web...@googlegroups.com
I've got a better flash code using bootstrap components.

It works quite nicely, giving different colours based on severity of message. [alert-error, alert-success &etc]

Was planning on waiting until the new bootstrap was integrated before throwing a pull-request, or did you want a pull request now?

--
 
 
 

vinic...@gmail.com

unread,
Aug 31, 2012, 7:44:59 AM8/31/12
to web...@googlegroups.com
First of all, I'd like to thank you all. You're making a great job, guys.
I see web2py becoming more reliable to bigger projects and I'm very
pleased with it.
You all rock! :-)

In spite of this huge effort, isn't it premature to call 2.0.2 or even
2.0.3 stable? I know there were several months of hard work, but if we
have bugs detected so fast, we cannot call it stable yet, right?

Maybe some release candidate call or a pre-release period for tests,
before spreading it as stable would help us.

--
Vinicius Assef
> <http://db.a.id>).nested_select(db.b.id <http://db.b.id>))
> --
>
>
>

Anthony

unread,
Aug 31, 2012, 8:00:44 AM8/31/12
to web...@googlegroups.com
On Friday, August 31, 2012 7:44:31 AM UTC-4, viniciusban wrote:
First of all, I'd like to thank you all. You're making a great job, guys.
I see web2py becoming more reliable to bigger projects and I'm very
pleased with it.
You all rock! :-)

In spite of this huge effort, isn't it premature to call 2.0.2 or even
2.0.3 stable? I know there were several months of hard work, but if we
have bugs detected so fast, we cannot call it stable yet, right?

Maybe some release candidate call or a pre-release period for tests,
before spreading it as stable would help us.

Nightly builds have been available throughout development, and there have been numerous requests for testers. The fact is, people don't really test it and try it out with their existing apps until a full release. In practice, the .1 version of any new release is effectively a release candidate. Usually bugs are found and fixed quickly, and .2, .3, .4, etc. come within a few days, stabilizing fairly quickly.

Anthony 

Marin Pranjić

unread,
Aug 31, 2012, 8:01:08 AM8/31/12
to web...@googlegroups.com
It is called stable since no one using trunk/nightly build detected those errors.

I agree with you, but you cannot blame anyone.
Web2py has so much features and it is impossible to test everything.



--




vinic...@gmail.com

unread,
Aug 31, 2012, 8:28:46 AM8/31/12
to web...@googlegroups.com
See, guys, I'm not blaming anyone and I'm not saying Web2py is not good,
or your work failed.

I pay my bills working with web2py for the last year. I use it for 3
years, now. I really like that and help spread the word.


> Web2py has so much features and it is impossible to test everything.

Sorry, but I cannot agree with this statement. Is it the official position?

Remember, one of the strengths is our backward compatibility. It can be
achieved with detailed tests **before** anouncing a new stable release.

"Stable" means: "you can download and just use it". Anything different
is "almost stable" or "buggy yet" or, using beautiful words, "release
candidate" or "pre-release version".

I'd like to hear your oppinions.

--
Vinicius Assef



On 08/31/2012 09:01 AM, Marin Pranjić wrote:
> It is called stable since no one using trunk/nightly build detected
> those errors.
>
> I agree with you, but you cannot blame anyone.
>
>
> On Fri, Aug 31, 2012 at 1:44 PM, vinic...@gmail.com
> <mailto:vinic...@gmail.com> <vinic...@gmail.com
> db.define_table(on_define=__lambda table:), thanks Jonathan
> - db(...).select(cacheable=True) make select 30% faster
> - db(...).select(cache=(cache.__ram,3600)) now caches
> parsed data 100x
> faster
> - db(...).count(cache=(cache.__ram,3600)) now supported
> - MongoDB support in DAL (experimental), thanks Mark Breedveld
> - geodal and spatialite, thanks Denes and Fran (experimental)
> - db.mytable._before_insert, _after_insert, _before_update,
> _after_update, _before_delete. _after_delete (list of
> callbacks)
> - db(...).update_naive(...) same as update but ignores
> table._before_update and table._after_update
> - DAL BIGINT support and DAL(...,bigint_id=True)
> - IS_IN_DB(..., distinct=True)
> - new syntax:
> db.mytable.insert(__myuploadfield=open(....)), thank you
> Iceberg
> - db(...).select(db.mytable.__myfield.count(distinct=True))
> - db(db.a)._update(name=db(db.b.__a==db.a.id <http://db.a.id>
> <http://db.a.id>).nested___select(db.b.id <http://db.b.id>
> <http://db.b.id>))
> - db.mytable.myfield.filter_in, filter_out
> - db.mytable._enable_record___versioning(db) adds
> versioning to this table
> - teradata adapter, thanks Andrew Willimott
> - experimental Sybase Adapter
> - added db.table.field.avg()
> - Support for Google App Engine projections, thanks Christian
> - 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
> - executesql(...,fields=,__columns=) allows parsing of
> results in
> Rows, thanks Anthony
>
> ### Auth improvements
>
> - auth.enable_record_versioning(__db) adds full versioning
> to all tables
> - @auth.requires_login(__otherwise=URL(...))
> - auth supports salt and compatible with third party data,
> thanks
> Dave Stoll
> - CRYPT now defaults to pbkdf2(1000,20,sha1)
> - Built-in wiki with menu, tags, search, media,
> permissions. def
> index: return auth.wiki()
> - auth.settings.everybody_group___id
> - DIV(..).elements(...replace=..__.), thanks Anthony
> - new layout based on Twitter Bootstrap
> - New generic views: generic.ics (Mac Mail Calendar) and
> generic.map
> (Google Maps)
> - request.args(0,default=0, cast=int, otherwise=URL(...)),
> thanks
> Anthony
> - redirect(...,type='auto') will be handled properly in
> ajax responses
> - routes in can redirect outside with
> routes_in=[('/path','303->__http://..')]
> - better memcache support
> - improved spreadsheet, thanks Alan
> - new internationalization engine, thanks Vladyslav
> - pluralization engine, thanks Vladyslav
> - new markmin with support for nested lists, <i>, <em>,
> autolinks,
> thanks Vladyslav
> - new syntax: {{=BR()*5}}
> - gluon.cache.lazy_cache decorator allows caching functions
> in modules
> - .coffee and .less support in response.files, thanks Sam
> Sheftel
> - ldap certificate support
> - pg8000 postgresql driver support (experimental)
> - @cache('%(name)s%(args)s%(__vars)s',5) and cache.autokey
> - added tox.ini, thanks Marc
> - web2py.py --run_system_tests, thanks Marc Abramowitz
> - html.py (and web2py helpers) can be used without web2py
> dependencies
> - new fpdf, thanks Mariano
>
> --
>
>
>
>
> --
>
>
>
>
> --
>
>
>

Marin Pranjić

unread,
Aug 31, 2012, 8:34:51 AM8/31/12
to web...@googlegroups.com

Web2py has so much features and it is impossible to test everything.

Sorry, but I cannot agree with this statement. Is it the official position?


Of course not. These are my thoughts only.
It is better when I don't talk much


Marin

Massimo Di Pierro

unread,
Aug 31, 2012, 8:46:29 AM8/31/12
to web...@googlegroups.com
We should have tested the osx and win more. This is my mistake. Other minor issues are physiological.
Anyway, I believe all issues have been taken care within 24hrs.

massimo

Jim S

unread,
Aug 31, 2012, 9:08:41 AM8/31/12
to web...@googlegroups.com
For the problems I'm having, I only have myself to blame.  We were given plenty of time to test our specific implementations but I didn't make the time.  I migrated my 2.0.x yesterday and am having issues but Massimo and the team are on top of it, helping me out when I've done nothing to deserve it.  

To Massimo and the rest of the team, Thank You.

-Jim

Anthony

unread,
Aug 31, 2012, 9:49:17 AM8/31/12
to web...@googlegroups.com
> Web2py has so much features and it is impossible to test everything.

Sorry, but I cannot agree with this statement. Is it the official position?

Well, we can probably improve the unit test coverage. And there's been recent talk of developing a test application to check against for some functional testing. But as with any software (particularly as complex as a web framework), it's not possible to test every conceivable permutation of functionality a user might implement. We have to rely on reports of bugs found in the wild to some extent.

"Stable" means: "you can download and just use it". Anything different
is "almost stable" or "buggy yet" or, using beautiful words, "release
candidate" or "pre-release version".

We had two (officially labeled) release candidates (http://code.google.com/p/web2py/source/detail?r=ed41a29eb7c2e283587c141d0464b6c9be68eb0d). Maybe we should change the "Nightly Build" label on the downloads page to "Release Candidate", and perhaps advertise a bit more. Not sure it will help, though, as there were already many requests for testers. What do you suggest?

Anthony

Richard Vézina

unread,
Aug 31, 2012, 10:07:47 AM8/31/12
to web...@googlegroups.com
Hello,

I love web2py and normally I just wait a bit when there is new version to make sure I don't spend to much time on version issue.

I also test de trunk once in a wild, but I found difficult to proceed that way. 1) I don't have much time, 2) there is often little issue that will be gone in a release that are actually artifact of development I think. I mean, the developer know that there is most probably something wrong with the new code he produce, but just can't test it in all situation.

For sure, tag a beta testing version before releasing could make more work and struggle with version control to make sure patch spread over all branch (trunk, beta), but I think it could be very good to have a beta testing a week before stable.

Anyway, I don't have to much problem with the actual practices, but I think beta test could had avoid 1.99.5 for example, since this version has be the beta test version and 1.99.7 the final.

Richard


Anthony

--
 
 
 

Anthony

unread,
Aug 31, 2012, 10:35:37 AM8/31/12
to web...@googlegroups.com
but I think it could be very good to have a beta testing a week before stable.


All well before the 2.0.2 stable release.

Anthony

Richard Vézina

unread,
Aug 31, 2012, 10:43:22 AM8/31/12
to web...@googlegroups.com
I know, I had test a couple of time...

I have many difficulties to migrate since 1.99.7, before this version I was following web2py cycle with not so much difficulties...

I could just develop a dummy app to test the new features, but it takes time.

If there were testing app, were we could all implement part of new features and that contain old implementation too, maybe it could be easier to test carefully the new version.

Richard


Anthony

--
 
 
 

Anthony

unread,
Aug 31, 2012, 10:54:35 AM8/31/12
to web...@googlegroups.com
It's also worth noting that with this release, 2.0.1 was not released as "stable" but was only ever labeled as a release candidate (rc4 and rc5). The first "stable" release was actually 2.0.2. This is a little different from how it was done in the past (in the past, .1 would have been released as "stable"), yet we see mostly the same behavior (more extensive trial, testing, and bug reporting once the first "stable" release comes out). Perhaps we can improve on this a bit with more explicit advertising about the release candidate.

Anthony

greaneym

unread,
Aug 31, 2012, 11:28:05 AM8/31/12
to web...@googlegroups.com
Web2py and its support community are fantastic. I will try to participate more in testing.

Le Don X

unread,
Aug 31, 2012, 1:02:33 PM8/31/12
to web...@googlegroups.com
Well .. so far .... all the mini apps  I have done on web2py 1.99.7  are working fine with 2.02+ ...  I have not found any issues yet ! ... except for that upgrade button on 1.99.7 that is not working on any platform or browser !! ( well .. maybe with a mac platform ! - I did not test it on a mac ) ... ... so a new install has to be made in parallel for the time being ! ... or another option is to follow the directives on the web2py app dev cookbook  on chapter 11 page 304 !  ( please note that I don't recommend an upgrade ... a new install or parallel install is better and safer ! ) .. it depends also on how far you are in your main app dev !

GOOD JOB WEB2PY DEVELOPERS ... & THANK YOU MASSIMO ... ANTHONY ... BRUNO ... and all the others .. who have always been there, somehow,  for me with my learning curve of  web2py & python ...


vinic...@gmail.com

unread,
Aug 31, 2012, 2:09:05 PM8/31/12
to web...@googlegroups.com
+1

Again, note that I'm not against our team. I'm on it, too.

I'm not criticizing. I'm suggesting quality improvement.

--
Vinicius Assef
> --
>
>
>

Massimo Di Pierro

unread,
Aug 31, 2012, 3:00:13 PM8/31/12
to web...@googlegroups.com
Do no worry nobody is offended. :-)

We can do better and we should make better. Anyway let me summarize the status:

- There was a problem building OSX and Windows binary. This was because of the different folder structure in those distributions. This problem should have been caught long ago. I am surprised we did not. Here we can do better. (*)
- Remember we changed 57000 lines of code. As a result we had a few backward compatibility issues, we test a lot but we cannot test everything (default adapter in firebird, unable to create self references when the id field is renamed, markmin failure on ````` strings). These are minor issues that are expected. Affect a small minority of users. So far we have addresses them all within 24 hrs. 
- We had some false positives. Bug reports that seem bad but have nothing to do with 2.0.x and therefore confused the issue. They are pre-existing conditions or bugs in user code.
- There is also a problem with upgrades. The automatic upgrade from admin does not detect the presence of the new 2.0.x version. You have to upgrade manually. This was a bug in 1.99.7 not in 2.0.x. We are thinking about how to address it but we do not have a solution. We may be able to fix it by calling 2.0.3 as 1.99.8. Yet does not seem like a good idea.

The real issue was (*). Because of that I have rebuilt the windows and mac distributions with slightly different versions than the source distribution using a later web2py version. If the problem is resolved, tomorrow, I will repost 2.0.4 and make sure everything is again in sync.

Massimo

Massimo Di Pierro

unread,
Aug 31, 2012, 5:59:43 PM8/31/12
to web...@googlegroups.com
web2py 2.0.5 is out.
All known backward compatibility issues should be fixed but continue testing... thank you for your patience.

massimo


On Wednesday, 29 August 2012 22:41:34 UTC-5, Massimo Di Pierro wrote:
After 5 months. It is done. This is the most waited and the most feature-packed release.

I am sure we'll find some corners that need to be ironed but it is considerably better than 1.99.7. It adds lot of new features and improves many existing ones:

- 57,000 new lines of code and closed 279 issues since 1.99.7.
- Retrieving data from DB should be faster, in particular select(cacheable=True)
- Has a new scheduler, a built-in wiki, new language and pluralization system, better markmin with oembed support and better scaffolding app, increased security.
- Lots of experimental features including GIS support, mongodb support, built-in auth.wiki(), and more.

Should be 100% backward compatible. If you run into any issue let us know ASAP.

I personally want to thank the major contributors to this release (in alphabetic order)
Alan, Andrew, Anthony, Bruno, Christian, Dave, Dominic, Iceberg, Jonathan, Marc, Mariano, Marin, Martin, Mark, Michael, Michele, Niphlod, Patrick, Vladyslav, 
They spend many nights testing, coding, debugging at a very fast pace.

Many many people have contributed.

If your contribution has not been properly acknowledged please let us know ASAP. It is probably an oversight.


Massimo


Detailed changelog
===============

## 2.00.2

### DAL Improvements

- Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan
- db(...).select(cacheable=True) make select 30% faster
- db(...).select(cache=(cache.ram,3600)) now caches parsed data 100x faster
- db(...).count(cache=(cache.ram,3600)) now supported
- MongoDB support in DAL (experimental), thanks Mark Breedveld
- geodal and spatialite, thanks Denes and Fran (experimental)
- db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks)
- db(...).update_naive(...) same as update but ignores table._before_update and table._after_update
- DAL BIGINT support and DAL(...,bigint_id=True)
- IS_IN_DB(..., distinct=True)
- new syntax: db.mytable.insert(myuploadfield=open(....)), thank you Iceberg
- db(...).select(db.mytable.myfield.count(distinct=True))
- db(db.a)._update(name=db(db.b.a==db.a.id).nested_select(db.b.id))
- db.mytable.myfield.filter_in, filter_out
- db.mytable._enable_record_versioning(db) adds versioning to this table
- teradata adapter, thanks Andrew Willimott
- experimental Sybase Adapter
- added db.table.field.avg()
- Support for Google App Engine projections, thanks Christian
- 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
- executesql(...,fields=,columns=) allows parsing of results in Rows, thanks Anthony

### Auth improvements

- auth.enable_record_versioning(db)  adds full versioning to all tables
- @auth.requires_login(otherwise=URL(...))
- auth supports salt and compatible with third party data, thanks Dave Stoll
- CRYPT now defaults to pbkdf2(1000,20,sha1)
- Built-in wiki with menu, tags, search, media, permissions. def index: return auth.wiki()
- auth.settings.everybody_group_id
- DIV(..).elements(...replace=...), thanks Anthony
- new layout based on Twitter Bootstrap
- New generic views: generic.ics (Mac Mail Calendar) and generic.map (Google Maps)
- request.args(0,default=0, cast=int, otherwise=URL(...)), thanks Anthony
- redirect(...,type='auto') will be handled properly in ajax responses
- routes in can redirect outside with routes_in=[('/path','303->http://..')]
- better memcache support
- improved spreadsheet, thanks Alan
- new internationalization engine, thanks Vladyslav
- pluralization engine, thanks Vladyslav
- new markmin with support for nested lists, <i>, <em>, autolinks, thanks Vladyslav
- new syntax: {{=BR()*5}}
- gluon.cache.lazy_cache decorator allows caching functions in modules
- .coffee and .less support in response.files, thanks Sam Sheftel
- ldap certificate support
- pg8000 postgresql driver support (experimental)
- @cache('%(name)s%(args)s%(vars)s',5) and cache.autokey

wwwgong

unread,
Aug 31, 2012, 10:33:20 PM8/31/12
to web...@googlegroups.com
Congratulations and Many Thanks! 
The new web2py is my best birthday gift. 
Cheers!

apps in tables

unread,
Sep 1, 2012, 1:38:29 AM9/1/12
to web...@googlegroups.com
make a gift to win 10,000 ???

it is in the main page of web2py.com

Massimo Di Pierro

unread,
Sep 1, 2012, 8:30:12 AM9/1/12
to web...@googlegroups.com
No you do not win anything. It means make a gift to web2py. It is the usual donation box.

apps in tables

unread,
Sep 1, 2012, 9:26:56 AM9/1/12
to web...@googlegroups.com
Most of the users will donate, specially the ones who do business with web2py.

apps in tables

unread,
Sep 1, 2012, 9:32:55 AM9/1/12
to web...@googlegroups.com
So, How to do business with web2py?

How to find a customer ( needs web app )?

How to find a technical support ?

I think the business side of web2py needs to be wraped up in a video by massimo...

Massimo Di Pierro

unread,
Sep 1, 2012, 1:11:08 PM9/1/12
to web...@googlegroups.com
I agree. we kind of have a referral program (experts4solutions.com) and I am happy to sell support to businesses. We need to create more structure. There are definitively business opportunities. 

Richard Vézina

unread,
Sep 1, 2012, 4:18:31 PM9/1/12
to web...@googlegroups.com
Confirm backward compatibility.

I just migrate from 1.99.4 to 2.0.5

Notice, that I change :

controllers/appadmin.py 
static/css/*
static/js/*
static/images/*
views/*generic.*
views/web2py_ajax.html

With the files form welcome app, provided within web2py.

Thanks Massimo and all developers for this promising new web2py version!!

Richard

--
 
 
 

vinic...@gmail.com

unread,
Sep 1, 2012, 7:01:07 PM9/1/12
to web...@googlegroups.com
Great! \o/


On 09/01/2012 05:18 PM, Richard Vézina wrote:
> Confirm backward compatibility.
>
> I just migrate from 1.99.4 to 2.0.5
>
> Notice, that I change :
>
> controllers/appadmin.py
> static/css/*
> static/js/*
> static/images/*
> views/*generic.*
> views/web2py_ajax.html
>
> With the files form welcome app, provided within web2py.
>
> Thanks Massimo and all developers for this promising new web2py version!!
>
> Richard
>
> On Sat, Sep 1, 2012 at 1:11 PM, Massimo Di Pierro
> <massimo....@gmail.com <mailto:massimo....@gmail.com>> wrote:
>
> I agree. we kind of have a referral program (experts4solutions.com
> <http://experts4solutions.com>) and I am happy to sell support to
> businesses. We need to create more structure. There are definitively
> business opportunities.
>
>
> On Saturday, 1 September 2012 08:32:55 UTC-5, apps in tables wrote:
>
> So, How to do business with web2py?
>
> How to find a customer ( needs web app )?
>
> How to find a technical support ?
>
> I think the business side of web2py needs to be wraped up in a
> video by massimo...
>
>
> On Saturday, September 1, 2012 4:26:56 PM UTC+3, apps in tables
> wrote:
>
> Most of the users will donate, specially the ones who do
> business with web2py.
>
> On Saturday, September 1, 2012 3:30:12 PM UTC+3, Massimo Di
> Pierro wrote:
>
> No you do not win anything. It means make a gift to
> web2py. It is the usual donation box.
>
> On Saturday, 1 September 2012 00:38:29 UTC-5, apps in
> tables wrote:
>
> make a gift to win 10,000 ???
>
> it is in the main page of web2py.com <http://web2py.com>
>
> --
>
>
>
>
> --
>
>
>

Jaymin Oh

unread,
Sep 1, 2012, 8:57:30 PM9/1/12
to web...@googlegroups.com
Huge thanks for all members in Web2py team.
I'm going to spread out this framework to Korean user and maybe work on Korean version.

Alec Taylor

unread,
Sep 2, 2012, 5:45:27 AM9/2/12
to Annet, web...@googlegroups.com
This is what I have for the moment, but I plan to implement this properly using the variables from gluon.tools; consider this a PoC:
{{if response.flash:}}
<header>
    {{if 'errors' in response.flash:}}
    <div class="alert alert-block alert-error fade in">
        <button type="button" class="close" data-dismiss="alert">
            &times;
        </button>
        <p>
            {{=response.flash}}
        </p>
    </div>
    {{else:}}
    <div class="alert alert-block fade in">
        <button type="button" class="close" data-dismiss="alert">
            &times;
        </button>
        <p>
            {{=response.flash}}
        </p>
    </div>
    {{pass}}
</header>
{{pass}}

Also will need to add in proper success ones as well. I'll get to it within a week then send a pull request.

Until then, enjoy :)

On Sun, Sep 2, 2012 at 4:06 PM, Annet <anne...@googlemail.com> wrote:
> Hi Alec,
>
>
>> I've got a better flash code using bootstrap components.
>>
>> It works quite nicely, giving different colours based on severity of
>> message. [alert-error, alert-success &etc]
>
>
> I am interested in your implementation of the flash and alert, would you be
> willing to share your code with me?
>
> I have been trying to implement it myself, in the function I set
> alert='alert-block' and return it in a dict(alert=alert), in the view I
> have:
>
>  {{if response.flash:}}
>   <div class="alert {{if alert:}}{{=alert}}{{elif
> session.alert:}}{{=session.alert}}{{else:}}{{'alert-info'}}{{pass}}">
>     <a class="close" data-dismiss="alert">x</a>
>     {{=response.flash}}
>   </div> <!-- /alert -->
> {{pass}}
>
> I need session.alert to set alerts cross functions, but I am not very happy
> with this way of setting alert.
>
>
> Kind regards,
>
> Annet

Annet

unread,
Sep 3, 2012, 2:20:43 AM9/3/12
to web...@googlegroups.com, Annet
Hi Alec,

Thanks for providing me with this code.


Also will need to add in proper success ones as well. I'll get to it within a week then send a pull request

I'll look forward to that.


Kind regards,

Annet

curiouslearn

unread,
Sep 4, 2012, 7:07:14 PM9/4/12
to web...@googlegroups.com
Many thanks to Massimo for creating Web2py and to Massimo and other contributors for keeping it going and improving it. I am having fun working with it. 

Equally big thanks to Anthony for answering my questions here. I would most probably have given up on web2py, had Anthony not helped me with my problems.

I have been playing around with Web2py for the last few months and have been able to get things done with it. I have so far not used DAL, but now I will try and get into that.

Thanks again.


Massimo Di Pierro

unread,
Sep 4, 2012, 9:07:29 PM9/4/12
to web...@googlegroups.com
web2py 2.0.7 is not now.

Fixed a number of recent bugs and backward compatibility issues.
It also includes additional speed improvements when compared to 2.0.2.

Massimo

pradeep cs

unread,
Sep 5, 2012, 8:29:50 AM9/5/12
to web...@googlegroups.com
Hi,

Is there any problem with windows binaries for XP, i tried installing the new version 2.0.7 on XP it is not working

C:\web2py1\web2py>web2py.exe
The system cannot execute the specified program.

regards
Pradeep

Massimo Di Pierro

unread,
Sep 5, 2012, 10:09:10 AM9/5/12
to web...@googlegroups.com
Looks like it is a DLL issue. Some DLLs are missing. I will try rebuild it today but I am not sure which one is missing.

Has anybody successfully used the windows version 2.0.x?

Massimo

Massimo Di Pierro

unread,
Sep 6, 2012, 10:19:29 AM9/6/12
to web...@googlegroups.com
If you download and install this:

does it help?


On Wednesday, 5 September 2012 07:29:51 UTC-5, pradeep cs wrote:

pradeep cs

unread,
Sep 9, 2012, 4:59:38 AM9/9/12
to web...@googlegroups.com
Thanks,

After installing this it works. I am having windows XP with service pack 2

Regards
Pradeep

Nate Atkinson

unread,
Oct 2, 2012, 12:04:30 PM10/2/12
to web...@googlegroups.com
I seem to have run into a backwards compatibility issue.

This weekend, I did some system upgrades. I moved my web2py (1.99.7) + MySQL application off a single server running Ubuntu to two VM's running Debian stable (one VM for web2py + apache, one for MySQL). Web2py was deployed using the script in the deployment recipes book section (which downloaded whatever version was current as of Oct 1). MySQL data was moved using mysqldump.

It seems that one-to-many relations are broken in the DAL.

Example code snippets:

From the model:

....
gaia.define_table('routes',
    Field("Name", required=True),
    Field("Active", "boolean", required=True, default=True),
    format='%(Name)s')

gaia.define_table('routedetails',
    Field('route', gaia.routes),
    Field('site', gaia.sites),
    Field('sortable', 'integer', default = 0,writable=False,readable=False),
    singular = 'RouteDetail', plural = 'RouteDetails')
....


From the controller (making a link field for SQLForm.grid):

....
    boxeslink = dict(
                    header = 'Number of Boxes',
                    body = lambda row: sum([x.site.NumBoxes for x in row.routedetails.select()])
                    )
....


I should be able to access related routedetails rows from a routes row. I can't. I get an exception telling me that the <Row> object doesn't have that attribute.


Sorry for the vague details-- I installed the new version, saw that it didn't work, installed 1.99.7 and it worked perfectly again. I'll get a 2.0.7 instance up and running later and can provide exact details.

Massimo Di Pierro

unread,
Oct 2, 2012, 12:46:07 PM10/2/12
to web...@googlegroups.com
I know what the problem is. Please open a ticket about this so I do not forget and I may fix it tonight.

This is a change in grid behavior and we do not promise backward compatibility in grid because it is "experimental".

Basically the we speeded up the grid but not generating the full Row(s) objects thus your row.routedetails is missing.

In any case it is debatable whether the changes that lead to this are worth it, considering the problem you mention. I will probably revert the old behavior.

massimo

Simon Carr

unread,
Oct 12, 2012, 7:33:48 PM10/12/12
to web...@googlegroups.com
Thanks to all of you who have given so many of us another wonderful evolution of this great framework.

Simon

Vasile Ermicioi

unread,
Oct 12, 2012, 8:08:10 PM10/12/12
to web...@googlegroups.com
you are kind of late, we are already at 2.0.9 and 2.1.0 soon to be released :)
Reply all
Reply to author
Forward
0 new messages