[42bd667] | 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 |
---|