Free and open source full-stack enterprise framework for agile development of secure database-driven web-based applications, written and programmable in Python.

Overview

Readme

web2py is a free open source full-stack framework for rapid development of fast, scalable, secure and portable database-driven web-based applications.

It is written and programmable in Python. LGPLv3 License

Learn more at http://web2py.com

Google App Engine deployment

cp examples/app.yaml ./
cp handlers/gaehandler.py ./

Then edit ./app.yaml and replace "yourappname" with yourappname.

Important reminder about this GIT repo

An important part of web2py is the Database Abstraction Layer (DAL). In early 2015 this was decoupled into a separate code-base (PyDAL). In terms of git, it is a sub-module of the main repository.

The use of a sub-module requires a one-time use of the --recursive flag for git clone if you are cloning web2py from scratch.

git clone --recursive https://github.com/web2py/web2py.git

If you have an existing repository, the commands below need to be executed at least once:

git submodule update --init --recursive

If you have a folder gluon/dal you must remove it:

rm -r gluon/dal

PyDAL uses a separate stable release cycle to the rest of web2py. PyDAL releases will use a date-naming scheme similar to Ubuntu. Issues related to PyDAL should be reported to its separate repository.

Documentation (readthedocs.org)

Docs Status

Tests

Build Status MS Build Status Coverage Status

Installation Instructions

To start web2py there is NO NEED to install it. Just unzip and do:

python web2py.py

That's it!!!

web2py directory structure

project/
    README
    LICENSE
    VERSION                    > this web2py version
    web2py.py                  > the startup script
    anyserver.py               > to run with third party servers
    ...                        > other handlers and example files
    gluon/                     > the core libraries
        packages/              > web2py submodules
          dal/
        contrib/               > third party libraries
        tests/                 > unittests
    applications/              > are the apps
        admin/                 > web based IDE
            ...
        examples/              > examples, docs, links
            ...
        welcome/               > the scaffolding app (they all copy it)
            ABOUT
            LICENSE
            models/
            views/
            controllers/
            sessions/
            errors/
            cache/
            static/
            uploads/
            modules/
            cron/
            tests/
        ...                    > your own apps
    examples/                  > example config files, mv .. and customize
    extras/                    > other files which are required for building web2py
    scripts/                   > utility and installation scripts
    handlers/
        wsgihandler.py         > handler to connect to WSGI
        ...                    > handlers for Fast-CGI, SCGI, Gevent, etc
    site-packages/             > additional optional modules
    logs/                      > log files will go in there
    deposit/                   > a place where web2py stores apps temporarily

Issues?

Report issues at https://github.com/web2py/web2py/issues

