1 | ## 2.19.0 |
---|
2 | - new command line options (Thanks Paolo Pastori) |
---|
3 | |
---|
4 | OLD NAME NEW NAME |
---|
5 | ================== ================== |
---|
6 | --debug --log_level |
---|
7 | --nogui --no_gui |
---|
8 | --ssl_private_key --server_key |
---|
9 | --ssl_certificate --server_cert |
---|
10 | --minthreads --min_threads |
---|
11 | --maxthreads --max_threads |
---|
12 | --profiler --profiler_dir |
---|
13 | --run-cron --with_cron |
---|
14 | --softcron --soft_cron |
---|
15 | --cron --cron_run |
---|
16 | --cronjob * --cron_job * |
---|
17 | --test --run_doctests |
---|
18 | --add_options |
---|
19 | --interface |
---|
20 | --crontab |
---|
21 | |
---|
22 | ## 2.18.1-2.18.5 |
---|
23 | - pydal 19.04 |
---|
24 | - made template its own module (Yet Another Template Language) |
---|
25 | - improved python 3.4-3.7 support |
---|
26 | - better regular expressions |
---|
27 | - bug fixes |
---|
28 | |
---|
29 | ## 2.17.1-2 |
---|
30 | - pydal 18.08 |
---|
31 | - many small bug fixes |
---|
32 | |
---|
33 | ## 2.16.1 |
---|
34 | - pydal 17.11 |
---|
35 | - bootstrap 4 |
---|
36 | - better welcome examples |
---|
37 | - many bug fixes |
---|
38 | |
---|
39 | ## 2.15.1-4 |
---|
40 | - pydal 17.08 |
---|
41 | - dropped support for python 2.6 |
---|
42 | - dropped web shell |
---|
43 | - experimental python 3 support |
---|
44 | - experimental authapi for service login |
---|
45 | - allow ajax file uploads |
---|
46 | - more tests |
---|
47 | - more pep8 compliance |
---|
48 | - d3.js model visulization |
---|
49 | - improved scheduler |
---|
50 | - is_email support for internationalized Domain Names |
---|
51 | - improved used of cookies with CookieJar |
---|
52 | - SQLFORM.grid(showblobs=True) |
---|
53 | - import JS events (added w2p.componentBegin event) |
---|
54 | - added support for CASv3 |
---|
55 | - allow first_name and last_name placeholders in verify_email message |
---|
56 | - added three-quote support in markmin |
---|
57 | - updated pg8000 driver (but we still recommend psycopg2) |
---|
58 | - compiled views use . separator not _ separator (must recompile code) |
---|
59 | - better serbian, french, and catalan translations |
---|
60 | - speed improvements (refactor of compileapp and pyc caching) |
---|
61 | - removed web shell (never worked as intended) |
---|
62 | - allow Expose(..., follow_symlink_out=False). |
---|
63 | - Updated fpdf to latest version |
---|
64 | - JWT support |
---|
65 | - import fabfile for remote deployment |
---|
66 | - scheduler new feature: you can now specify intervals with cron |
---|
67 | - gluon/* removed from sys.path. Applications relying on statements like e.g. |
---|
68 | "from storage import Storage" |
---|
69 | will need to be rewritten with |
---|
70 | "from gluon.storage import Storage" |
---|
71 | - tests can only be run with the usual web2py.py --run_system_tests OR with |
---|
72 | python -m unittest -v gluon.tests on the root dir |
---|
73 | - jQuery 3.2.1 |
---|
74 | - PyDAL 17.07 including: |
---|
75 | allow jsonb support for postgres |
---|
76 | correctly configure adapters that need connection for configuration |
---|
77 | better caching |
---|
78 | updated IMAP adapter methods to new API |
---|
79 | experimental suport for joinable subselects |
---|
80 | improved Teradata support |
---|
81 | improved mongodb support |
---|
82 | overall refactoring |
---|
83 | experimental support for Google Cloud SQL v2 |
---|
84 | new pymysql driver |
---|
85 | |
---|
86 | ## 2.14.6 |
---|
87 | |
---|
88 | - Increased test coverage (thanks Richard) |
---|
89 | - Fixed some newly discovered security issues in admin: |
---|
90 | CSRF vulnerability in admin that allows disabling apps |
---|
91 | Brute force password attack vulnerability in admin |
---|
92 | (thanks Narendra and Leonel) |
---|
93 | |
---|
94 | ## 2.14.1-5 |
---|
95 | |
---|
96 | - fixed two major security issues that caused the examples app to leak information |
---|
97 | - new Auth(…,host_names=[…]) to prevent host header injection |
---|
98 | - improved scheduler |
---|
99 | - pep8 enhancements |
---|
100 | - many bug fixes |
---|
101 | - restored GAE support that was broken in 2.13.* |
---|
102 | - improved fabfile for deployment |
---|
103 | - refactored examples with stupid.css |
---|
104 | - new JWT implementation (experimental) |
---|
105 | - new gluon.contrib.redis_scheduler |
---|
106 | - myconf.get |
---|
107 | - LDAP groups (experimental) |
---|
108 | - .flash -> .w2p_flash |
---|
109 | - Updated feedparser.py 5.2.1 |
---|
110 | - Updated jQuery 1.12.2 |
---|
111 | - welcome app now checks for version number |
---|
112 | - Redis improvements. New syntax: |
---|
113 | |
---|
114 | BEFORE: |
---|
115 | from gluon.contrib.redis_cache import RedisCache |
---|
116 | cache.redis = RedisCache('localhost:6379',db=None, debug=True) |
---|
117 | |
---|
118 | NOW: |
---|
119 | from gluon.contrib.redis_utils import RConn |
---|
120 | from gluon.contrib.redis_cache import RedisCache |
---|
121 | rconn = RConn() |
---|
122 | # or RConn(host='localhost', port=6379, |
---|
123 | # db=0, password=None, socket_timeout=None, |
---|
124 | # socket_connect_timeout=None, .....) |
---|
125 | # exactly as a redis.StrictRedis instance |
---|
126 | cache.redis = RedisCache(redis_conn=rconn, debug=True) |
---|
127 | |
---|
128 | BEFORE: |
---|
129 | from gluon.contrib.redis_session import RedisSession |
---|
130 | sessiondb = RedisSession('localhost:6379',db=0, session_expiry=False) |
---|
131 | session.connect(request, response, db = sessiondb) |
---|
132 | |
---|
133 | NOW: |
---|
134 | from gluon.contrib.redis_utils import RConn |
---|
135 | from gluon.contrib.redis_session import RedisSession |
---|
136 | rconn = RConn() |
---|
137 | sessiondb = RedisSession(redis_conn=rconn, session_expiry=False) |
---|
138 | session.connect(request, response, db = sessiondb) |
---|
139 | |
---|
140 | Many thanks to Richard and Simone for their work and dedication. |
---|
141 | |
---|
142 | ## 2.13.* |
---|
143 | |
---|
144 | - fixed a security issue in request_reset_password |
---|
145 | - added fabfile.py |
---|
146 | - fixed oauth2 renew token, thanks dokime7 |
---|
147 | - fixed add_membership, del_membership, add_membership IntegrityError (when auth.enable_record_versioning) |
---|
148 | - allow passing unicode to template render |
---|
149 | - allow IS_NOT_IN_DB to work with custom primarykey, thanks timmyborg |
---|
150 | - allow HttpOnly cookies |
---|
151 | - french pluralizaiton rules, thanks Mathieu Clabaut |
---|
152 | - fixed bug in redirect to cas service, thanks Fernando González |
---|
153 | - allow deploying to pythonanywhere from the web2py admin that you're running locally, thanks Leonel |
---|
154 | - better tests |
---|
155 | - many more bug fixes |
---|
156 | |
---|
157 | ## 2.12.1-3 |
---|
158 | |
---|
159 | - security fix: Validate for open redirect everywhere, not just in login() |
---|
160 | - allow to pack invidual apps and selected files as packed exe files |
---|
161 | - allow bulk user registration with default bulk_register_enabled=False |
---|
162 | - allow unsorted multiword query in grid search |
---|
163 | - better MongoDB support with newer pyDAL |
---|
164 | - enable <app>/appadmin/manage/auth by default for user admin |
---|
165 | - allow mail.settings.server='logging:filename' to log emails to a file |
---|
166 | - better caching logic |
---|
167 | - fixed order of confirm-password field |
---|
168 | - TLS support in ldap |
---|
169 | - prettydate can do UTC |
---|
170 | - jquery 1.11.3 |
---|
171 | - bootstrap 3.3.5 |
---|
172 | - moved to codecov and enabled appveyor |
---|
173 | - many bug fixes |
---|
174 | |
---|
175 | ## 2.11.1 |
---|
176 | |
---|
177 | - Many small but significative improvements and bug fixes |
---|
178 | |
---|
179 | ## 2.10.1-2.10.2 |
---|
180 | |
---|
181 | - welcome app defaults to Bootstrap 3 |
---|
182 | - DAL -> pyDAL (thanks Giovanni, Niphlod, Paolo) |
---|
183 | - new modular dal |
---|
184 | - fixed problems with GAE support |
---|
185 | - moved to full NDB support |
---|
186 | - improved connection pooling logic |
---|
187 | - optional cache.ram.max_ram_utilization = 90 (experimental) |
---|
188 | - improved cache.disk logic (thanks Niphlod and Leonel) |
---|
189 | - lots of pep8 improvements, thanks Richard |
---|
190 | - added support for email attchments when auth.settings.server='gae' |
---|
191 | - fixed app.yaml.example for GAE |
---|
192 | - fixed many small issues |
---|
193 | - many many more tests (thanks Giovanni, Niphlod, Paolo) |
---|
194 | - upgrading static libraries (bootstrap, codemirror, jquery, etc) |
---|
195 | |
---|
196 | ## 2.9.12 |
---|
197 | |
---|
198 | - Tornado HTTPS support, thanks Diego |
---|
199 | - Modular DAL, thanks Giovanni |
---|
200 | - Added coverage support, thanks Niphlod |
---|
201 | - More tests, thanks Niphlod and Paolo Valleri |
---|
202 | - Added support for show_if in readonly sqlform, thanks Paolo |
---|
203 | - Improved scheduler, thanks Niphlod |
---|
204 | - Email timeout support |
---|
205 | - Made web2py's custom_import work with circular imports, thanks Jack Kuan |
---|
206 | - Added Portuguese, Catalan, and Burmese translations |
---|
207 | - Allow map_hyphen to work for application names, thanks Tim Nyborg |
---|
208 | - New module appconfig.py, thanks Niphlod |
---|
209 | - Added geospatial support to Teradata adaptor, thanks Andrew Willimott |
---|
210 | - Many bug fixes |
---|
211 | |
---|
212 | |
---|
213 | |
---|
214 | ## 2.9.6 - 2.9.10 |
---|
215 | |
---|
216 | - fixed support of GAE + SQL |
---|
217 | - 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. |
---|
218 | - support for SAML2 (with pysaml2) |
---|
219 | - Sphinx documentation (thanks Niphlod) |
---|
220 | - improved scheduler (thanks Niphlod) |
---|
221 | - increased security |
---|
222 | - better cache.disk (thanks Leonel) |
---|
223 | - sessions are stored in subfolders for speed |
---|
224 | - postgres support for "INSERT ... RETURING ..." |
---|
225 | - ldap support for Certificate Authority (thanks Maggs and Shane) |
---|
226 | - improved support for S/Mime X.509 (thanks Gyuris) |
---|
227 | - better welcome app |
---|
228 | - support for Collection+JSON Hypermedia API (RESTful self documenting API) |
---|
229 | - jQuery 1.11 |
---|
230 | - codemirror 4.0.3 |
---|
231 | - markdown2 2.2.3 |
---|
232 | - memcache 1.53 |
---|
233 | - support for the new janrain API |
---|
234 | - new "web2py.py -G config" to make GAE configuration easier |
---|
235 | - many small bug fixes |
---|
236 | |
---|
237 | ## 2.9.1 - 2.9.5 |
---|
238 | |
---|
239 | - many small but important bug fixes |
---|
240 | - jquery 1.11 |
---|
241 | - codemirror 3.21, thanks Paolo Valleri |
---|
242 | - fixed security issue with sessions in database, thanks Nathan Humphreys |
---|
243 | - fixed security issue with persistant data in session, thanks Kiran |
---|
244 | - fixed security issue with redirect after expired login, thanks André Kablu |
---|
245 | - cleaner DAL and rname integration, thanks niphlod and Michele |
---|
246 | - added mongodb and imap tests for dal, thanks Alan |
---|
247 | - NoSQL dal tests, thanks Alan |
---|
248 | - better docstrings, thanks Niphlod |
---|
249 | - allow URL(...,language=...) with parametric router, thanks Jonathan |
---|
250 | - allow non-expiration of gae-memcache, thanks crimsoncantab |
---|
251 | - MARKMIN(...,_class='...'), thanks Luca |
---|
252 | - better transliteration in building slugs |
---|
253 | - autolink emails |
---|
254 | - new Janrain API, thanks PeterQ2 |
---|
255 | - enable admin app for GAE (experimental), thanks Alan |
---|
256 | - many bug fixes |
---|
257 | - invalidate function in web2py.js, thanks Paolo |
---|
258 | - DAL(...,adapter_args=dict(engine='MyISAM')) |
---|
259 | - todolist panel in admin editor, thanks Paolo Valleri |
---|
260 | |
---|
261 | ## 2.8.1 |
---|
262 | |
---|
263 | - no more winservice (use nssm instead) |
---|
264 | - better imap support in DAL |
---|
265 | - db().select().as_tree() |
---|
266 | - bootstrap 2.3.2 |
---|
267 | - codemirror 3.19 |
---|
268 | - improved mongoDB support, thanks Alan |
---|
269 | - support for wiki custom render function |
---|
270 | - Wiki(...groups=['x','y']) allows bypassing default permissions |
---|
271 | - fixed websocket_messaging.py to support newer Tornado |
---|
272 | - NDB support for GAE, thanks Quint |
---|
273 | - fixed major concurrecy issue with MEMDB |
---|
274 | - blocked generic.jsonp for security reasons |
---|
275 | - many bug fixes, thanks Niphlod, Michele, Anthony, Tim, and many others. |
---|
276 | |
---|
277 | ## 2.7.1 - 2.7.4 |
---|
278 | |
---|
279 | - jQuery 1.10.2 |
---|
280 | - codemirror 3.18, thanks Paolo |
---|
281 | - namespaces in T("Welcome", ns="namespace"), thanks jamarcer (experimental) |
---|
282 | - more Auth options, thanks Charles |
---|
283 | - more admin configuration, thanks Roberto |
---|
284 | - new gluon.contrib.strip.StripeForm for PCI compliant payments |
---|
285 | - webclient can hendle lists, thanks Yair |
---|
286 | - allows SQLFORM.grid(...,ignore_common_filters=True) |
---|
287 | - more translations, thanks Vladyslav |
---|
288 | - better session2trash.py, works with scheduler, thanks niphlod |
---|
289 | - fixed problem with ENABLED/DISABLED |
---|
290 | - many bug fixes, thanks niphlod, michele, anthony, roberto, tim, and others |
---|
291 | |
---|
292 | ## 2.6.1 - 2.6.4 |
---|
293 | |
---|
294 | 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). |
---|
295 | |
---|
296 | 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. |
---|
297 | |
---|
298 | 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. |
---|
299 | |
---|
300 | - better directory structure: handlers/ extras/ examples/ |
---|
301 | - better MongoDb support, thanks Alan |
---|
302 | - better Admin editor interface, thanks Paolo, Roberto (codemirror 3), and Lightdot |
---|
303 | - better layout.html and web2py_bootstrap.css, thanks Paolo |
---|
304 | - refactored web2py.js makes code more readable, thanks Niphlod |
---|
305 | - compute fields can depend on other compute(d) fields |
---|
306 | - more functions in appadmin (/manage/auth), thanks Anthony |
---|
307 | - support for CAST in SQL generation |
---|
308 | - new API jQuery('#component').reload() |
---|
309 | - new API rows.render() |
---|
310 | - new API table.field.referent, table._references |
---|
311 | - new API db(...).validate_and_update(...) |
---|
312 | - new API Wiki(..., force_render=True) renders the page source again instead of using cached |
---|
313 | - Wiki now automatically parses named component arguments @{f:a=1,b='twp',c=variable} |
---|
314 | - auth.get_or_create_user(login=False) |
---|
315 | - auth = Auth(crsf_protection = False) prevents creating sessions in login/register forms. |
---|
316 | - enable multiple renderers in wiki, thanks Alan |
---|
317 | - log messages from Auth are no longer translated (for speed and readability) |
---|
318 | - update jQuery mobile to 1.3.1 |
---|
319 | - reduced memory footprint by conditionally loading Tk |
---|
320 | - faster pbkdf2 uses OpenSSL, thanks Michele |
---|
321 | - many speed improvements, thanks Michele |
---|
322 | - better session logic, prevents false positive when detecting session changes. |
---|
323 | - scripts/import_static.py converts a static site to a web2py app (experimental) |
---|
324 | - support for new http error code 451 |
---|
325 | - profiler saves dump in dir, thanks Niphlod |
---|
326 | - upgraded pyfpdf, thanks Mariano |
---|
327 | - gluon/contrib/pdfinvoice.py for generating PDF invoices (assumes reportlab) |
---|
328 | - no more double submission of forms (even without crsf protection), thanks Niphlod |
---|
329 | - speedup for define_table, thanks Michele |
---|
330 | - settings.cfg to admin, thanks Paolo |
---|
331 | - many bugs fixed, thanks Niphlod, Michele, Roberto, Jonathan, and many others |
---|
332 | - 2.6,3 specifically fixed a possible DoS vulnerability |
---|
333 | - 2.6.4 specifically fixes major problem introduced in 2.6.1 with session logic |
---|
334 | |
---|
335 | ## 2.5.2 |
---|
336 | |
---|
337 | - Web editor with tabs, thanks ilvalle |
---|
338 | |
---|
339 | ## 2.5.1 |
---|
340 | |
---|
341 | - New style virtual fields in grid |
---|
342 | - Conditional fields (experimental) ``db.table.field.show_if = db.table.otherfield==True`` or ``db.table.field.show_if = db.table.otherfiel.contains(values)`` |
---|
343 | - 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) |
---|
344 | - support for POST variables in DELETE |
---|
345 | - Fixed memory leak when using the TAG helper |
---|
346 | |
---|
347 | |
---|
348 | ## 2.4.7 |
---|
349 | |
---|
350 | - pypy support, thanks Niphlod |
---|
351 | - more bug fixes |
---|
352 | - ... |
---|
353 | |
---|
354 | ## 2.4.6 |
---|
355 | |
---|
356 | - better tests |
---|
357 | - new ANY_OF and IS_IPV6 validators |
---|
358 | - new custom save option |
---|
359 | - many small bug fixes |
---|
360 | |
---|
361 | ## 2.4.5 |
---|
362 | |
---|
363 | - travis.ci integration (thanks Marc Abramowitz and Niphlod). Passes all tests (thanks Niplod). |
---|
364 | - IS_DATE and IS_DATETIME can specify timezone |
---|
365 | |
---|
366 | ## 2.4.1- 2.4.3 |
---|
367 | |
---|
368 | - 2D GEO API: geoPoint, getLine, geoPolygon |
---|
369 | - support for 'json' field type in DAL |
---|
370 | - schema export with db.as_json/as_xml, thanks Alan |
---|
371 | - graph representation of models |
---|
372 | - support for semantic versioning |
---|
373 | - new bootstrap based admin, thanks Paolo |
---|
374 | - improved scheduler (and change in scheduler field names), thanks Niphlod |
---|
375 | - graphviz support added to adm, thanks Jose |
---|
376 | - on_failure in grid |
---|
377 | - db.table.field.abs() |
---|
378 | - better wiki |
---|
379 | - geoPoint, getLine, geoPolygon |
---|
380 | - better reporting of 500 ajax errors |
---|
381 | - better grid |
---|
382 | - improved/fixed mongodb support |
---|
383 | - improved parse_as_rest(patterns=...), thanks Denes |
---|
384 | - improved IMAP DAL support, thanks Alan |
---|
385 | - improved security when cookies in sessions |
---|
386 | - Row.as_xml, as_json, as_dict, as_yaml thanks Alan |
---|
387 | - smarter custom_import |
---|
388 | - setup-ubuntu-12-04-redmine-unicorn-web2py-uwsgi-nginx.sh |
---|
389 | - added support for motor and pulsar servers, thanks Niphlod |
---|
390 | - added json-rpc2 support |
---|
391 | - added pypyodbc.py driver |
---|
392 | - allow auth.settings.ondelete='CASCADE' |
---|
393 | - new syntax IS_EXPR(lambda value: ... |
---|
394 | - using google for QR codes (although Graph API will be deprecated in 2015) |
---|
395 | - upgraded fpdf to 1.7.1 |
---|
396 | - bug fixes (including issues with calendar.js and archive tables) |
---|
397 | |
---|
398 | ## 2.3.1 - 2.3.2 |
---|
399 | |
---|
400 | - new virtual fields syntax: |
---|
401 | ``db.define_table('person',Field('name'),Field.Virtual('namey',lambda row: row.person.name+'y'))`` |
---|
402 | - db.thing(name='Cohen',_orderby=db.thing.name), thanks Yair |
---|
403 | - made many modules Python 3.3 friendly (compile but not tested) |
---|
404 | - better welcome css, thanks Paolo |
---|
405 | - jQuery 1.8.3 |
---|
406 | - Bootstrap 2.2.2 |
---|
407 | - Modernizr 2.6.2 (custom full options) |
---|
408 | - integration with analyitics.js (0.2.0) |
---|
409 | - better scheduler, thanks Niphlod |
---|
410 | - page and media preview in wiki, thanks Niphlod |
---|
411 | - create new auth.wiki page from slug model, thanks Nico |
---|
412 | - conditional menus with auth.wiki(menugroups=['wiki_editor']) |
---|
413 | - better security in grid/smartgrid |
---|
414 | - allow LOADing multiple grids, thanks Niphlod |
---|
415 | - auth.settings.login_onfail, thanks Yair |
---|
416 | - better handling of session files for speed |
---|
417 | - added heroku support (experimental) |
---|
418 | - added rocket support for IPV6, thanks Chirs Winebrinner |
---|
419 | - more customizable menus with MENU(li_first, li_last..) |
---|
420 | - added support for paymentech (gluon/contrib/paymentech.py) |
---|
421 | - fixed broken cron |
---|
422 | - fixed possible xss with share.js |
---|
423 | - many bug fixes. Closed more than 50 tickets since 2.2.1 |
---|
424 | |
---|
425 | ## 2.2.1 |
---|
426 | |
---|
427 | - session.connect(cookie_key='secret', compression_level=9) stores sessions in cookies |
---|
428 | - T.is_writable = False prevents T from dynamically updating langauge files |
---|
429 | - all code is more PEP8 compliant |
---|
430 | - better custom_importer behaviour (now works per app, is smalled and faster) |
---|
431 | - fixed some bugs |
---|
432 | - upgraded feedparser.py and rss2.py |
---|
433 | - codemirror has autoresize |
---|
434 | |
---|
435 | ## 2.1.0 |
---|
436 | |
---|
437 | - overall faster web2py |
---|
438 | - when apps are deleted, a w2p copy is left in deposit folder |
---|
439 | - change in cron (it is now disabled by default). removed -N option and introduced -Y. |
---|
440 | - faster web2py_uuid() and request initialization logic, thanks Michele |
---|
441 | - static asset management, thanks Niphlod |
---|
442 | - improved mobile admin |
---|
443 | - request.requires_https and Auth(secure=True), thanks Yarin and Niphlod |
---|
444 | - better custom_import (works per app and is faster), thanks Michele |
---|
445 | - redis_sesssion.py, thanks Niphlod |
---|
446 | - allow entropy computation in IS_STRONG and web2py.js, thanks Jonathan and Niphlod |
---|
447 | - fixed many aith.wiki problems |
---|
448 | - support for auth.wiki(render='html') |
---|
449 | - better welcome layout, thanks Paolo |
---|
450 | - db.define_table(...,redefine=True) |
---|
451 | - DAL, Row, and Rows object can now be pickled/unpickled, thanks to zombie DAL. |
---|
452 | - admin uses codemirror |
---|
453 | - allow syntax auth = Auth(db).define_tables() |
---|
454 | - better auth.wiki with preview, thanks Alan |
---|
455 | - better auth.impersonate, thanks Alan |
---|
456 | - upgraded jQuery 1.8 |
---|
457 | - upgraded Bootstrap 2.1 |
---|
458 | - fixed problem with dropbox_account.py |
---|
459 | - many fixes to cache.ram, cache.disk, memcache and gae_memcache |
---|
460 | - cache.with_prefix(cache.ram,'prefix') |
---|
461 | - db.table.field.epoch() counts seconds from epoch |
---|
462 | - DAL support for SQL CASE, example: db().select(...query.case('true','false)) |
---|
463 | - DAL(...,do_connect=False) allows faking connections |
---|
464 | - DAL(...,auto_import=True) now retieves some fiel attributes |
---|
465 | - mail can specify a sender: mail.send(...,sender='Mr X <%(sender)s>') |
---|
466 | - renamed gluon/contrib/comet_messaging.py -> gluon/contrib/websocket_messaging.py |
---|
467 | |
---|
468 | ## 2.0.1-11 |
---|
469 | |
---|
470 | ### DAL Improvements |
---|
471 | |
---|
472 | - Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan |
---|
473 | - db(...).select(cacheable=True) make select 30% faster |
---|
474 | - db(...).select(cache=(cache.ram,3600)) now caches parsed data 100x faster |
---|
475 | - db(...).count(cache=(cache.ram,3600)) now supported |
---|
476 | - MongoDB support in DAL (experimental), thanks Mark Breedveld |
---|
477 | - geodal and spatialite, thanks Denes and Fran (experimental) |
---|
478 | - db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks) |
---|
479 | - db(...).update_naive(...) same as update but ignores table._before_update and table._after_update |
---|
480 | - DAL BIGINT support and DAL(...,bigint_id=True) |
---|
481 | - IS_IN_DB(..., distinct=True) |
---|
482 | - new syntax: db.mytable.insert(myuploadfield=open(....)), thank you Iceberg |
---|
483 | - db(...).select(db.mytable.myfield.count(distinct=True)) |
---|
484 | - db(db.a)._update(name=db(db.b.a==db.a.id).nested_select(db.b.id)) |
---|
485 | - db.mytable.myfield.filter_in, filter_out |
---|
486 | - db.mytable._enable_record_versioning(db) adds versioning to this table |
---|
487 | - teradata adapter, thanks Andrew Willimott |
---|
488 | - experimental Sybase Adapter |
---|
489 | - added db.table.field.avg() |
---|
490 | - Support for Google App Engine projections, thanks Christian |
---|
491 | - 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 |
---|
492 | - executesql(...,fields=,columns=) allows parsing of results in Rows, thanks Anthony |
---|
493 | - Rows.find(lambda row: bool(), limitby=(0,1)) |
---|
494 | |
---|
495 | ### Auth improvements |
---|
496 | |
---|
497 | - auth.enable_record_versioning(db) adds full versioning to all tables |
---|
498 | - @auth.requires_login(otherwise=URL(...)) |
---|
499 | - auth supports salt and compatible with third party data, thanks Dave Stoll |
---|
500 | - CRYPT now defaults to pbkdf2(1000,20,sha1) |
---|
501 | - Built-in wiki with menu, tags, search, media, permissions. def index: return auth.wiki() |
---|
502 | - auth.settings.everybody_group_id |
---|
503 | - allow storage of uploads on any PyFileSystem (including amazon) |
---|
504 | |
---|
505 | ### Form improvements |
---|
506 | |
---|
507 | - FORM.confirm('Are you sure?',{'Back':URL(...)}) |
---|
508 | - SQLFORM.smartdictform(dict) |
---|
509 | - form.add_button(value,link) |
---|
510 | - SQLFORM.grid(groupby='...') |
---|
511 | - fixed security issue with SQLFORM.grid and SQLFORM.smartgrid |
---|
512 | - more export options in SQLFORM.grid and SQLFORM.smartgrid (html, xml, csv, ...) |
---|
513 | |
---|
514 | ### Admin improvements |
---|
515 | |
---|
516 | - new admin pages: manage_students, bulk_regsiter, and progress reports |
---|
517 | - increased security in admin against CSRF |
---|
518 | - experimental Git integration |
---|
519 | - experimental OpenShift deployment |
---|
520 | - multi-language pluralization engine |
---|
521 | - ace text web editor in admin |
---|
522 | - Ukrainian translations, thanks Vladyslav Kozlovskyy |
---|
523 | - Romanian translation for welcome, thanks ionel |
---|
524 | - support for mercurial 2.6, thanks Vlad |
---|
525 | |
---|
526 | ### Scheduler Improvements (thanks to niphlod, ykessler, dhx, toomim) |
---|
527 | |
---|
528 | - web2py.py -K myapp -X starts the myapp scheduler alongside the webserver |
---|
529 | - tasks are marked EXPIRED (if stop_time passed) |
---|
530 | - functions with no result don't end up in scheduler_run |
---|
531 | - more options: web2py.py -E -b -L |
---|
532 | - scheduler can now handle 10k tasks with 20 concurrent workers and with no issues |
---|
533 | - new params: |
---|
534 | tasks can be found in the environment (no need to define the tasks parameter) |
---|
535 | max_empty_runs kills the workers automatically if no new tasks are found in queue (nice for "spikes" of processing power) |
---|
536 | discard_results to completely discard the results (if you don't need the output of the task) |
---|
537 | utc_time enables datetime calculations with UTC time |
---|
538 | - scheduler_task changes: |
---|
539 | task_name is no longer required (filled automatically with function_name if found empty) |
---|
540 | uuid makes easy to coordinate scheduler_task maintenance (filled automatically if not provided) |
---|
541 | stop_time has no default (previously was today+1) |
---|
542 | retry_failed to requeue automatically failed tasks |
---|
543 | sync_output refreshes automatically the output (nice to report percentages) |
---|
544 | - workers can be: |
---|
545 | DISABLED (put to sleep and do nothing if not sending the heartbeat every 30 seconds) |
---|
546 | TERMINATE (complete the current task and then die) |
---|
547 | KILL (kill ASAP) |
---|
548 | |
---|
549 | ### Other Improvements |
---|
550 | |
---|
551 | - gluon/contrib/webclient.py makes it easy to create functional tests for app |
---|
552 | - DIV(..).elements(...replace=...), thanks Anthony |
---|
553 | - new layout based on Twitter Bootstrap |
---|
554 | - New generic views: generic.ics (Mac Mail Calendar) and generic.map (Google Maps) |
---|
555 | - request.args(0,default=0, cast=int, otherwise=URL(...)), thanks Anthony |
---|
556 | - redirect(...,type='auto') will be handled properly in ajax responses |
---|
557 | - routes in can redirect outside with routes_in=[('/path','303->http://..')] |
---|
558 | - better memcache support |
---|
559 | - improved spreadsheet, thanks Alan |
---|
560 | - new internationalization engine, thanks Vladyslav |
---|
561 | - pluralization engine, thanks Vladyslav |
---|
562 | - new markmin with support for nested lists, <i>, <em>, autolinks, thanks Vladyslav |
---|
563 | - new syntax: {{=BR()*5}} |
---|
564 | - gluon.cache.lazy_cache decorator allows caching functions in modules |
---|
565 | - .coffee and .less support in response.files, thanks Sam Sheftel |
---|
566 | - ldap certificate support |
---|
567 | - pg8000 postgresql driver support (experimental) |
---|
568 | - @cache('%(name)s%(args)s%(vars)s',5) and cache.autokey |
---|
569 | - added tox.ini, thanks Marc |
---|
570 | - web2py.py --run_system_tests, thanks Marc Abramowitz |
---|
571 | - html.py (and web2py helpers) can be used without web2py dependencies |
---|
572 | - new fpdf, thanks Mariano |
---|
573 | |
---|
574 | |
---|
575 | ## 1.99.5-1.99.7 |
---|
576 | - admin in Russian (Bulat), Japanese (Omi) and Slovenian (Robert Valentak) |
---|
577 | - included web-based debugger (experimental, thanks Mariano) |
---|
578 | - def index(): return dict(a=gluon.tools.Expose(folder)) |
---|
579 | - db.table.field.like(...,case_sensitive=False) (thanks Floyd) |
---|
580 | - db.table.field.regexp(...) for sqlite and postgres |
---|
581 | - db(...,ignore_common_filters=True) |
---|
582 | - db(db.dog_id.belongs(db.dogs.owner=='james')).select() |
---|
583 | - db(...).select().group_by_value(db.table.field) (thanks Yair) |
---|
584 | - db = DAL('imap://user:password@server:port') support (thanks Alan Etkin) |
---|
585 | - db = DAL('teradata://DSN=dsn;UID=user;PWD=pass; DATABASE=database') (thanks Adrew Willmott) |
---|
586 | - db = DAL('mongodb://127.0.0.1:5984/db') (experimental, thanks Mark Breedveld) |
---|
587 | - db = DAL('cubrid') (experimental) |
---|
588 | - db = DAL('postgres:pg8000:...') and DAL('postgres:psycopg2:...') |
---|
589 | - pg8000 now ships with web2py (thanks Mariano) |
---|
590 | - reponse.delimiters = ('\\[','\\]') (thanks Denes) |
---|
591 | - auth.user_groups stores user groups |
---|
592 | - auth.is_impersonating() |
---|
593 | - populate can now deal with computed fields (thanks Tsvi Mostovicz) |
---|
594 | - new rediscache (thanks niphold) |
---|
595 | - sync languages capability (thanks Yair) |
---|
596 | - improved markmin auto-links |
---|
597 | - improved ldap support (thanks Omi) |
---|
598 | - added TimeCollector (thanks Caleb) |
---|
599 | - better cpdb.py (thanks pasxidis) |
---|
600 | - conditional menu items (reponse.menu=[(title,bool,link,[],condition)] |
---|
601 | - scripts/services/service.py (thanks Ross) |
---|
602 | - gluon/contrib/login_methods/browserid_account.py (thanks Pai) |
---|
603 | - gluon/contrib/htmlmin.py for html minimization (thanks kerncece) |
---|
604 | - web2py_component has timeout parameter, thanks Alan |
---|
605 | - 100's of small bug fixes and small improvements |
---|
606 | |
---|
607 | ## 1.99.4 |
---|
608 | Improved mobile admin, thanks Angelo |
---|
609 | Improved examples page, thanks Anthony |
---|
610 | fixed a SQLCustomField bug |
---|
611 | |
---|
612 | ## 1.99.3 |
---|
613 | This is a major revision in peparation for web2py 2.0 |
---|
614 | - moved to GitHub and abandoned Lanchpad |
---|
615 | - new web site layout, thanks Anthony |
---|
616 | - new welcome app using skeleton, thanks Anthony |
---|
617 | - jQuery 1.7.1 |
---|
618 | - modernizr 2.0.6 (customized) |
---|
619 | - ``define_table('thing', singluar='thing',plural='things')`` |
---|
620 | - CAS 1.0 and 2.0 compliant, thanks Olivier |
---|
621 | - fixed validate_and_insert and validate_and_update, thanks Anthony |
---|
622 | - ``request.user_agent().is_mobile`` etc., thanks Ross and Angelo |
---|
623 | - better router, thanks Jonathan |
---|
624 | - app on/off buttons |
---|
625 | - support for dropbox_login |
---|
626 | - improved markmin recognizes qr code, supports auto audio/video/embed |
---|
627 | - ``response.optimize_css = 'concat,minify,inline'``, thanks Ross |
---|
628 | - ``response.optimize_js = 'concat,minify,inline'`` thanks Ross |
---|
629 | - ``db.define_table(...,common_filter=query)``, thanks Yair |
---|
630 | - ``db(...,ignore_common_filter=True)`` |
---|
631 | - support for stripe payments |
---|
632 | - support for DowCommerce payments, thanks Dave |
---|
633 | - experimental PyPy support |
---|
634 | - experimental mongodb support, thanks Mark |
---|
635 | - tickets in db now accessible from admin, thanks Niphlod |
---|
636 | |
---|
637 | |
---|
638 | |
---|
639 | |
---|
640 | ## 1.99.1-1.99.2 |
---|
641 | - gluon/contrib/simplejsonrpc.py |
---|
642 | - gluon/contrib/redis_cache.py |
---|
643 | - support for A(name,callback=url,target='id',delete='tr') |
---|
644 | - support for A(name,component=url,target='id',delete='tr') |
---|
645 | - new pip installer, thanks Chris Steel |
---|
646 | - isapiwsgihandler.py |
---|
647 | - dal expression.coalesce(*options) |
---|
648 | - gluon/contrib/simplejsonrpc.py, thanks Mariano |
---|
649 | - expire_sessions.py respects expiration time, thanks iceberg |
---|
650 | - addressed this issue: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ |
---|
651 | - x509 support (thanks Michele) |
---|
652 | - form.process() and for.validate() |
---|
653 | - rocket upgrade (1.2.4) |
---|
654 | - jQuery upgrade (1.6.3) |
---|
655 | - new syntax rows[i]('tablename.fieldname') |
---|
656 | - new query syntax field.contains(list,all=True or False) |
---|
657 | - new SQLFORM.grid and SQLFORM.smartgrid (should replace crud.search and crud.select) |
---|
658 | - support for natural language queries (english only) in SQLFORM.grid |
---|
659 | - support for computed columns and additional links in SQLFORM.grid |
---|
660 | - new style virtual fields (experimental): db.table.field=Field.Lazy(...) |
---|
661 | - request.utcnow |
---|
662 | - cleaner/simpler welcome/models/db.py and welcome layout.html |
---|
663 | - response.include_meta() and response.include_files(), thanks Denes |
---|
664 | - dal auto-reconnect on time-out connections |
---|
665 | - COL and COLGROUP helpers |
---|
666 | - addresed OWASP #10, thanks Anthony and Eric |
---|
667 | - auth.settings.login_after_registration=True |
---|
668 | - detection of mobile devices and @mobilize helper (view.mobile.html), thanks Angelo |
---|
669 | - experimental gluon/scheduler.py |
---|
670 | - scripts/make_min_web2py.py |
---|
671 | - crud.search has more options, thanks Denes |
---|
672 | - many bug fixes (thanks Jonathan, Michele, Fran and others) |
---|
673 | |
---|
674 | ## 1.98.1-1.98.2 |
---|
675 | - fixed some problems with LOAD(ajax=False), thanks Anthony |
---|
676 | - jquery 1.6.2 |
---|
677 | - gevent.pywsgi adds ssl support, thanks Vasile |
---|
678 | - import/export of blobs are base64 encoded |
---|
679 | - max number of login attemts in admin, thanks Ross |
---|
680 | - fixed joins with alias tables |
---|
681 | - new field.custom_delete attribute |
---|
682 | - removed resctions on large 'text fields, thanks Martin |
---|
683 | - field.represent = lambda value,record: .... (record is optional) |
---|
684 | - FORM.validate() and FORM.process(), thanks Bruno |
---|
685 | - faster visrtualfields, thanks Howsec |
---|
686 | - mail has ssl support separate from tls, thanks Eric |
---|
687 | - TAG objects are now pickable |
---|
688 | - new CAT tag for no tags |
---|
689 | - request.user_agent(), thanks Ross |
---|
690 | - fixed fawps support |
---|
691 | - SQLFORM(...,separator=': ') now customizable |
---|
692 | - many small bug fixes |
---|
693 | |
---|
694 | ## 1.97.1 |
---|
695 | - validate_and_update, thanks Bruno |
---|
696 | - fixed problem with new custom import, thanks Mart |
---|
697 | - fixed pyamf 0.6, thanks Alexei and Nickd |
---|
698 | - fixed "+ =" bug in wizard |
---|
699 | - fixed problem with allowed_patterns |
---|
700 | - fixed problems with LOAD and vars and ajax |
---|
701 | - closed lots of google code tickets |
---|
702 | - checkboxes should now work with list:string |
---|
703 | - web2py works on Android, thanks Corne Dickens |
---|
704 | - new cpdb.py, thanks Mart |
---|
705 | - improved translation (frech in particuler), thanks Pierre |
---|
706 | - improved cas_auth.py, thanks Sergio |
---|
707 | - IS_DATE and IS_DATETIME validators now work with native types |
---|
708 | - better description of --shell, thanks Anthony |
---|
709 | - extra SQLTABLE columns, thanks Martin |
---|
710 | - fixed toolbar conflics, thanks Simon |
---|
711 | - GAE password shows with **** |
---|
712 | |
---|
713 | ## 1.96.2-1.96.4 |
---|
714 | - bug fixes |
---|
715 | |
---|
716 | ## 1.96.1 |
---|
717 | |
---|
718 | - "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. |
---|
719 | - conditional models in |
---|
720 | models/<controller>/a.py and models/<controller>/<function>/a.py |
---|
721 | - from mymodule import *, looks for mymodule in applications/thisapp/modules first and then in sys.path. No more need for local_import. Thanks Pierre. |
---|
722 | - 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. |
---|
723 | |
---|
724 | - all applications have cas 2.0 provider at http://.../user/cas/login |
---|
725 | - all applications can delegate to login to external provider Auth(...,cas_provider='http://.../other_app/default/user/cas') |
---|
726 | - A(...,callback=URL(...),larget='id') does Ajax |
---|
727 | - URL(...,user_signature=True), LOAD(...,user_signature=True) can sign urls and @auth.requires_signature() will check the signature for any decorated action. |
---|
728 | |
---|
729 | - DAL(...,migrate_enabled=False) to disable all migrations |
---|
730 | - DAL(...,fake_migrate_all=True) to rebuild all corrupted metadata |
---|
731 | - new DAL metadata format (databases/*.table) |
---|
732 | - DAL(...,adapter_arg={}) allows support for alternate drivers |
---|
733 | - DAL now allows circular table defintions |
---|
734 | - DAL(..,auto_import=True) automatically imports tables from metadata without need to db.define_table(...)s. |
---|
735 | - new alterante syntax for inner joins: db(...).select(join=...) |
---|
736 | - experimental cubrid database support |
---|
737 | - DAL 'request_tenant' fields are special, the altomatically filer all records based on their default value. |
---|
738 | - db._common_fields.append(Field('owner')) allows to add fields to ALL tables |
---|
739 | - DAL ignores repeated fields with same names |
---|
740 | |
---|
741 | - web2py_ajax.html is more modular, thanks Anthony |
---|
742 | - request.is_local |
---|
743 | - request.is_http |
---|
744 | - new sessions2trash.py thanks Jim Karsten |
---|
745 | - corrupted cache files are automatically deleted |
---|
746 | - new simpler API gluon.contrib.AuthorizeNet.procss(...) |
---|
747 | - fixed recaptcha (as they released new API) |
---|
748 | - messages in validators have default internationalization |
---|
749 | - No more Auth(globals(),db), just Auth(db). Same for Crud and Service. |
---|
750 | - scripts/access.wsgi allows apache+mod_wsgi to delegate authentication of any URL to any web2py app |
---|
751 | - json now supports T(...) |
---|
752 | - scripts/setup-web2py-nginx-uwsgi-ubuntu.sh |
---|
753 | - web2py HTTP responses now set: "X-Powered-By: web2py", thanks Bruno |
---|
754 | - mostly fixed generic.pdf. You can view any page in PDF if you have pdflatex installed or if your html follows the pyfpdf convention. |
---|
755 | - 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() |
---|
756 | - {{=response.toolbar()}} to help you debug applications |
---|
757 | - web based shell now supports object modifications (but no redefinitions of non-serializable types) |
---|
758 | - jQuery 1.6.1 |
---|
759 | - Lots of bug fixes |
---|
760 | |
---|
761 | |
---|
762 | ## 1.95.1 |
---|
763 | - Google MySQL support (experimental) |
---|
764 | - pip support, thanks lifeeth |
---|
765 | - better setup_exe.py, thanks meredyk |
---|
766 | - importved pyfpdf |
---|
767 | - domain check in email_auth.py, thanks Gyuris |
---|
768 | - added change_password_onvalidation and change_password_onaccept |
---|
769 | - DAL(...,migrate_enabled=True) |
---|
770 | - login_methods/loginza.py, thanks Vladimir |
---|
771 | - bpython shell support, thanks Arun |
---|
772 | - request.uuid and response.uuid (for a future toolbar) |
---|
773 | - db._timings contains database query timing info |
---|
774 | - efficient db(...).isempty() |
---|
775 | - setup-web2py-nginx-uwsgi-ubuntu.sh |
---|
776 | - Many bug fixes, thanks Jonathan |
---|
777 | |
---|
778 | ## 1.94.6 |
---|
779 | - fixed a number of minor bugs including adding some missing files |
---|
780 | - better session handling on session._unlock(..), thanks Jonathan |
---|
781 | - added experimental pip support, thanks Lifeeth |
---|
782 | - added experimental SAP DB support |
---|
783 | |
---|
784 | ## 1.94.5 |
---|
785 | - fixed a major bug with session introdued in 1.94.1 |
---|
786 | |
---|
787 | ## 1.94.4 |
---|
788 | - removed debug print statement that caused problems on GAE and mod_wsgi |
---|
789 | |
---|
790 | ## 1.94.3 |
---|
791 | - fixed major bug in auth redirection |
---|
792 | |
---|
793 | ## 1.94.2 |
---|
794 | - reverted wrong behavior of auth.requires(condition) in 1.94.1 |
---|
795 | |
---|
796 | ## 1.94.1 |
---|
797 | - moderniz 1.17 |
---|
798 | - web2py no longer saves session if no change, this makes it up up to 10x faster for simple actions |
---|
799 | - experimental REST API |
---|
800 | - better support for MSSQL NOT NULL |
---|
801 | - small bug fixes |
---|
802 | |
---|
803 | ## 1.93.1-2 |
---|
804 | - support for multiple interfaces, thanks Jonathan |
---|
805 | - jquery 1.5.1 |
---|
806 | - simplejson 2.1.3 |
---|
807 | - customizable simplejson |
---|
808 | - leaner app.yaml |
---|
809 | - css3 buttons in welcome |
---|
810 | - android support (experimental) |
---|
811 | - Field(':hidden'), Field('.readonly'), Field('name=value') |
---|
812 | - combined expressions print db.data.body.len().sum() |
---|
813 | - wizard can download plugins |
---|
814 | - better json serilization (object.custom_json) |
---|
815 | - better xml serialization (object.custom_xml) |
---|
816 | - better formstyle support |
---|
817 | - better comet_messaging.py (needs more testing) |
---|
818 | - many bug fixes |
---|
819 | |
---|
820 | ## 1.92.1 |
---|
821 | - much improved routing (thanks Jonathan) |
---|
822 | - Expression.__mod__ (thanks Denes) |
---|
823 | - admin has MULTI_USER_MODE (admin/models/0.py) |
---|
824 | - support for count(distinct=...) |
---|
825 | - has_permissions(...,group_id) |
---|
826 | - IS_MATCH(...,strict=True) |
---|
827 | - URL(...,scheme=,host=,port=), thanks Jonathan |
---|
828 | - admin in Afrikaans, thanks Caleb |
---|
829 | - auth.signature (experimental) |
---|
830 | - many other bug fixes |
---|
831 | |
---|
832 | ## 1.91.6 |
---|
833 | - web2py comet via gluon/contrib/comet_messaging.py (html5 websockets) experimental |
---|
834 | - fixed problem with services (broken in 1.91.5), thanks Vollrath |
---|
835 | - customizable uploadwidget, thanks Fran |
---|
836 | - fixed problem with mail unicode support, thanks Richard |
---|
837 | - fixed problem with linkto=None and references fields in SQLTABLE, thanks villas |
---|
838 | - no more upgrade button on windows since does not work |
---|
839 | - better remember-me login, thanks Martin Weissenboeck |
---|
840 | - support for recatcha options |
---|
841 | - support for GAE namespaces via DAL('gae://namespace') |
---|
842 | - new rocket (1.2.2), thanks Tim |
---|
843 | - many other bug fixes and improvements (thanks Jonathan) |
---|
844 | |
---|
845 | ## 1.91.2-1.91.5 |
---|
846 | - fixed a problem with deplyment on GAE |
---|
847 | - other new dal bug fixes |
---|
848 | |
---|
849 | ## 1.91.1 |
---|
850 | - LICENSE CHANGE FROM GPLv2 to LGPLv3 |
---|
851 | - URL(...,hash_vars=...) allows to specify which vars need to be signed |
---|
852 | - fixed bug with aliasing in new DAL |
---|
853 | |
---|
854 | ## 1.90.6 |
---|
855 | - fix issue with pickling new dal Row and Rows. |
---|
856 | |
---|
857 | ## 1.90.5 |
---|
858 | - set poll = False in rocket because of poll python thread bug often unfixed, thanks Jonathan |
---|
859 | - fixes issue with crud and reCaptcha |
---|
860 | |
---|
861 | ## 1.90.2-4 |
---|
862 | - pymysql no longer requires ssl (if not used) |
---|
863 | - fixed bug with virtualfields |
---|
864 | - fixed bug in truncate (new dal) |
---|
865 | - fixed bug in select with alternate primary key (new dal) |
---|
866 | - fixed bug with IS_IN_DB and self refences (also new dal) |
---|
867 | |
---|
868 | ## 1.90.1 |
---|
869 | - new DAL (complete rewrite of the web2py DAL is more modular) |
---|
870 | - rewrite has fail safe reload, thanks Jonathan |
---|
871 | - better CAS with v2 support, thanks Olivier ROCH VILATO |
---|
872 | - better markmin2latex |
---|
873 | - session.connect(separate=True) to handle many session files, thanks huaiyu wang |
---|
874 | - changed bahvior of impersonate (more secure, can generate form or used as API) |
---|
875 | - new rocket, thanks Tim |
---|
876 | - new pyfpdf |
---|
877 | - no more old style classes |
---|
878 | - experimental couchdb support in new dal (only insert, select, update by id) |
---|
879 | - mysql support out of the box via pymysql |
---|
880 | - SQLITABLE(...,headers='labels') thanks Bruno |
---|
881 | - optional: digitally signed URLs, thanks Brian Meredyk |
---|
882 | - minor bug fixes |
---|
883 | |
---|
884 | ## 1.89.1-.5 |
---|
885 | - new admin layout (thanks Branko Vukelic) |
---|
886 | - new admin search |
---|
887 | - new admin language selector (thanks Yair) |
---|
888 | - new Welcome app (thanks Martin Mulone) |
---|
889 | - better wizard |
---|
890 | - admin support for DEMO_MODE=True |
---|
891 | - admin exposes GAE deployment button (always) |
---|
892 | - MENU support None links (thanks Michael Wolfe) |
---|
893 | - web2py.py -J for running cron (thanks Jonathan Lundell) |
---|
894 | - fixed ~db.table.id on GAE (thanks MicLee) |
---|
895 | - service.jsonrpc supports service.JsonRpcException (thanks Matt) |
---|
896 | - bug fixes |
---|
897 | |
---|
898 | ## 1.88.1-2 |
---|
899 | - better list: string support, thanks Bob |
---|
900 | - jquery 1.4.3 |
---|
901 | - scripts/autoroutes.py |
---|
902 | - new admin wizard |
---|
903 | - added retrieve_username to navbar (if username) |
---|
904 | - internal rewrite for arbitrary paths (abspath), thanks Jonathan |
---|
905 | - populate support for list: and decimal, thanks Chirstian |
---|
906 | - markmin2latex has extra attribute |
---|
907 | - better mercual admin allows list of files, versions and retrieve |
---|
908 | - new error report system, thanks Thadeus and Selecta |
---|
909 | - SQLFORM.accepts(detect_record_change).record_changed |
---|
910 | - fixed cron for bytecode compiled apps, thanks Álvaro J. Iradier Muro |
---|
911 | - other bugs fixes and pep8 compliant fixes |
---|
912 | |
---|
913 | ## 1.87.3 |
---|
914 | - fixed a major bug introduced in 1.87.1 that prevents appadmin from working for new apps created with 1.87.1-2. |
---|
915 | - upgraded to clockpick 1.28, thanks villas |
---|
916 | |
---|
917 | ## 1.87.1-2 |
---|
918 | - new layout for examples, thanks Bruno and Martin |
---|
919 | - admin allow ``DEMO_MODE=True`` and ``FILTER_APPS=['welcome']`` |
---|
920 | - fixed a possible problem with CRON and paths |
---|
921 | |
---|
922 | |
---|
923 | ## 1.86.3 |
---|
924 | - Error reporting on save, thanks Mariano |
---|
925 | recalled |
---|
926 | |
---|
927 | ## 1.86.1-1.86.3 |
---|
928 | - markmin2latex |
---|
929 | - markmin2pdf |
---|
930 | - fixed some bugs |
---|
931 | - Storage getfirst, getlast, getall by Kevin and Nathan |
---|
932 | - db(db.table), db(db.table.id) both suported and equivalent to db(db.table.id>0) |
---|
933 | - postresql ssl support |
---|
934 | - less un-necessary logging and warnings on GAE |
---|
935 | - IS_DECIMAL_IN_RANGE and IS_FLOAT_IN_RANGE support dot="," (dot="." is default) |
---|
936 | - on_failed_authorization can be a function, thanks Niphold |
---|
937 | - gluon/contrib/login_methods/cas_auth.py for integration between CAS and Auth. |
---|
938 | |
---|
939 | ## 1.85.1-3 |
---|
940 | - fixed some bugs |
---|
941 | - added pyfpdf, thank Mariano |
---|
942 | |
---|
943 | ## 1.84.1-4 |
---|
944 | - flash now stays put in the top right corner |
---|
945 | - improved behavior for URL and T objects |
---|
946 | - new app level logging with logging.conf (thanks Jonathan) |
---|
947 | - improved OpenID (thanks Michele) |
---|
948 | - web2py_ajax handles prepend, append, hide (thanks Juris) |
---|
949 | - web2py_ajax also handels pre-validation of decimal fields |
---|
950 | - ru-ru translation (thanks Michele) |
---|
951 | - sk-sk translation (thanks Julius) |
---|
952 | - migrations save .table only if changed and after each ALTER TABLE (no more mysql inconsistencies) |
---|
953 | - fixed bugs in SQLCustomField, Field(default=...), IS_IMAGE, IS_DECIMAL_IN_RANGE and a few more. |
---|
954 | - Better validators (IS_DECIMAL_IN_RANGE, IS_INT_IN_RANGE, etc) thanks Jonatham |
---|
955 | - Polymmodel support on GAE |
---|
956 | - Experimental ListWidget |
---|
957 | - moved DAL and routes to thread.local (thanks Jonathan, again) |
---|
958 | - scripts/extract_mysql_models.py, thanks Falko Krause and Ron McOuat |
---|
959 | - scripts/dbsessions2trash.py, thanks Scott |
---|
960 | |
---|
961 | ## 1.83.2 |
---|
962 | - mostly cleanup |
---|
963 | |
---|
964 | ## 1.83.1 |
---|
965 | - New error reporting mechanism (thanks Mariano) |
---|
966 | - New routing system with app level routing (thanks Jonathan) |
---|
967 | - Integrated GAE appstat and GAE precompilation (thanks Scott) |
---|
968 | - New Field types "list:string", "list:integer", "list:reference" |
---|
969 | - request.cid, request.ajax, A(cid=request.cid), response.js |
---|
970 | |
---|
971 | ## 1.82.1 |
---|
972 | - request.ajax to detect if action is called via ajax, tahnks Jonathan and David Mako |
---|
973 | - more captcha options, thanks Vidul |
---|
974 | - openid and oauth2 thanks Michele and Keith |
---|
975 | - better PluginManager and load components |
---|
976 | - new template system, thanks Thadeus |
---|
977 | - new db.table(id,[field=value]) and db.table(query) syntax |
---|
978 | - URL('index') (no more r=request), thanks Thadeus |
---|
979 | - mail.send(message='<html>...</html>', ....) |
---|
980 | - DAL([....]) for load balancing |
---|
981 | - @service.soap(...) with mysimplesoap, thanks Mariano |
---|
982 | - hideerror |
---|
983 | |
---|
984 | ## 1.81.5 |
---|
985 | - Fixed a few bugs. The most important bugs we fixed are in memcache (thanks Scott) and in a process starvation issue with Rocket (thanks Mike Ellis and Tim). |
---|
986 | |
---|
987 | ## 1.81.4 |
---|
988 | - Fixed gluon.tools to work work with load and base.css to nowrap labels |
---|
989 | |
---|
990 | ## 1.81.3 |
---|
991 | - fixed bug in label names in formstyle |
---|
992 | - fixed id names in admin test.html page |
---|
993 | |
---|
994 | ## 1.81.2 |
---|
995 | - fixed bug in Auth |
---|
996 | |
---|
997 | ## 1.81.1 |
---|
998 | - rpx (janrain) support out of the box, allows login with Facebook, MySpace, etc. Thanks Mr Freeze |
---|
999 | - Increased security (escape single and double quotes, thanks Craig" |
---|
1000 | - Fixed a bug with db.table.field.uploadseparate=True and autodelete |
---|
1001 | - New welcome app with superfish and jQuery 1.4.2 |
---|
1002 | - Deleted openwysiwyg from admin |
---|
1003 | - In XML and xmlescape quote defaults to True. Both ' and " are escaped. Thanks Craig Younkins |
---|
1004 | |
---|
1005 | ## 1.80.1 |
---|
1006 | - MARKMIN helper (no backward compatibility promise yet) |
---|
1007 | - self._last_reference, thanks Dave (no backward compatibility promise yet) |
---|
1008 | - IS_EQUAL_TO |
---|
1009 | - zh-tw and better internationalization page, thanks Daniel Lin and Iceberg |
---|
1010 | - better crud.search, thanks MrFreeze |
---|
1011 | - Rocket interfaces, thanks Nik Klever |
---|
1012 | - db.table.field.uploadseparate=True, thanks Gyuris |
---|
1013 | - SCOPE_IDENITY for MSSQL, thanks Jose |
---|
1014 | - fixed email attachment issue, thanks Bob_in_Comox |
---|
1015 | - fixed problem with groupby and IS_IN_DB |
---|
1016 | - other bug fixes |
---|
1017 | - new implementation for local_import |
---|
1018 | - ajax(..,...,null) |
---|
1019 | - fixed Chrome bug in calendar.js, thanks Iceberg |
---|
1020 | - experimental scrips/web2py-setup-fedora.sh |
---|
1021 | - generic.load, thanks Iceberg |
---|
1022 | |
---|
1023 | ## 1.79.2 |
---|
1024 | - solved simplejson imcompatibility problem |
---|
1025 | |
---|
1026 | ## 1.79.1 |
---|
1027 | - x509 emails, thanks Gyuris |
---|
1028 | - attachment and html in Mail on GAE, thanks PanosJee |
---|
1029 | - fixed docstring in SQLTABLE, thanks aabelyakov |
---|
1030 | - TAG(html) parese html into helpers (experimental, still some problems with unicode, , thanks RobertVa for unicode help) |
---|
1031 | - DIV.elements(find=re.compile(....)) |
---|
1032 | - DIV.flatten() |
---|
1033 | - DIV.elements('....') supports jQuery syntax in '....' |
---|
1034 | - better it-it.py and it.py, thanks Marcello Della Longa |
---|
1035 | - Many Bug fixes: |
---|
1036 | - improved support for DAL and joins in postgresql/oracle, thanks Nico de Groot |
---|
1037 | - bux fixex in html.py, thanks Ian |
---|
1038 | - fixed an issue with registration_key==None, thanks Jay Kelkar |
---|
1039 | - fixed bug in gql.py, thanks NoNoNo |
---|
1040 | - fixed problem with multiple and checkboxes, thanks MIchael Howden |
---|
1041 | - fixed bug in gae, thanks NoNoNo |
---|
1042 | - restored 2.4 compatibility, thanks Paolo Gasparello |
---|
1043 | - auth.update() when pictures in profile |
---|
1044 | - formstyle can be a function, thanks Howden |
---|
1045 | - escape in sanitizer, thanks Howes |
---|
1046 | - add missing settings, thanks Hamdy |
---|
1047 | - find and exclude return empty Rows instead of [], thanks iceberg |
---|
1048 | - simplejson 2.1.1 should fix compatibility problems |
---|
1049 | - added sms_utils and Authorize.net in contrib |
---|
1050 | |
---|
1051 | ## 1.78.3 |
---|
1052 | - reverted temporarily to old template system because of backward compatibility issues |
---|
1053 | |
---|
1054 | ## 1.78.1 |
---|
1055 | - new template system allows {{block name}}{{end}}, thanks Thadeus |
---|
1056 | - fixed mime headers in emails, included PGP in emails, thanks Gyuris |
---|
1057 | - automatic database retry connect when pooling and lost connections |
---|
1058 | - OPTGROUP helper, thanks Iceberg |
---|
1059 | - web2py_ajax_trap captures all form submissions, thank you Skiros |
---|
1060 | - multicolumn checkwidget and arbitrary chars in multiple is_in_set, thanks hy |
---|
1061 | - Québécois for welcome, thanks Chris |
---|
1062 | - crud.search(), thanks Mr Freeze |
---|
1063 | - DAL(...migrate,fake_migrate), thanks Thadeus |
---|
1064 | |
---|
1065 | ## 1.77.3 |
---|
1066 | - some cleanup of code in compileapp |
---|
1067 | |
---|
1068 | ## 1.77.2 |
---|
1069 | - fixed x-index in calendar |
---|
1070 | ## 1.77.1 |
---|
1071 | - Replaced CherryPy with Rocket web server, thanks Tim |
---|
1072 | - CacheOnDisk allows to specify a folder |
---|
1073 | - IS_DATE/DATETIME can handle any year since 0 |
---|
1074 | - SQLTABLE(...,headers='fieldname:capitalize') |
---|
1075 | - Field().with_alias, thanks Nathan and Mengu |
---|
1076 | - has_membership(group=...,role=...), thank Jonathan |
---|
1077 | - db.define_table(username=True), thanks Jonathan |
---|
1078 | - gluon.tools.prettydate |
---|
1079 | - can specify hostname in routes_out (same syntax as routes in), thanks Martin |
---|
1080 | - db.table.bulk_insert([...records...]) now works on GAE, thanks Jon |
---|
1081 | - IS_EMAIL validates on 'localhost', thanks Jonathan |
---|
1082 | - welcome/views/layout.html uses ez.css, thanks Yarko |
---|
1083 | - mail attachments support utf8, thanks szimszon |
---|
1084 | - works with PyPy, thanks Joe |
---|
1085 | - better Firebird support, thanks Jose |
---|
1086 | - better Oracle support, thanks Gabriele |
---|
1087 | - cron supports days of week |
---|
1088 | - SQLFORM(...,formstyle="table3cols") or "table2cols" or "divs" or "ul" |
---|
1089 | - crud.settings.formstyle |
---|
1090 | - web2py.py -f folder allows to specify locations of applications, thanks Iceberg |
---|
1091 | - better/faster regex in template works in Jython |
---|
1092 | - fixed lots of small bugs |
---|
1093 | |
---|
1094 | ## 1.76.5 |
---|
1095 | - Fixed a typo in auth that created some registration problems |
---|
1096 | |
---|
1097 | ## 1.76.4 |
---|
1098 | - SQLTABLE(db(db.auth_user.id>0).select(),headers='fieldname:capitalize') |
---|
1099 | - Oracle limitby improved (thanks Sergey) |
---|
1100 | - fixed migrations in Firebird, thanks Jose Jachuf |
---|
1101 | - gluon/contrib/login_methods/linkedin_account.py (to be tested) |
---|
1102 | |
---|
1103 | ## 1.76.2-1.76.3 |
---|
1104 | - major fix in cron (will I ever get this 100% right?) |
---|
1105 | - fix in delete for GAE |
---|
1106 | - auth.settings.login_captcha and auth.settings.register_captcha |
---|
1107 | - crud.settings.create_captcha and crud.settings.update_captcha |
---|
1108 | - automatic update button in admin |
---|
1109 | |
---|
1110 | ## 1.76.1 |
---|
1111 | - editarea 0.8.2 + zencoding |
---|
1112 | - new (better) cron locking meachnism |
---|
1113 | - no storing session cookies on session.forget(), thank you Alvaro |
---|
1114 | - routes_apps_raw allows disabling of request.args validation, thanks Jonathan and Denes |
---|
1115 | - fixed problem with edit_languages ad multiple tabs, thanks Iceberg |
---|
1116 | - crud captcha, thanks you Nathan |
---|
1117 | - softcron disabled by default in wsgihandler and fcgihandler |
---|
1118 | |
---|
1119 | ## 1.75.5 |
---|
1120 | - fixed behaviour with languages.py, thanks Iceberg |
---|
1121 | - added chinese (thanks Iceberg) and Hungarian (thanks Gyuris) |
---|
1122 | - fixed problem with GAE deleted by id (thanks what_ho) |
---|
1123 | - fixed bug in LOAD with custom views, thanks vhang |
---|
1124 | - improved IS_IN_SET takes iterator, dict, list and list of tuples, thanks Iceberg |
---|
1125 | - Auth(...,controller='default') |
---|
1126 | - Fixed major bug in parsing repeated request.vars, thanks Ben |
---|
1127 | - IS_DATE and IS_DATETIME can now handle any 0<year |
---|
1128 | - allow to disable editarea onload, thanks Alex |
---|
1129 | |
---|
1130 | ## 1.75.4 |
---|
1131 | - customizable BEAUTIFY, thanks John |
---|
1132 | |
---|
1133 | ## 1.75.3 |
---|
1134 | - added support for PAM authentican for apps and for admin |
---|
1135 | - INTRODUCED MAJOR BUG IN BEAUTIFY (upgrade to 1.75.4) IMMEDIATELY |
---|
1136 | |
---|
1137 | ## 1.75.2 |
---|
1138 | - fetch supports cache |
---|
1139 | - curd.update(....,onaccept=crud.archive) magic |
---|
1140 | - new UUID mechnism fixes session conflicts with cloned machine in cloud |
---|
1141 | - allow to upload app and overwrite existing old ones, thanks Jonathan |
---|
1142 | - print gluon.tools.prettydate(request.now,T), thanks Richard |
---|
1143 | |
---|
1144 | ## 1.75.1 |
---|
1145 | - better cron |
---|
1146 | - better fetch |
---|
1147 | - logging of email failures |
---|
1148 | - new web2py.fedora.sh |
---|
1149 | - new setup-web2py-ubuntu.sh |
---|
1150 | - experimental autocomplete |
---|
1151 | - menus work on IE6 |
---|
1152 | |
---|
1153 | ## 1.74.9 |
---|
1154 | - IS_IN_SET(((0,'label0'),(1,'label1'))), thanks Falko Krause |
---|
1155 | - SQLFORM(...).accpets stores True or False in boolean types no None, thanks Frederik Wagner |
---|
1156 | - SQLFORM.factory(...,table_name='no_table'), thanks Thedeus |
---|
1157 | - jQuery 1.4.1 |
---|
1158 | - Fixed major problem with internationalization of multiple languages. |
---|
1159 | - Fixed a serius security issue with login |
---|
1160 | - Possibly fixed some issues with cron |
---|
1161 | |
---|
1162 | ## 1.74.8 |
---|
1163 | - IS_SLUG, thanks Gustavo and Jonathan |
---|
1164 | - web2py.py -nogui, thanks Jeff Bauer |
---|
1165 | - solved a problem with jython, thanks Tim Farrel |
---|
1166 | - login has "remember be option", thanks Piotr Banasziewicz |
---|
1167 | - fixed problem with keepvalue in update forms, thanks Miguel Lopez |
---|
1168 | |
---|
1169 | ## 1.74.7 |
---|
1170 | - request_password_reset and password reset verification |
---|
1171 | - python web2py.py -S app -M -R script.py -A arg1 arg2 arg3 |
---|
1172 | - T("%(a)s") % dict(a="hello") |
---|
1173 | |
---|
1174 | ## 1.74.6 |
---|
1175 | - bug fixes |
---|
1176 | - IS_IN_DB(...,_and=IS_NOT_IN_DB) |
---|
1177 | - Smaller populate, thanks Piotr |
---|
1178 | - better slicing of fields, thanks Michael Fig |
---|
1179 | - Cache stats, thanks Thadeus |
---|
1180 | - Better gql.py |
---|
1181 | - IS_IN_DB and IS_IN_SET default to zero='', no longer zero=None |
---|
1182 | |
---|
1183 | ## 1.74.5 |
---|
1184 | - bug fixes |
---|
1185 | - restored python 2.4 support,thanks ont.rif |
---|
1186 | - support for native types on Google App Engine |
---|
1187 | - cache.ram usage statictics, thanks Thadus |
---|
1188 | - no more auth manu in scaffolding |
---|
1189 | - no more spash screen with -Q |
---|
1190 | - fixed doctest in html.py, thanks Anand Vaidya |
---|
1191 | - export_to_csv_file has represent, thanks Thadeus |
---|
1192 | |
---|
1193 | ## 1.74.2-4 |
---|
1194 | - Fix bugs including including unicode in emails and blobs on GAE |
---|
1195 | |
---|
1196 | ## 1.74.1 |
---|
1197 | - Moved to mercurial |
---|
1198 | - Default validators use the new define_table(....,format='...') |
---|
1199 | - New get_vars and post_vars compatible in 2.5 and 2.6 (thanks Tim) |
---|
1200 | - Major rewrite of gql.py extends DAL syntax on GAE |
---|
1201 | - No more *.w2p, welcome.w2p is create automatically, base apps are always upgraded |
---|
1202 | - export_to_csv(delimiter = ',', quotechar = '"', quoting = csv.QUOTE_MINIMAL), thanks Thadeus |
---|
1203 | |
---|
1204 | ## 1.73.1 |
---|
1205 | - Fixed problem with storage and comparison of Row objects |
---|
1206 | - Fixed problem with mail on GAE |
---|
1207 | - Fixed problem with T in IS_DATE(TIME) error_message and format |
---|
1208 | - Rows[i].delete_record() |
---|
1209 | - Even better support for legacy databases |
---|
1210 | - Experimantal support for non UTF8 encoding in DB |
---|
1211 | - Better IPV4 (thanks Thandeus) |
---|
1212 | - T.current_languages default to 'en' and new T.set_current_languages(...) (thanks Yarko) |
---|
1213 | - INPUT(...,hideerror=False) used to fix rare chechbox widget problem |
---|
1214 | - Admin allows change of admin password |
---|
1215 | - New gluon/contrib/populate.py |
---|
1216 | - Size of input/textarea set by CSS no more by jQuery (thanks Iceberg) |
---|
1217 | - Customizable CSV (thanks Thandeus) |
---|
1218 | - More bug fixed (thanks Thandeus) |
---|
1219 | - Better regex for template fixed Jython problem (thank Jonathan) |
---|
1220 | |
---|
1221 | ## 1.72.1 - 1.72.3 |
---|
1222 | - Better support for legacy databases |
---|
1223 | |
---|
1224 | ## 1.71.1 |
---|
1225 | - Complete rewrite of Rows |
---|
1226 | - renamed DALStorage->Rows, DALRef->Reference |
---|
1227 | - Experimental serializarion of Row and Rows (get serialized to dict and list of dict) |
---|
1228 | - DAL(...,folder) and template.render(content=, context=) make it more modular |
---|
1229 | |
---|
1230 | ## 1.70.1 |
---|
1231 | - Fixed bug with Rows.as_list and DALRef |
---|
1232 | - Added Rows.as_dict (thanks Mr Freeze and Thedeus) |
---|
1233 | - Added request.wsgi (thanks hcvst) allows running wsgi apps under web2py and applying wegi middleware to regular web2py actions that return strings. |
---|
1234 | - Experimental distributed transactions between postgresql, mysql and firebird |
---|
1235 | - Finally local_import is here! |
---|
1236 | |
---|
1237 | ## 1.69.1 |
---|
1238 | - Fixed a bug introduced in 1.68 about inserting unicode in DAL |
---|
1239 | - Fixed other small bugs |
---|
1240 | - Better support for legacy databases (thank Denes) |
---|
1241 | - response.meta replaces response.author, response.keywords, response.description |
---|
1242 | - response.files stets dependes in plugins |
---|
1243 | - better admin for packing/unpacking plugins |
---|
1244 | - reference fiels nor evaluate to DALRef with lazy evaluation (cool, thanks Mr Freeze) |
---|
1245 | - can insert a record in place of a reference |
---|
1246 | - record[e] instead of record._extra[e] (tentatively!) |
---|
1247 | - record.update_record() with no args |
---|
1248 | - rows.find() (thanks Mr Freeze) |
---|
1249 | - rows.exclude() |
---|
1250 | - rows.sort() |
---|
1251 | - rows[:] |
---|
1252 | |
---|
1253 | ## 1.68.2 |
---|
1254 | - Fixing bug with admin and missing crontab |
---|
1255 | - Fixing bug with rewrite.load on GAE (thanks Willian Wang) |
---|
1256 | |
---|
1257 | ## 1.68.1 |
---|
1258 | - New official markdown with security fix |
---|
1259 | - rows.first() |
---|
1260 | - rows.last() |
---|
1261 | - New cron |
---|
1262 | - New hindi and spanish translation |
---|
1263 | - cached uploads allow for progress bars (thanks AndCycle) |
---|
1264 | - ingres support (thanks Chris) |
---|
1265 | - legacy database support for db2, mssql with non-int primary keys (thanks Denes) |
---|
1266 | - default setting of content-type (this may cause strange behavior in old apps when downloading images) |
---|
1267 | - IS_UPPER and IS_LOWER works with unicode |
---|
1268 | - CLENUP not takes regex of allowed/now allowed chartares |
---|
1269 | - New rewrite.py allows dynamic routes |
---|
1270 | - Better error messages for IS_INT_* and IS_FLOAT_* |
---|
1271 | |
---|
1272 | ## 1.67.2 |
---|
1273 | - Security fix in markdown |
---|
1274 | |
---|
1275 | ## 1.67.1 |
---|
1276 | - Bux fixed |
---|
1277 | |
---|
1278 | ## 1.67.0 |
---|
1279 | - Python 2.4 support (again) |
---|
1280 | - New layout for welcome |
---|
1281 | - changed defauld field sizes to 512 |
---|
1282 | - Field(uploadfolder="...") |
---|
1283 | - appadmin works on GAE (again, somehting got broken at some point) |
---|
1284 | - new wsgiserver 3.2.0 should fix recurrent broken download problems |
---|
1285 | |
---|
1286 | ## 1.66 |
---|
1287 | - new doctypes |
---|
1288 | - form.vars.newfilename |
---|
1289 | - new HTML and XHTML helpers |
---|
1290 | - better IS_LENGTH |
---|
1291 | |
---|
1292 | ## 1.65.13 |
---|
1293 | - request.url (thanks Jonathan) |
---|
1294 | - restored uploadfield_newfilename |
---|
1295 | - new examples layout nad logo (thanks Mateusz) |
---|
1296 | |
---|
1297 | ## 1.65.12 |
---|
1298 | - lables in auth auto-translate (thanks Alvaro) |
---|
1299 | - better ldap_auth (thanks Fran) |
---|
1300 | - auth chacks locally for blocked accounts even for alternate login methods (thanks Fran) |
---|
1301 | |
---|
1302 | ## 1.65.11 |
---|
1303 | - Fixed a sqlhtml bug with image upload |
---|
1304 | |
---|
1305 | ## 1.65.3-10 |
---|
1306 | - Fixed some small bugs and typos in the docstrings |
---|
1307 | - Fixed AMF3 support |
---|
1308 | |
---|
1309 | ## 1.65.2 |
---|
1310 | - Fixed some small auth bugs |
---|
1311 | - Field.store(...) |
---|
1312 | |
---|
1313 | ## 1.65.1 |
---|
1314 | - spreadsheet |
---|
1315 | - shell history, thanks sherdim |
---|
1316 | - crontab editor, thanks Angelo |
---|
1317 | - gluon/contrib/login_methods/cas_auth.py (thanks Hans) |
---|
1318 | - DAL(...) instead of SQLDB(...) |
---|
1319 | - DAL('gae') instead of GQLDB() |
---|
1320 | - Field instead of SQLField |
---|
1321 | - (the old syntax still works) |
---|
1322 | |
---|
1323 | ## 1.65 |
---|
1324 | - reST docstrings for Sphinx, thanks Hans |
---|
1325 | - gluon/conrtib/login_methods/gae_google_account.py for google CAS login on GAE, thanks Hans |
---|
1326 | - fixed problem with Auth and Firebird 'password' issue |
---|
1327 | - new auth.settings.create_user_groups |
---|
1328 | - tickets stored on datastore on GAE and also logged, thanks Hans |
---|
1329 | - imporved IS_LENGTH with max and min, thanks Mateusz |
---|
1330 | - improved IS_EMAIL with filters, thanks Mateusz |
---|
1331 | - new IS_IMAGE checks for format and size, thanks Mateusz |
---|
1332 | - new IS_IPV4, thanks Mateusz |
---|
1333 | |
---|
1334 | ## 1.64.4 |
---|
1335 | - Som bug fixes |
---|
1336 | - Informix Support |
---|
1337 | - response.render(stream) |
---|
1338 | - SQLFORM.factory |
---|
1339 | - SQLFORM.widgets.radio and SQLFORM.widgets.checkboxes |
---|
1340 | |
---|
1341 | ## 1.64.3 |
---|
1342 | - Some bug fixes |
---|
1343 | |
---|
1344 | ## 1.64.2 |
---|
1345 | - New IS_COMPLEX validator, thank Mr. Freeze |
---|
1346 | - Experimental Informix support |
---|
1347 | - Autologin on registration |
---|
1348 | |
---|
1349 | ## 1.64 |
---|
1350 | - Models 2-3 times faster (thanks Alexey) |
---|
1351 | - Better LDAP support |
---|
1352 | - Works with Jython (including sqlite and postgresql with zxJDBC): |
---|
1353 | |
---|
1354 | - download jython-2.5rc3.jar |
---|
1355 | - download qlite-jdbc-3.6.14.2.jar |
---|
1356 | - java -jar jython-xxx.jar |
---|
1357 | - export CLASSPATH=$CLASSPATH:/Users/mdipierro/jython2.5rc3/sqlite-jdbc-3.6.14.2.jar |
---|
1358 | - cd web2py |
---|
1359 | - ../jython2.5rc3/jython web2py.py |
---|
1360 | |
---|
1361 | ## 1.63.5 |
---|
1362 | - You can do jQuery.noConflict() without breaking web2py_ajax |
---|
1363 | - Wigets can have attributes (thanks Hans) |
---|
1364 | - Lots of internal cleanup and better code reusage (thanks Hans) |
---|
1365 | |
---|
1366 | ## 1.63-1.63.4 |
---|
1367 | - no more import gluon. |
---|
1368 | - support for generic.xxx |
---|
1369 | - simplejson can handle datetime date and time |
---|
1370 | |
---|
1371 | ## 1.62 |
---|
1372 | - SQLFORMS and crud now show readble fields |
---|
1373 | - Better WingIDE support |
---|
1374 | - Languages are automatically translated |
---|
1375 | - T.force and lazyT works better, optional T.lazy=False |
---|
1376 | - gluon.storage.Messages are now translated without T |
---|
1377 | - if routes.py then request.env.web2py_original_uri |
---|
1378 | - db.table.field.isattachment = True |
---|
1379 | - internationalizaiton of admin by Yair |
---|
1380 | - admin.py by Alvaro |
---|
1381 | - new MENU helper |
---|
1382 | - new w2p file format |
---|
1383 | - new welcome app with auth, service and crud turned on |
---|
1384 | |
---|
1385 | ## 1.61 |
---|
1386 | - fixed some typos |
---|
1387 | - auth.add_permissions(0,....) 0 indicates group of current user |
---|
1388 | - crud.update has deletable=True or False |
---|
1389 | - fixed issue with GAE detection -> gluon.settings.web2py_runtime -> request |
---|
1390 | |
---|
1391 | ## 1.59-1.60 |
---|
1392 | - fixed lots of small bugs |
---|
1393 | - routes_in can filter by http_host |
---|
1394 | |
---|
1395 | ## 1.58 |
---|
1396 | - Fixed some CRON bugs |
---|
1397 | - Fixed a bug with new ajax edit |
---|
1398 | - Experimental DB2 support in DAL |
---|
1399 | - Customizable font size in admin edit page |
---|
1400 | - New welcome/models/db.py shows how to memcache sessions on GAE with MEMDB |
---|
1401 | - More expressive titles in admin |
---|
1402 | - DB2 support. Thanks Denes! |
---|
1403 | |
---|
1404 | ## 1.57 |
---|
1405 | - New ajax edit with keepalive (no longer logged out when editing code) |
---|
1406 | - Fixed conflict resolution page. |
---|
1407 | - Removed /user/bin/python from models/controllers |
---|
1408 | |
---|
1409 | ## 1.56.1-1.56.4 |
---|
1410 | - fixing lots of small bugs with tool and languages |
---|
1411 | - jquery.1.3.2 |
---|
1412 | |
---|
1413 | ## |
---|
1414 | |
---|
1415 | - One more feature in trunk.... |
---|
1416 | |
---|
1417 | - db.define_table('image',SQLField('file','upload')) |
---|
1418 | |
---|
1419 | - db.image.file.authorize=lambda row: True or False |
---|
1420 | |
---|
1421 | - then controller |
---|
1422 | - def download(): return response.download(request,db) |
---|
1423 | - id' is now a hidden field sqlform |
---|
1424 | - gql references converted to long |
---|
1425 | - admin login has autofocus |
---|
1426 | - new notation proposed by Robin, db.table[id] |
---|
1427 | - new UploadWidget shows images |
---|
1428 | - new generic.html shows request, response, session |
---|
1429 | - new LEGEND helper (thanks Marcus) |
---|
1430 | - fixed doctests in sql (thanks Robin) |
---|
1431 | - new notation for DB |
---|
1432 | |
---|
1433 | - record=db.table[id] |
---|
1434 | - db.table[id]=dict(...) |
---|
1435 | - del db.table[id] |
---|
1436 | |
---|
1437 | - request.env.web2py_version |
---|
1438 | - new class gluon.storage.Settings has lock_keys, lock_values |
---|
1439 | - jquery 1.3.1 |
---|
1440 | - PEP8 compliance |
---|
1441 | - new examples application |
---|
1442 | - runs on jython (no database drivers yet, thanks Phyo) |
---|
1443 | - fixed bugs in tests |
---|
1444 | - passes all unittest but test_rewite (not sure it should pass that one) |
---|
1445 | |
---|
1446 | - Lots of patches from Fran Boone (about tools) and Dougla Soares de Andarde (Python 2.6 compliance, user use of hashlib instead of md5, new markdown2.py) |
---|
1447 | - db.define_table('mytable',db.Field('somefield'),timestamp) |
---|
1448 | Example: |
---|
1449 | `` |
---|
1450 | timestamp=SQLTable(None,'timestamp', |
---|
1451 | SQLField('created_on','datetime', |
---|
1452 | writable=False, |
---|
1453 | default=request.now), |
---|
1454 | SQLField('modified_on','datetime', |
---|
1455 | writable=False, |
---|
1456 | default=request.now,update=request.now)) |
---|
1457 | `` |
---|
1458 | and use it in all your tables |
---|
1459 | - form=SQLFORM(db.circle,request.args[-1]) |
---|
1460 | - and you get a create form if the URL ends in /0, you get an update |
---|
1461 | - form if the URL ends in /[valid_record_id] |
---|
1462 | make a display form in two possible ways: |
---|
1463 | - form=SQLFORM(db.circle,record,readonly=True) |
---|
1464 | - form=SQLFORM(db.circle,record_id,readonly=True) |
---|
1465 | make an update form in two possible ways: |
---|
1466 | - form=SQLFORM(db.circle,record) |
---|
1467 | - form=SQLFORM(db.circle,record_id) |
---|
1468 | make a create form in two possible ways: |
---|
1469 | - form=SQLFORM(db.circle) |
---|
1470 | - form=SQLFORM(db.circle,0) |
---|
1471 | make a form that automatically computes area |
---|
1472 | - pi=3.1415 |
---|
1473 | - form=SQLFOM(db.circle) |
---|
1474 | - if form.accepts(request.vars, |
---|
1475 | - onvalidation=lambda form: form.vars.area=pi*form.vars.radius**2): ... |
---|
1476 | make the radius appear in bold in display and table |
---|
1477 | - db.circle.radius.represent=lambda value: B(value) |
---|
1478 | automatically timestamp when record is modified |
---|
1479 | - db.circle.modified_on.update=request.now |
---|
1480 | automatically timestamp when record cretaed |
---|
1481 | - db.circle.modified_on.default=request.now |
---|
1482 | do not show now in display forms |
---|
1483 | - db.circle.modified_on.readable=False |
---|
1484 | do not show area in create/edit forms |
---|
1485 | - db.circle.area.writable=False |
---|
1486 | add a comment in the forms |
---|
1487 | - db.circle.area.comment="(this is a comment)" |
---|
1488 | |
---|
1489 | ## 1.56 |
---|
1490 | - Now you can do: |
---|
1491 | `` |
---|
1492 | db.define_table('cirlce', |
---|
1493 | db.Field('radius','double'), |
---|
1494 | db.Field('area','double'), |
---|
1495 | db.Field('modified_on','datetime')) |
---|
1496 | `` |
---|
1497 | |
---|
1498 | ## 1.55 |
---|
1499 | - rowcount |
---|
1500 | - fixed bug when IS_IN_DB involved multiple fields on GAE |
---|
1501 | - T.set_current_languages |
---|
1502 | - better unittests |
---|
1503 | - response.custom_commit and response.custom_rollback |
---|
1504 | - you can next cache calls (like cache a controller that caches a select). Thanks Iceberg |
---|
1505 | - db(....id==None).select() no longer returns an error but an empty SQLRows on GAE |
---|
1506 | - db(...).delete(delete_uploads=True) and SQLFORM.accepts(....delete_uploads=True) will delete all referenced uploaded files |
---|
1507 | - DIV.element and DIV.update |
---|
1508 | - sqlrows.json() |
---|
1509 | - SQLFORM.widgets |
---|
1510 | - URL(r=request,args=0) |
---|
1511 | - IS_IN_DB(...,multiple=True) for Many2Many (sort of) |
---|
1512 | - In URL(...,f) f is url encoded |
---|
1513 | - In routes_in=[['a/b/c/','a/b/c/?var=value']] |
---|
1514 | - simplejson 2.0.7 |
---|
1515 | |
---|
1516 | |
---|
1517 | ## 1.54 |
---|
1518 | - fixed minor bugs |
---|
1519 | |
---|
1520 | ## 1.53 |
---|
1521 | - On GAE upload data goes automatically in datastore (blob created automatically) |
---|
1522 | - New appadmin runs on GAE (most of it, not all) |
---|
1523 | - Martin Hufsky patch allow slicing of fields in DAL expressions |
---|
1524 | |
---|
1525 | ## 1.52 |
---|
1526 | - Fixed a minor bug with _extra[key] and key not str. |
---|
1527 | - check for upgrade via ajax |
---|
1528 | |
---|
1529 | ## 1.51 |
---|
1530 | - Fixed more bugs introduced in 1.49 (sql _extra and html select) |
---|
1531 | - support for sqlite:memory: |
---|
1532 | |
---|
1533 | ## 1.50 |
---|
1534 | - Fixed some bugs introduced in 1.49 |
---|
1535 | |
---|
1536 | ## 1.49 |
---|
1537 | - fixed a bug with taskbar widget, thanks Mark |
---|
1538 | - fixed a bug with form.latest |
---|
1539 | - made many DIV methods private (_) |
---|
1540 | |
---|
1541 | |
---|
1542 | ## 1.43-1.48 |
---|
1543 | - html.py rewrite (better support for custom forms) (Bill Ferrett) |
---|
1544 | - new stickers in examples (thanks Mateusz) |
---|
1545 | - on windows can run in taskbar (Mark Larsen) |
---|
1546 | - in admin|edit page link to edit|controller (Nathan Freeze) |
---|
1547 | - better error codes and routes_onerror (Timothy Farrell) |
---|
1548 | - DAL support for groupy and having |
---|
1549 | - DAL support for expressions instead of values |
---|
1550 | - DAL has experimental Informix support |
---|
1551 | - fixed bug with non-printable chars in DAL |
---|
1552 | - 'text' fields limited to 2**16 (to avoid mysql problems) |
---|
1553 | - widget has -quiet and -debug (Attila Csipa) |
---|
1554 | - web2py_session uses BLOB instead of TEXT |
---|
1555 | - improved IS_URL |
---|
1556 | - Runs with python 2.6 (Tim) |
---|
1557 | - On GAE uses GAE for static files (Robin) |
---|
1558 | |
---|
1559 | |
---|
1560 | ## 1.42 |
---|
1561 | - fixed security issue by removing slash escape in mysql |
---|
1562 | - removed random everywhere |
---|
1563 | - use uuid for session and tickets |
---|
1564 | - use http_x_forward_for to figure out the client causing a ticket |
---|
1565 | - use longtext and longblob for mysql |
---|
1566 | - main now really catches all exceptions |
---|
1567 | - no more warnings on GAE |
---|
1568 | |
---|
1569 | ## web2py 1.31-1.41 |
---|
1570 | - some bug fixes, mostly better appengine support |
---|
1571 | - mssql support |
---|
1572 | - firebird support |
---|
1573 | - widgets support |
---|
1574 | - connection pools |
---|
1575 | |
---|
1576 | ## web2py 1.30 |
---|
1577 | - added flv to contenttype |
---|
1578 | - added support for appengine |
---|
1579 | |
---|
1580 | ## web2py 1.29 |
---|
1581 | - Now selet mutliple works with get, so does is IS_LENGTH |
---|
1582 | - Added IS_LIST_OF |
---|
1583 | - fixed problem with admin from windows and localhost |
---|
1584 | |
---|
1585 | ## web2py 1.28 |
---|
1586 | - fixed bug with belongs, faster sql.py |
---|
1587 | - included jquery.js |
---|
1588 | - minor aestetical fixes |
---|
1589 | - sortable.js is gone |
---|
1590 | |
---|
1591 | ## web2py 1.27 |
---|
1592 | - IS_NULL_OR now works will all fields |
---|
1593 | - admin creates paths to static files |
---|
1594 | - wsgiserver options are passed to HttpServer |
---|
1595 | - faking limitby for oracle to make appadmin work |
---|
1596 | - all objects inherit from object |
---|
1597 | - fixed bug in app names with . |
---|
1598 | - fixed bug in created RestrictedError object on windows |
---|
1599 | - shell is now in gluon and accessible via web2py.py |
---|
1600 | |
---|
1601 | ## web2py 1.26 |
---|
1602 | - added shell.py (thanks Limodou!) |
---|
1603 | - added memcache support |
---|
1604 | |
---|
1605 | ## web2py 1.22-1.25 |
---|
1606 | - fixed minor bugs, added IS_NULL_OR |
---|
1607 | |
---|
1608 | ## web2py 1.21 |
---|
1609 | - replaced paste.httpserver with cherrypy.wsgi server |
---|
1610 | - temporary sessions are no longer saved |
---|
1611 | - widget has [stop] button and graph |
---|
1612 | - logging is done by main by appfactory |
---|
1613 | - fixed a bug in sql belongs |
---|
1614 | |
---|
1615 | ## web2py 1.20 |
---|
1616 | - new IFRAME, LABEL, FIELDSET validators |
---|
1617 | - P(..cr2br=True) option |
---|
1618 | - FORM and SQLFORM have hidden=dict(...) option for REST |
---|
1619 | - testing framework. |
---|
1620 | - improved examples pages |
---|
1621 | |
---|
1622 | ## web2py 1.19 |
---|
1623 | - minor typos |
---|
1624 | |
---|
1625 | ## web2py v1.18 |
---|
1626 | - removed vulnerability in accept_languages and session_id |
---|
1627 | - Minor bug fixes. Typos and cleanup cache. Textarea now clears. |
---|
1628 | - Support for PyAMF. |
---|
1629 | - T returns a class, not a string |
---|
1630 | - new template parser (faster?) |
---|
1631 | - got rid of sintaxhighlighter in favor of server side CODE |
---|
1632 | - fix problem with cacheondisk locking |
---|
1633 | - fix 'None' instead of NULL in IS_NOT_IN_DB (I think) |
---|
1634 | - gluon.contrib.markdown |
---|
1635 | - notnull and unique in SQLField now supported (tested on sqlite mysql and postgresql) |
---|
1636 | - Storage now has __getstate__ and __setstate__ needed for pickling. |
---|
1637 | - session files are now locked to make it work better with asynchronous requests |
---|
1638 | - cxoracle should work, apart for limitby |
---|
1639 | - .../examples is now mapped to .../examples/default/index etc. |
---|
1640 | - .../init is now mapped to .../welcome if init is not present |
---|
1641 | |
---|
1642 | ## web2py v1.17 |
---|
1643 | - I posted v1.16 too soon. v1.17 was released after 1h to fix some bugs. |
---|
1644 | |
---|
1645 | ## web2py v1.16 |
---|
1646 | - yes we changed the name! Turns out Gluon was trademarked by somebody else. |
---|
1647 | - Although we are not infringing the trademark since this is a non-commercial |
---|
1648 | - product we could have run into some issues. So we have been professional |
---|
1649 | - and changed the name to web2py. |
---|
1650 | - Now SQLFORMs and FORM can have a formname and multiple forms are allowed |
---|
1651 | - per page. |
---|
1652 | - A new examples/default/index page. |
---|
1653 | - web2py.py instead of runme.py |
---|
1654 | - mysql sets utf8 encoding. |
---|
1655 | - input integer field values are automatically converted int(). |
---|
1656 | |
---|
1657 | ## Gluon v1.15 |
---|
1658 | - New try:... except. in gluon/main.py for when sessions cannot be saved |
---|
1659 | - Now validator/formatter method allows IS_DATE('%d/%m/%Y') |
---|
1660 | |
---|
1661 | ## Gluon v1.14 |
---|
1662 | - Fixed a bug fix in URLs |
---|
1663 | |
---|
1664 | ## Gluon v1.13 |
---|
1665 | - (this is one of the biggest revisions ever) |
---|
1666 | - Improved sql.py has support MySQL, cxOracle (experimental), extract, like and better testing |
---|
1667 | - SQLDB.tables and SQLTable.fields are now SQLCalableList objects |
---|
1668 | - Fixed bug with editing integer fields storing zero |
---|
1669 | - Admin interface now says "insert new [tablename]" and display insert, select or update properly in the title. |
---|
1670 | - Added a cache mechamism. Works for data, controllers, views and SQLRows. |
---|
1671 | - main.py now uses a request.folder absolute path when not os.name in ['nt','posix']. Seems to work on windowsce devices, except no file locking has consequences. |
---|
1672 | - Now you can put modules in applications/[anyapp]/modules and import them with |
---|
1673 | - import applications.[anyapp].modules.[module] as [module] |
---|
1674 | - Fixed problem with init |
---|
1675 | - New applications/examples/controller/global.py controller for docs. |
---|
1676 | |
---|
1677 | ## Gluon v1.12 |
---|
1678 | - in sql.py |
---|
1679 | - handles NULL values properly |
---|
1680 | - unicode support (data always stored in utf-8) |
---|
1681 | - 'date' -> datetime.date ,'time' -> datetime.time, 'datetime' -> datetime.datetime, 'boolean' -> True/False |
---|
1682 | - most types have default validators |
---|
1683 | - SQLField(...,required=True) option. |
---|
1684 | - SQLRows has __str__ that serializes in CSV and xml() that serializes in HTML |
---|
1685 | - SQLTable has import_from_csv_file(...) |
---|
1686 | - gluon.simplejson for AJAX |
---|
1687 | - in validators.py |
---|
1688 | - IS_IN_DB(db,..) - db can be an SQLSet or an SQLDB |
---|
1689 | - better error messages |
---|
1690 | - in admin |
---|
1691 | - new import/export in csv, update and delete interface. |
---|
1692 | - in appadmin |
---|
1693 | - edit form allows to keep stored encrypted password |
---|
1694 | - in main.py |
---|
1695 | - http://host not defaults to http://host/init/default/index |
---|
1696 | - New third party modules |
---|
1697 | - gluon.simplejson(.dumps, .loads) |
---|
1698 | - gluon.pyrtf(.dumps) |
---|
1699 | - gluon.rss2(.dumps) |
---|
1700 | |
---|
1701 | ## Gluon v1.11 |
---|
1702 | - appadmin allows to keep or delete uploaded files |
---|
1703 | |
---|
1704 | ## Gluon v1.10 |
---|
1705 | - fixed concurrency problems with SQLDB._instances and SQLDB._folders, now use lock |
---|
1706 | - now, by default, edit SQLFORMs retain uploaded files |
---|
1707 | |
---|
1708 | ## Gluon v1.9 |
---|
1709 | - allow "count(*)" in select |
---|
1710 | - db.execute() |
---|
1711 | - fixed problem with continue and return in template |
---|
1712 | - removed try: ... except in sql.py |
---|
1713 | - fixed '\t' |
---|
1714 | |
---|
1715 | ## Gluon v1.8 |
---|
1716 | - no more chdir (thread unsafe) |
---|
1717 | - no more sys.stdout (thread unsafe) |
---|
1718 | - response.body is StringIO() |
---|
1719 | - admin/default/site informs about upgrade |
---|
1720 | - response.locker (optional) |
---|
1721 | |
---|
1722 | ## Gluon v1.5 |
---|
1723 | - <form> -> <form method="post"> in errors.html |
---|
1724 | - replace('//','////') in sub in template.py |
---|
1725 | |
---|
1726 | ## Gluon v1.4 |
---|
1727 | - fixed problem with IS_INT_IN_RANGE and IS_FLOAT_IN_RANGE. Now an error in a validator is reported as a ticket. Good validators should not raise Exceptions. |
---|
1728 | - IS_IN_DB displays "label (id)" |
---|
1729 | - it can upload files without extension |
---|
1730 | - migration is now optional (define_table has migrate=False option) |
---|
1731 | |
---|
1732 | ## Gluon v1.3 |
---|
1733 | - added IS_IN_DB, IS_NOT_IN_DB and updated examples accordingly |
---|
1734 | |
---|
1735 | ## Gluon v1.1 -> v1.2 |
---|
1736 | - fixed some typos in examples |
---|
1737 | - IS_IN_SET now supports labels |
---|
1738 | - cleanup in sql.py does not cleanup, just checks valid field and table names |
---|
1739 | |
---|
1740 | ## Gluon v1.0 -> v1.1 |
---|
1741 | - bug in sqlhtml with JOINS queries |
---|
1742 | |
---|
1743 | ## EWF v1.7 -> Gluon v1.0 |
---|
1744 | - Name change |
---|
1745 | - Improved layout.html |
---|
1746 | |
---|
1747 | ## EWF v1.6 -> v1.7 |
---|
1748 | - in paths replace '\' with '/' to fix problem with windows paths |
---|
1749 | - using limitby in database administration |
---|
1750 | - replaced mime/miltupart with multipart/form-data to fix a windows problem |
---|
1751 | |
---|
1752 | ## EWF v1.5 -> v1.6 (2007) |
---|
1753 | - load and save .py in ascii, avoids problem with LF+CR on windows |
---|
1754 | - added path.join in compileapp, fixed problem with Windows compileapp |
---|