Version history¶
Version 5.10¶
For IntegerField/FloatField/CurrencyField, if min is not specified, it will be assumed to be 0.
If you need a form field to accept negative values, set min= to a negative value (or None).
Benefits of this change:
- Most numeric inputs on mobile can now use the numeric keypad
- Prevents unintended negative inputs from users.
For example, if you forgot to specify
min=0for your "contribution" field, then a user could 'hack' the game by entering a negative contribution.
Other changes:
- MTurk integration works even on Python >= 3.10 (removed dependency on the boto3 library)
- Python 3.11 support
- bots: better error message when bot is on the wrong page
Version 5.9¶
- Improved dropout detection
- Renamed
formInputs(JavaScript variable) toforminputs - 5.9.5: fix bug that points inputs allow decimal numbers when they should be whole numbers.
Version 5.8¶
- Better dropout detection with group_by_arrival_time; see here.
- Python 3.10 support
- Fix various websocket-related errors such as ConnectionClosedOK, IncompleteReadError, ClientDisconnect that tend to happen intermittently, especially with browser bots.
Version 5.6¶
- Added access to form inputs through JavaScript.
Version 5.4¶
- PARTICIPANT_FIELDS are now included in data export
- field_maybe_none
- Radio buttons can now be accessed by numeric index, e.g.
{{ form.my_field.0 }}. - Bugfix with numpy data types assigned to model fields
- Misc improvements and fixes
Version 5.3¶
- Bugfix to deleting sessions in devserver
{{ static }}tag checks that the file exists- In SessionData tab, fix the "next round"/"previous round" icons on Mac
- Fix to currency formatting in Japanese/Korean/Turkish currency (numbers were displayed with a decimal when there should be none)
- allow error_message to be run on non-form pages (e.g. live pages)
- Better error reporting when an invalid value is passed to
js_vars - Minor fixes & improvements
Version 5.2¶
- For compatibility with oTree 3.x,
formfield
<input>elements now prefix theiridattribute withid_. If you usegetElementById/querySelector/etc. to select any formfield inputs, you might need to update your selectors. - The data export now outputs "time started" as UTC.
- "Time spent" data export has a column name change.
If you have been using the
pagetimes.pyscript, you should download the new version.
Version 5.1¶
- Breaking changes to REST API
Version 5.0¶
- oTree Lite
- The no-self format
- The beta method
Player.start()has been removed. cu()is now available as an alias forCurrency.c()will still work as long as you havefrom otree.api import Currency as cat the top of your file. More details here.- oTree 3.x used two types of tags in templates:
{{ }}and{% %}. Starting in oTree 5, however, you can forget about{% %}and just use{{ }}everywhere if you want. More details here. - All REST API calls now return JSON
Version 3.3¶
- BooleanField now uses radio buttons by default (instead of dropdown)
otree zipcan now keep your requirements.txt up to date.- oTree no longer installs sentry-sdk. If you need Sentry on Heroku, you should add it to your requirements.txt manually.
- Faster server
- Faster startup time
- Faster installation
- Data export page no longer outputs XLSX files. Instead it outputs CSV files formatted for Excel
- Admin UI improvements, especially session data tab
Version 3.2¶
- Should use less memory and have fewer memory spikes.
- Enhancements to SessionData and SessionMonitor.
Version 3.1¶
- New way to define Roles
- You can pass a string to
formfield, for example{{ formfield 'contribution' }}.
Version 3.0¶
Custom data export¶
See カスタムデータのエクスポート.
Other things¶
- Python 3.8 is now supported.
- Speed improvements to devserver & zipserver
- You can now download a single session's data as Excel or CSV (through session's Data tab)
- When browser bots complete, they keep the last page open
- group_by_arrival_time: quicker detection if a participant goes offline
- Browser bots use the REST API to create sessions (see REST).
- Instead of
runprodserveryou can now useprodserver(that will be the preferred name going forward). - "Page time" data export now has more details such as whether it is a wait page.
devserverandzipservernow must usedb.sqlite3as the database.
Version 2.5¶
- Removed old
runservercommand. - Deprecated non-oTree widgets and model fields. See here.
Version 2.4¶
zipservercommand- New MTurk format
- oTree no longer records participants' IP addresses.
Version 2.3¶
- Various improvements to performance, stability, and ease of use.
- oTree now requires Python 3.7
- oTree now uses Django 2.2.
- Chinese/Japanese/Korean currencies are displayed as 元/円/원 instead of ¥/₩.
- On Windows,
prodserverjust launches 1 worker process. If you want more processes, you should use a process manager. (This is due to a limitation of the ASGI server) prodserveruses Uvicorn/Hypercorn instead of Daphne- update_my_code has been removed
Version 2.2¶
- support for the
otreezipformat (otree zip,otree unzip) - MTurk: in sandbox mode, don't grant qualifications or check qualification requirements
- MTurk: before paying participants, check if there is adequate account balance.
- "next button" is disabled after clicking, to prevent congesting the server with duplicate page loads.
- Upgrade to the latest version of Sentry
- Form validation methods should go on the model, not the page. See 動的なフォームの検証
- app_after_this_page
- Various performance and stability improvements
Version 2.1¶
- oTree now raises an error if you use an undefined variable in your template.
This will help catch typos like
{{ Player.payoff }}or{{ if player.id_in_gruop }}. This means that apps that previously worked may now get a template error (previously, it failed silently). If you can't remove the offending variable, you can apply the|defaultfilter, like:{{ my_undefined_variable|default:None }} - oTree now warns you if you use an invalid attribute on a Page/WaitPage.
- CSV/Excel data export is done asynchronously, which will fix timeout issues for large files on Heroku.
- Better performance, especially for "Monitor" and "Data" tab in admin interface