Comments
  • Possible security bug in default mySQL/web2py setup

    Possible security bug in default mySQL/web2py setup

    Not sure where to report this: don't want to disclose too much, but the hole is such an obvious one that I might just have misunderstood the web2py syntax. Where should I report so that it is not public?

    opened by hyanwong 38
  • parameter of ajax put request is empty in Python 3

    parameter of ajax put request is empty in Python 3

    I tested the latest version 2.15.2 and I've got a problem when accessing ajax post parameters with web2py under Python 3.

    The client sends a PUT request using jquery like this: $.ajax('<url>', { data: JSON.stringify({ outputFormat: 'pdf' }), type: "PUT", contentType: "application/json", success: function(data) { alert('success'); }, error: function(jqXHR, textStatus, errorThrown) { alert('error'); } });

    in the controller I access the parameter output_format = request.vars.outputFormat

    when using Python 2.7 the variable output_format is set to 'pdf' as expected. When using Python 3.5 the variable is None.

    opened by alhman 24
  • scheduler.queue_task() is broken by validation

    scheduler.queue_task() is broken by validation

    This used to work, but now even the example in the book doesn't work.

    >>> scheduler.queue_task('demo1', [1,2])
    <Row {'errors': {'status': 'Value not allowed', 'start_time': 'Enter date and time as 1963-08-28 14:30:59', 'period': 'Enter an integer greater than or equal to 0', 'sync_output': 'Enter an integer greater than or equal to 0
    ', 'timeout': 'Enter an integer greater than or equal to 1', 'application_name': 'Enter a value', 'retry_failed': 'Enter an integer greater than or equal to -1', 'repeats': 'Enter an integer greater than or equal to 0'}, 'id
    ': None, 'uuid': None}>
    
    
    opened by kjkuan 23
  • Auth refactor

    Auth refactor

    Extracted many methods into a base class for more generic auth mechanisms.

    Partially addresses #1526 Includes a solution for IS_LOWER and IS_UPPER validator problems I mentioned in #1353

    opened by leonelcamara 21
  • Support to python 3.8/3.9/3.10

    Support to python 3.8/3.9/3.10

    Hello, are there any full support predictions for python 3.8 / 3.9 / 3.10? For example I noticed that (with python3.8) the "{{else:}}" statement in the view doesn't work.

    Regards

    opened by Tenebor 18
  • After updating from 2.18.1 to 2.18.2 the session.flash messages all show as b'<message>'

    After updating from 2.18.1 to 2.18.2 the session.flash messages all show as b''

    Describe the bug After updating from 2.18.1 to 2.18.2 the session.flsh messages all show as b''

    To Reproduce Just login on any app that shows session.flash. The 'Hello World' message from the welcome app uses response.flash and not session.flash and thus it does not show the problem.

    Desktop (please complete the following information): Windows 7 Pro x64 w/SP1 + all upgrades Firefox 65.0.1 x64 Python 3.7.1 x86

    opened by jcrmatos 18
  • load with ajax=false ignored if url parameter set

    load with ajax=false ignored if url parameter set

    {{=LOAD(c='referee', f='grid.load', ajax=False, ajax_trap=True, vars=dict(customer=id), target='referee')}} {{=LOAD(url=URL(c='referee2', f='grid.load', vars=dict(customer=id)), ajax=False, ajax_trap=True, target='referee2')}}

    referee2 is requested with ajax=True despite the parameter ajax=False.

    opened by simonm3 18
  • fix issue#1261: security issue: gluon.tools.Expose will follow symlinks

    fix issue#1261: security issue: gluon.tools.Expose will follow symlinks

    opened by chenl 17
  • Drop python 2.5

    Drop python 2.5

    The last security bug fix release (source only) of python 2.5 has been publish in 2011. https://www.python.org/download/releases/2.5.6/ There are no tests on travis-ci for python 2.5.

    opened by ilvalle 17
  • Setting map_hyphen=True in routes.py breaks codemirror editor

    Setting map_hyphen=True in routes.py breaks codemirror editor

    The codemirror breaks once I set the map_hypen to True.

    In my routes.py I have:

    routers = dict(
        BASE=dict(
            default_application='mycoolapp',
            map_hyphen=True,
        )
    )
    

    When I try to use the web-based web2py editor it fails to load.

    Looking at the console I see the following 404's:

    screen shot 2015-02-02 at 5 35 16 pm

    The path goes from being an _2.9.5 to -2.9.5 which is expected behavior for the URLS, however because the directory starts with a _ and gets changed to - it causes problem. For example http://localhost:8000/admin/static/-2.9.5/js/typeahead.min.js

    opened by amerikan 17
  • Can't define referenced table after it's referencing from web2py v2.9.3

    Can't define referenced table after it's referencing from web2py v2.9.3

    From d.bu..._at_gmail.com on March 08, 2014 12:14:54

    What steps will reproduce the problem? 1. Define referenced table after it's referencing 2. Set lazy_tables=False (means don't activate lazy_tables) 3. Call any app url What is the expected output? What do you see instead? In web2py v2.8.2 everything is fine - you see the controller's result. From version 2.9.3 (including 2.9.4) you see only "KeyError: 'Cannot resolve reference ... in ... definition'" What version of the product are you using? On what operating system? Ubuntu server 12.04 / Ubuntu desktop 13.10; web2py v2.9.4 Please provide any additional information below. Sample error log: Traceback (most recent call last): File "/home/donatas/web2py/gluon/restricted.py", line 217, in restricted exec ccode in environment File "/home/donatas/web2py/applications/welcome/models/db.py", line 87, in Field('subject_id', 'reference subject') File "/home/donatas/web2py/gluon/dal.py", line 8223, in define_table table = self.lazy_define_table(tablename,fields,*args) File "/home/donatas/web2py/gluon/dal.py", line 8260, in lazy_define_table polymodel=polymodel) File "/home/donatas/web2py/gluon/dal.py", line 925, in create_table raise KeyError('Cannot resolve reference %s in %s definition' % (referenced, table._tablename)) KeyError: 'Cannot resolve reference subject in contract definition'

    Original issue: http://code.google.com/p/web2py/issues/detail?id=1896

    imported Priority-Medium bug DAL 
    opened by niphlod 17
  • PAM authorization bypass due to incorrect usage

    PAM authorization bypass due to incorrect usage

    While i read code at https://github.com/web2py/web2py/blob/master/gluon/contrib/pam.py#L124

    I found that we only do authenticate without authorization, i.e. without calling pam_acct_mgmt. This can make expired accounts and accounts with expired passwords can still login.

    More details: https://codeql.github.com/codeql-query-help/python/py-pam-auth-bypass/

    Please let me know if I have missed any key details.

    Impact: This can make expired accounts and accounts with expired passwords can still login.

    opened by lujiefsi 0
  • Security.md does not provide how to report a security vulnerability

    Security.md does not provide how to report a security vulnerability

    Hi,

    The Security.md file does not provide how or to who we can report a potential security vulnerability, please. If possible, I would like to report one via https://huntr.dev if you are ok with that.

    Regards

    opened by Sim4n6 1
  • Web2py from website or from git does not find dal

    Web2py from website or from git does not find dal

    Describe the bug Looks like a bug that was here recently with release few months ago. Web2py downloaded from official website does not include dal.

    To Reproduce

    1. update to latest web2py downloading from https://mdipierro.pythonanywhere.com/examples/static/web2py_src.zip
    2. restart process.

    Expected behavior Web2py does not complain about missing dal.

    Traceback

    Traceback (most recent call last):
      File "~/xxx/web2py/gluon/__init__.py", line 31, in import_packages
        sys.modules[package] = __import__(package)
    ModuleNotFoundError: No module named 'pydal'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "~/xxx/web2py/wsgihandler.py", line 29, in <module>
        from gluon.settings import global_settings
      File "~/xxx/web2py/gluon/__init__.py", line 35, in <module>
        import_packages()
      File "~/xxx/web2py/gluon/__init__.py", line 33, in import_packages
        raise RuntimeError(MESSAGE % package)
    RuntimeError: web2py depends on pydal, which apparently you have not installed.
    Probably you cloned the repository using git without '--recursive'
    To fix this, please run (from inside your web2py folder):
    
         git submodule update --init --recursive
    

    Desktop (please complete the following information):

    • OS: centos7 (vagrant box generic/centos7 v4.0.0 (latest at time of writing))
    • Web2py version 2.22.4

    Additional context I had the same problem with git version. However when moved one commit below, problem disappeard.

    opened by LukasJerabek 8
  • pydal do not support mongodb 4.4+

    pydal do not support mongodb 4.4+

    Describe the bug pydal not support mongodb 4.4+

    To Reproduce Steps to reproduce the behavior: when mongodb 4.2 upgrade to mongodb 4.4, web2py pydal (DAL) can‘t work: select tables expect values but return keys。 (to CRUD mongodb directly in python with pymongo , It works fine).

    === env: web2py 2.22.3 pymongo 3.12.3 mongodb 4.4.14 suse 12 sp5 python 2.7.17

    opened by Alex-echo 0
  • admin does not pass sorting parameters to next page

    admin does not pass sorting parameters to next page

    Describe the bug appadmin database table view does not pass the column sorting options to the next page

    To Reproduce Steps to reproduce the behavior:

    1. Open appadmin, and select database management
    2. select the table to view, a table with more than 100 entries
    3. on the display of [the first 100] entries, select a column to sort by
    4. observe the sorted results, and then select Next 100 Rows
    5. observe the results sorted by id

    Expected behavior The second page should continue the sorted view, showing the next 100 entries according to the sort selection on the first page.

    Screenshots See attached. admin-init.jpg is the initial view of the table, admin-sorted .jpg is the first page after picking sort by badrand.hits (using the column header to select the sort), and admin-nexted.jpg is the view of the second page after admin-sorted.jpg

    Desktop (please complete the following information): 'Windows-10-10.0.19043-SP0' Chrome Version 101.0.4951.54 (Official Build) (64-bit)

    admin-init admin-sorted admin-nexted

    opened by snidelytoo 0
  • Issues with emails using Microsoft 365 mail server

    Issues with emails using Microsoft 365 mail server

    We have changed our mail provider from a small private one to Microsoft 365. I was trying to make web2py use this new & popular mail server for sending out the confirmation emails for new users, as well as other purposes. I kept getting error messages regarding the SSL version not being OK.

    After some digging I found a workaround for this, as follows:

    1. The configuration which works with this mail server is: server=smtp.office365.com port=587 ssl=False tls-True

    2. Modified gluon/tools.py by changing 2 lines: Original: import smtplib Change to: import smtplib, ssl Original: server.starttls() Change to: server.starttls(context=ssl.create_default_context())

    3. I also had to increase the timeout, but that might be due to my specific network. In any case, this can be done ad models/db.py in the email settings section, by adding the line: mail.settings.timeout = configuration.get('timeout') or 60 It will read the "timeout" parameter from the private/appconfig.ini file (if exists) and will set a default of 60 seconds if it doesn't. This is overriding the 5 seconds default hard-coded in glueon/tools.py

    I hope this can help anyone who faces a similar issue. The more senior contributors might consider making this a permanent modification.

    opened by unle70 1
Releases(2.19.1)
  • R-2.17.1(Aug 6, 2018)

  • R-2.11.2(Jun 12, 2015)

    Many small but significative improvements and bug fixes

    WARNING: DO NOT DOWNLOAD RELEASES FROM THIS GITHUB PAGE. DOWNLOAD THEM FROM THE web2py.com PAGE. THE GITHUB ONES DO NOT CONTAIN SUBMODULES.

    Source code(tar.gz)
    Source code(zip)
  • R-2.10.3(Apr 2, 2015)

    WARNING: DO NOT DOWNLOAD RELEASES FROM THIS GITHUB PAGE. DOWNLOAD THEM FROM THE web2py.com PAGE. THE GITHUB ONES DO NOT CONTAIN SUBMODULES.

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

    WARNING: DO NOT DOWNLOAD RELEASES FROM THIS GITHUB PAGE. DOWNLOAD THEM FROM THE web2py.com PAGE. THE GITHUB ONES DO NOT CONTAIN SUBMODULES.

    Source code(tar.gz)
    Source code(zip)
  • R-2.10.2(Apr 1, 2015)

    WARNING: DO NOT DOWNLOAD RELEASES FROM THIS GITHUB PAGE. DOWNLOAD THEM FROM THE web2py.com PAGE. THE GITHUB ONES DO NOT CONTAIN SUBMODULES.

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

    WARNING: DO NOT DOWNLOAD RELEASES FROM THIS GITHUB PAGE. DOWNLOAD THEM FROM THE web2py.com PAGE. THE GITHUB ONES DO NOT CONTAIN SUBMODULES.

    Source code(tar.gz)
    Source code(zip)
  • R-2.10.1(Apr 1, 2015)

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

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

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

  • R-2.9.4(Mar 13, 2014)

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

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

  • R-2.7.1(Oct 5, 2013)

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

  • R-2.6.1(Sep 13, 2013)

    Attention all users: For pre 2.6 applications to work with web2py >=2.6, you must copy static/js/web2py.js, controllers/appadmin.py, and views/appadmin.html from the welcome app to your own apps (all of them).

    Attention production users: The updated handlers and examples are in handlers/ and examples/. The updated ones will not override the existing ones. To use the new ones it is not sufficient to upgrade web2py, you also need to copy the desired handler/example in the root web2py/ folder.

    Attention MySQL users: The length of string fields changed from 255 to 512 bytes. If you have migrations enabled this will trigger a large migration. To prevent it, first set migrate_enabled=False, upgrade, check everything is ok, then add length=255 to your string Fields, then re-enable migrations with migrate_enabled=True if needed.

    • better directory structure: handlers/ extras/ examples/
    • better MongoDb support, thanks Alan
    • better Admin editor interface, thanks Paolo, Roberto (codemirror 3), and Lightdot
    • better layout.html and web2py_bootstrap.css, thanks Paolo
    • refactored web2py.js makes code more readable, thanks Niphlod
    • compute fields can depend on other compute(d) fields
    • more functions in appadmin (/manage/auth), thanks Anthony
    • support for CAST in SQL generation
    • new API jQuery('#component').reload()
    • new API rows.render()
    • new API table.field.referent, table._references
    • new API db(...).validate_and_update(...)
    • new API Wiki(..., force_render=True) renders the page source again instead of using cached
    • Wiki now automatically parses named component arguments @{f:a=1,b='twp',c=variable}
    • auth.get_or_create_user(login=False)
    • auth = Auth(crsf_protection = False) prevents creating sessions in login/register forms.
    • enable multiple renderers in wiki, thanks Alan
    • log messages from Auth are no longer translated (for speed and readability)
    • update jQuery mobile to 1.3.1
    • reduced memory footprint by conditionally loading Tk
    • faster pbkdf2 uses OpenSSL, thanks Michele
    • many speed improvements, thanks Michele
    • better session logic, prevents false positive when detecting session changes.
    • scripts/import_static.py converts a static site to a web2py app (experimental)
    • support for new http error code 451
    • profiler saves dump in dir, thanks Niphlod
    • upgraded pyfpdf, thanks Mariano
    • gluon/contrib/pdfinvoice.py for generating PDF invoices (assumes reportlab)
    • no more double submission of forms (even without crsf protection), thanks Niphlod
    • speedup for define_table, thanks Michele
    • settings.cfg to admin, thanks Paolo
    • many bugs fixed, thanks Niphlod, Michele, Roberto, Jonathan, and many others
    Source code(tar.gz)
    Source code(zip)
  • R-2.5.1(Sep 13, 2013)

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

  • R-2.4.6(Sep 13, 2013)

  • R-2.4.5(Sep 13, 2013)

    • travis.ci integration (thanks Marc Abramowitz and Niphlod). Passes all tests (thanks Niplod).
    • IS_DATE and IS_DATETIME can specify timezone
    Source code(tar.gz)
    Source code(zip)
  • R-2.4.4(Sep 13, 2013)

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

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

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

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

    DAL Improvements

    • Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan
    • db(...).select(cacheable=True) make select 30% faster
    • db(...).select(cache=(cache.ram,3600)) now caches parsed data 100x faster
    • db(...).count(cache=(cache.ram,3600)) now supported
    • MongoDB support in DAL (experimental), thanks Mark Breedveld
    • geodal and spatialite, thanks Denes and Fran (experimental)
    • db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks)
    • db(...).update_naive(...) same as update but ignores table._before_update and table._after_update
    • DAL BIGINT support and DAL(...,bigint_id=True)
    • IS_IN_DB(..., distinct=True)
    • new syntax: db.mytable.insert(myuploadfield=open(....)), thank you Iceberg
    • db(...).select(db.mytable.myfield.count(distinct=True))
    • db(db.a)._update(name=db(db.b.a==db.a.id).nested_select(db.b.id))
    • db.mytable.myfield.filter_in, filter_out
    • db.mytable._enable_record_versioning(db) adds versioning to this table
    • teradata adapter, thanks Andrew Willimott
    • experimental Sybase Adapter
    • added db.table.field.avg()
    • Support for Google App Engine projections, thanks Christian
    • Field(... 'upload', default=path) now accepts a path to a local file as default value, if user does not upload a file. Relative path looks inside current application folder, thanks Marin
    • executesql(...,fields=,columns=) allows parsing of results in Rows, thanks Anthony
    • Rows.find(lambda row: bool(), limitby=(0,1))

    Auth improvements

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

    Form improvements

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

    Admin improvements

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

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

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

    Other Improvements

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

