├── otree ├── auth.py ├── cli │ ├── __init__.py │ ├── prodserver.py │ ├── prodserver2of2.py │ ├── timeoutsubprocess.py │ ├── base.py │ ├── browser_bots.py │ ├── unzip.py │ ├── create_session.py │ ├── prodserver1of2.py │ ├── bots.py │ ├── startapp.py │ ├── resetdb.py │ ├── devserver_inner.py │ ├── upcase_constants.py │ ├── startproject.py │ └── devserver.py ├── forms │ ├── __init__.py │ └── fields.py ├── channels │ ├── __init__.py │ └── routing.py ├── app_template │ ├── __init__.py │ ├── tests.py │ ├── templates │ │ └── app_name │ │ │ ├── Results.html │ │ │ └── MyPage.html │ ├── pages.py │ ├── _builtin │ │ └── __init__.py │ └── models.py ├── project_template │ ├── _static │ │ └── global │ │ │ └── empty.css │ ├── Procfile │ ├── .gitignore │ ├── _templates │ │ └── global │ │ │ └── Page.html │ ├── requirements.txt │ └── settings.py ├── static │ ├── robots.txt │ ├── favicon.ico │ ├── glyphicons │ │ ├── usd.png │ │ ├── clock.png │ │ ├── cloud.png │ │ ├── link.png │ │ ├── plus.png │ │ ├── stats.png │ │ ├── cogwheel.png │ │ ├── delete.png │ │ ├── eye-open.png │ │ ├── list-alt.png │ │ ├── pencil.png │ │ ├── pushpin.png │ │ ├── refresh.png │ │ ├── download-alt.png │ │ └── folder-closed.png │ └── otree │ │ ├── js │ │ ├── internet-explorer.js │ │ ├── live.js │ │ ├── jquery.timeago.en-short.js │ │ ├── page-websocket-redirect.js │ │ ├── formInputs.js │ │ └── common.js │ │ └── css │ │ ├── table.css │ │ └── theme.css ├── templates │ ├── global │ │ ├── Base.html │ │ └── Page.html │ └── otree │ │ ├── FormPage.html │ │ ├── OutOfRangeNotification.html │ │ ├── WaitPageRoom.html │ │ ├── SessionDescription.html │ │ ├── CreateSession.html │ │ ├── includes │ │ ├── TimeLimit.html │ │ ├── messages.html │ │ ├── SessionInfo.html │ │ ├── debug_info.html │ │ ├── TimeLimit.js.html │ │ ├── mturk_payment_table.html │ │ ├── RoomParticipantLinks.html │ │ └── hidden_form_errors.html │ │ ├── SessionEditProperties.html │ │ ├── Rooms.html │ │ ├── RoomWithSession.html │ │ ├── RoomInputLabel.html │ │ ├── AdminReport.html │ │ ├── DemoIndex.html │ │ ├── MTurkHTMLQuestion.html │ │ ├── Login.html │ │ ├── Base.html │ │ ├── SessionPayments.html │ │ ├── ServerCheck.html │ │ ├── Page.html │ │ ├── SessionMonitor.html │ │ ├── Session.html │ │ ├── MTurkCreateHIT.html │ │ ├── CreateDemoSession.html │ │ ├── BaseAdmin.html │ │ ├── SessionSplitScreen.html │ │ └── tags │ │ └── chat.html ├── views │ ├── __init__.py │ ├── demo.py │ └── room.py ├── bots │ └── __init__.py ├── templating │ ├── __init__.py │ ├── errors.py │ ├── template.py │ ├── utils.py │ ├── filters.py │ ├── context.py │ └── loader.py ├── __init__.py ├── locale │ ├── ar │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── cs │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── de │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── he │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── hi │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── hu │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── id │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── it │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── ja │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ko │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nb │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── pt │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── tr │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── zh_Hans │ │ └── LC_MESSAGES │ │ │ ├── django.mo │ │ │ └── django.po │ ├── babel.ini │ └── django.pot ├── app_template_lite │ ├── Results.html │ ├── MyPage.html │ └── __init__.py ├── test.py ├── models │ ├── __init__.py │ └── player.py ├── api.py ├── middleware.py ├── patch.py ├── update.py ├── models_concrete.py ├── lookup.py ├── chat.py ├── settings.py ├── constants.py ├── read_csv.py ├── asgi.py └── live.py ├── Makefile ├── .gitignore ├── requirements.txt ├── MANIFEST.in ├── LICENSE ├── README.rst └── setup.py /otree/auth.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/cli/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/forms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/channels/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/app_template/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/project_template/_static/global/empty.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /otree/cli/prodserver.py: -------------------------------------------------------------------------------- 1 | from .prodserver1of2 import Command -------------------------------------------------------------------------------- /otree/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /otree/templates/global/Base.html: -------------------------------------------------------------------------------- 1 | {% extends "otree/Page.html" %} 2 | -------------------------------------------------------------------------------- /otree/templates/otree/FormPage.html: -------------------------------------------------------------------------------- 1 | {% extends "otree/Page.html" %} -------------------------------------------------------------------------------- /otree/templates/otree/OutOfRangeNotification.html: -------------------------------------------------------------------------------- 1 | No more pages left -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | DJANGO_SETTINGS_MODULE=tests.settings py.test tests/ 3 | -------------------------------------------------------------------------------- /otree/views/__init__.py: -------------------------------------------------------------------------------- 1 | from otree.views.abstract import WaitPage, Page 2 | -------------------------------------------------------------------------------- /otree/templates/otree/WaitPageRoom.html: -------------------------------------------------------------------------------- 1 | {% extends 'otree/WaitPage.html' %} 2 | -------------------------------------------------------------------------------- /otree/project_template/Procfile: -------------------------------------------------------------------------------- 1 | web: otree prodserver1of2 2 | worker: otree prodserver2of2 3 | -------------------------------------------------------------------------------- /otree/bots/__init__.py: -------------------------------------------------------------------------------- 1 | from .bot import PlayerBot as Bot, Submission, SubmissionMustFail, expect 2 | -------------------------------------------------------------------------------- /otree/templating/__init__.py: -------------------------------------------------------------------------------- 1 | from .loader import ibis_loader, get_template_name_if_exists, render 2 | -------------------------------------------------------------------------------- /otree/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/favicon.ico -------------------------------------------------------------------------------- /otree/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = '5.11.3' 2 | # don't import anything else here because setup.py imports this. 3 | -------------------------------------------------------------------------------- /otree/static/glyphicons/usd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/usd.png -------------------------------------------------------------------------------- /otree/static/glyphicons/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/clock.png -------------------------------------------------------------------------------- /otree/static/glyphicons/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/cloud.png -------------------------------------------------------------------------------- /otree/static/glyphicons/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/link.png -------------------------------------------------------------------------------- /otree/static/glyphicons/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/plus.png -------------------------------------------------------------------------------- /otree/static/glyphicons/stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/stats.png -------------------------------------------------------------------------------- /otree/static/glyphicons/cogwheel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/cogwheel.png -------------------------------------------------------------------------------- /otree/static/glyphicons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/delete.png -------------------------------------------------------------------------------- /otree/static/glyphicons/eye-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/eye-open.png -------------------------------------------------------------------------------- /otree/static/glyphicons/list-alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/list-alt.png -------------------------------------------------------------------------------- /otree/static/glyphicons/pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/pencil.png -------------------------------------------------------------------------------- /otree/static/glyphicons/pushpin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/pushpin.png -------------------------------------------------------------------------------- /otree/static/glyphicons/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/refresh.png -------------------------------------------------------------------------------- /otree/locale/ar/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/ar/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/cs/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/cs/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/he/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/he/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/hi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/hi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/hu/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/hu/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/id/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/id/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/ja/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/ja/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/ko/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/ko/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/nb/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/nb/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/nl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/nl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/tr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/tr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/static/glyphicons/download-alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/download-alt.png -------------------------------------------------------------------------------- /otree/static/glyphicons/folder-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/static/glyphicons/folder-closed.png -------------------------------------------------------------------------------- /otree/locale/zh_Hans/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/oTree-org/otree-core/HEAD/otree/locale/zh_Hans/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /otree/locale/babel.ini: -------------------------------------------------------------------------------- 1 | [extractors] 2 | otreetemplate = otree.i18n:extract_otreetemplate_internal 3 | 4 | 5 | [otreetemplate: **.html] 6 | [python: **.py] 7 | -------------------------------------------------------------------------------- /otree/app_template_lite/Results.html: -------------------------------------------------------------------------------- 1 | {{ block title }} 2 | Page title 3 | {{ endblock }} 4 | 5 | {{ block content }} 6 | 7 | {{ next_button }} 8 | {{ endblock }} 9 | 10 | 11 | -------------------------------------------------------------------------------- /otree/test.py: -------------------------------------------------------------------------------- 1 | # for compat with apps written in older versions 2 | # unfortunately this is still hardcoded in some widespread apps' _builtin/__init__.py 3 | from otree.bots import Bot # noqa 4 | -------------------------------------------------------------------------------- /otree/templates/otree/SessionDescription.html: -------------------------------------------------------------------------------- 1 | {% extends "otree/Session.html" %} 2 | 3 | {% block content %} 4 | {{ super() }} 5 | {% include 'otree/includes/SessionInfo.html' %} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /otree/app_template_lite/MyPage.html: -------------------------------------------------------------------------------- 1 | {{ block title }} 2 | Page title 3 | {{ endblock }} 4 | {{ block content }} 5 | 6 | {{ formfields }} 7 | {{ next_button }} 8 | 9 | {{ endblock }} 10 | -------------------------------------------------------------------------------- /otree/project_template/.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | staticfiles 3 | ./db.sqlite3 4 | .idea 5 | *~ 6 | *.sqlite3 7 | _static_root 8 | _bots*s 9 | __temp* 10 | __pycache__/ 11 | *.py[cod] 12 | .DS_Store 13 | *.otreezip -------------------------------------------------------------------------------- /otree/project_template/_templates/global/Page.html: -------------------------------------------------------------------------------- 1 | {% extends "otree/Page.html" %} 2 | {% load otree static %} 3 | 4 | {% block global_styles %} 5 | {% endblock %} 6 | 7 | {% block global_scripts %} 8 | {% endblock %} -------------------------------------------------------------------------------- /otree/project_template/requirements.txt: -------------------------------------------------------------------------------- 1 | # oTree-may-overwrite-this-file 2 | # IF YOU MODIFY THIS FILE, remove this comment. 3 | # otherwise, oTree will automatically overwrite it. 4 | otree>=5.0.0a21 5 | psycopg2>=2.8.4 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | database.db 3 | dist/ 4 | docs/_build/doctrees 5 | docs/_build/html/_sources/ 6 | docs/app/Thumbs.db 7 | myapp* 8 | .idea/ 9 | *.pyc 10 | db.sqlite3 11 | .tox/ 12 | .coverage 13 | htmlcov/ 14 | tests/_static_root 15 | __temp_* 16 | -------------------------------------------------------------------------------- /otree/app_template/tests.py: -------------------------------------------------------------------------------- 1 | from otree.api import Currency as c, currency_range 2 | from . import pages 3 | from ._builtin import Bot 4 | from .models import Constants 5 | 6 | 7 | class PlayerBot(Bot): 8 | def play_round(self): 9 | pass 10 | -------------------------------------------------------------------------------- /otree/models/__init__.py: -------------------------------------------------------------------------------- 1 | from otree.models.subsession import BaseSubsession 2 | from otree.models.group import BaseGroup 3 | from otree.models.player import BasePlayer 4 | from otree.models.session import Session 5 | from otree.models.participant import Participant 6 | -------------------------------------------------------------------------------- /otree/app_template/templates/app_name/Results.html: -------------------------------------------------------------------------------- 1 | {% extends "global/Page.html" %} 2 | {% load otree static %} 3 | 4 | {% block title %} 5 | Page title 6 | {% endblock %} 7 | 8 | {% block content %} 9 | 10 | {% next_button %} 11 | {% endblock %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /otree/templates/otree/CreateSession.html: -------------------------------------------------------------------------------- 1 | {% extends "otree/BaseAdmin.html" %} 2 | 3 | {% block title %} 4 | Create a new session 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 9 | {% include "otree/includes/CreateSessionForm.html" %} 10 | 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /otree/app_template/templates/app_name/MyPage.html: -------------------------------------------------------------------------------- 1 | {% extends "global/Page.html" %} 2 | {% load otree static %} 3 | 4 | {% block title %} 5 | Page title 6 | {% endblock %} 7 | 8 | {% block content %} 9 | 10 | {% formfields %} 11 | {% next_button %} 12 | 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /otree/templates/otree/includes/TimeLimit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
{{ timer_text }} 6 | 7 | 8 | 9 |
10 |4 | {{ config.doc|safe }} 5 |
6 | {% endif %} 7 | 8 || {{ app.name }} | 14 |
15 | 16 | {{ app.doc|safe }} 17 | 18 | |
19 |
|---|
| {{ k }} | 22 |
23 | {{ v }}
24 | |
25 |