Bionic is fast. It's powered core python without any extra dependencies. Bionic offers stateful hot reload, allowing you to make changes to your code and see the results instantly without restarting your app or losing its state.

 ⚓ 0 Mar 5, 2022
Appier is an object-oriented Python web framework built for super fast app development.

Joyful Python Web App development Appier is an object-oriented Python web framework built for super fast app development. It's as lightweight as possi

Hive Solutions 122 Dec 22, 2022
bottle.py is a fast and simple micro-framework for python web-applications.

Bottle: Python Web Framework Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module a

Bottle Micro Web Framework 7.8k Dec 31, 2022
Sierra is a lightweight Python framework for building and integrating web applications

A lightweight Python framework for building and Integrating Web Applications. Sierra is a Python3 library for building and integrating web applications with HTML and CSS using simple enough syntax. You can develop your web applications with Python, taking advantage of its functionalities and integrating them to the fullest.

null 83 Sep 23, 2022
The Python micro framework for building web applications.

Flask Flask is a lightweight WSGI web application framework. It is designed to make getting started quick and easy, with the ability to scale up to co

The Pallets Projects 61.5k Jan 6, 2023
Free & open source Rest API for YTDislike

RestAPI Free & open source Rest API for YTDislike, read docs.ytdislike.com for implementing. Todo Add websockets Installation Git clone git clone http

null 1 Nov 25, 2021
Asita is a web application framework for python based on express-js framework.

Asita is a web application framework for python. It is designed to be easy to use and be more easy for javascript users to use python frameworks because it is based on express-js framework.

Mattéo 4 Nov 16, 2021
A public API written in Python using the Flask web framework to determine the direction of a road sign using AI

python-public-API This repository is a public API for solving the problem of the final of the AIIJC competition. The task is to create an AI for the c

Lev 1 Nov 8, 2021
web.py is a web framework for python that is as simple as it is powerful.

web.py is a web framework for Python that is as simple as it is powerful. Visit http://webpy.org/ for more information. The latest stable release 0.62

null 5.8k Dec 30, 2022
Daniel Vaz Gaspar 4k Jan 8, 2023
Fully featured framework for fast, easy and documented API development with Flask

Flask RestPlus IMPORTANT NOTICE: This project has been forked to Flask-RESTX and will be maintained by by the python-restx organization. Flask-RESTPlu

Axel H. 2.7k Jan 4, 2023
Fully featured framework for fast, easy and documented API development with Flask

Flask RestPlus IMPORTANT NOTICE: This project has been forked to Flask-RESTX and will be maintained by by the python-restx organization. Flask-RESTPlu

Axel H. 2.5k Feb 17, 2021
Ape is a framework for Web3 Python applications and smart contracts, with advanced functionality for testing, deployment, and on-chain interactions.

Ape Framework Ape is a framework for Web3 Python applications and smart contracts, with advanced functionality for testing, deployment, and on-chain i

ApeWorX Ltd. 552 Dec 30, 2022
A high-level framework for building GitHub applications in Python.

A high-level framework for building GitHub applications in Python. Core Features Async Proper ratelimit handling Handles interactions for you (

Vish M 3 Apr 12, 2022
APIFlask is a lightweight Python web API framework based on Flask and marshmallow-code projects

APIFlask APIFlask is a lightweight Python web API framework based on Flask and marshmallow-code projects. It's easy to use, highly customizable, ORM/O

Grey Li 705 Jan 4, 2023
FPS, fast pluggable server, is a framework designed to compose and run a web-server based on plugins.

FPS, fast pluggable server, is a framework designed to compose and run a web-server based on plugins. It is based on top of fastAPI, uvicorn, typer, and pluggy.

Adrien Delsalle 1 Nov 16, 2021
cirrina is an opinionated asynchronous web framework based on aiohttp

cirrina cirrina is an opinionated asynchronous web framework based on aiohttp. Features: HTTP Server Websocket Server JSON RPC Server Shared sessions

André Roth 32 Mar 5, 2022
Web framework based on type hint。

Hint API 中文 | English 基于 Type hint 的 Web 框架 hintapi 文档 hintapi 实现了 WSGI 接口,并使用 Radix Tree 进行路由查找。是最快的 Python web 框架之一。一切特性都服务于快速开发高性能的 Web 服务。 大量正确的类型

Aber 19 Dec 2, 2022
Trame let you weave various components and technologies into a Web Application solely written in Python.

Trame Trame aims to be a framework for building interactive applications using a web front-end in plain Python. Such applications can be used locally

Kitware, Inc. 85 Dec 29, 2022