Skip to content

Latest commit

 

History

History
1133 lines (837 loc) · 64.1 KB

CHANGELOG.md

File metadata and controls

1133 lines (837 loc) · 64.1 KB

Change Log

v10.0.1 (2024-03-04)

Added

  • Implemented Experiment.get_status, a customizable method that reports the current status of the experiment.
  • Implemented Experiment.before_request and Experiment.after_request, customizable hooks for running code before and after HTTP requests.

Fixed

  • Fixed Chrome and ChromeDriver download link in Dockerfile.
  • Fixed dallinger requirement in demos and updated demos' constraints.

Removed

  • Removed unused numpy and pandas dependencies.

Updated

  • Infrastructure: Updated dependencies; pin pytest == 8.0.0.

v10.0.0 (2024-02-15)

Breaking

  • Removed support for Python 3.8.

Added

  • Added support for Python 3.12.
    • Remove version pinning for numpy, pandas, pre-commit, sphinx, and sphinx-related packages.
    • CI: Added Python 3.12 to GitHub workflow matrix and run Full tox tests for both Python 3.11 and 3.12.
    • CI: Use Docker image python:3.12-bullseye.
  • The config parameter num_dynos_worker (default: 1) which allows for the configuration of the number of workers can now also be used in SSH deployments. This change is beneficial for parallellizing heavy background worker processes. Previously, this config parameter only worked for Heroku deployments.
  • Added grace_period 30s to Caddy HTTP server configuration to prevent the Caddy server from 'getting stuck' sometimes.
  • Added better checks in dallinger docker-ssh for pre-existing apps with the same name.
  • Added Dozzle service to dallinger docker-ssh deployments.

Changed

  • Revised logging text for Prolific.
  • Improve handle_launch_data error reporting and use it also for docker-ssh deployments.

Updated

  • Infrastructure: Updated dependencies; pin ipython < 8.19.

v9.12.0 (2024-01-03)

  • Changed: Removed the character limit for the 'type' attribute on SQLAlchemy classes.
  • Infrastructure: Migrated project configuration/metadata to pyproject.toml and removed the setup.py and setup.cfg files. Also moved flake8 config to new .flake8 file.
  • Infrastructure: Updated dependencies; pinned version of pre-commit package in order to be compatible with Python 3.8.

v9.11.0 (2023-12-18)

  • Fixed bug where the dashboard URL was no longer printed in the dallinger develop command.
  • Fixed bug where participant IDs weren't always displaying properly in the dashboard network visualization. In particular, this fix concerns the labelling of edges between nodes and infos.
  • Fixed bug in get_polymorphic_mapping which was causing the experiment dashboard to fail when two classes of the same name were registered both in the local experiment and in another package.
  • Fixed and refactored Chrome/ChromeDriver download and installation to resolve failing docker CI job.
  • Removed the prolific_reward_cents config variable. Use base_payment instead to set base compensation for participants. Note that base_payment is written in terms of the base unit for the currency, not in cents. So, if your prolific_reward_cents was originally set to 50, then you should set your base_payment to 0.5.
  • Enhancement: Added a pgbouncer container/proxy that will pool postgresql connections to solve problems with too many PostgreSQL connections in docker-ssh deployments.
  • Enhancement: Added 'Support Slack channel' advert to documentation index page and README.
  • Enhancement: Allow recruiters to be instantiated outside active experiments by making completion_code a property of class Recruiter.
  • Infrastructure: Updated the packages used in GitHub workflow configurations (ci.yml, deploy.yml) to their latest versions.
  • Deprecated the prolific_maximum_allowed_minutes config variable.

v9.10.0 (2023-08-18)

  • Enhancement: Added support for custom WorkerEvents allowing experiments to run tasks asynchronously on worker processes.
  • Fixed: Migrated experiment_server/sockets.py to use the Flask-Sock library.
  • Enhancement: Added a control channel that all socket enabled experiments will listen on for "administrative" messages (e.g. connect/disconnect).
  • Enhancement: Updated WebSocket experiment integraton to use Async processing by default and update documentation.
  • Enhancement: Added boolean include_sensitive param to Config.as_dict.
  • Fixed: Corrected waiting room url issue.
  • Fixed: Fixed the display of participant IDs in the dashboard monitor.
  • Infrastructure: Updated setup-chromedriver to v2.1.2.
  • Infrastructure: Updated dependencies; pinned versions of sphinxcontrib-* packages in order to be compatible with Python 3.8.

v9.9.0 (2023-07-27)

  • Fixed: Added check for dependencies using pkg_resources.
  • Fixed: Fixed issues where CI jobs were failing due to changes of how ChromeDriver needs to be downloaded for Chrome versions >= 115.
  • Enhancement: Added new Experiment method on_assignment_submitted_to_recruiter to allow experiment authors to override the behavior when a participant finishes an experiment.
  • Enhancement: Added --update option to dallinger docker-ssh deploy.
  • Enhancement: Make it possible to destroy a partially deployed app.
  • Enhancement: Added new config variable lock_table_when_creating_participant to prevent possible deadlocks on the Participant table.
  • Enhancement: Added sanity checks for dallinger docker-ssh deploy to fail early in case the option --dns-host doesn't refer to a properly configured name and issue a warning that some browsers might deem the domain insecure.
  • Removed: Removed --resolver=backtracking from pip-compile commands as it became the default in pip-tools 7.0.0.
  • Documentation: Updated section on releasing a new version of Dallinger.
  • Infrastructure: Updated dependencies; replaced bumpversion with bump2version.

v9.8.2 (2023-07-03)

  • Fixed a bug in dlgr.submitAssignment that was causing MTurk HIT submission to fail. This bug was introduced in v9.8.0 when fixing another bug. The bug meant that externalSubmit was being called in the popup window, not the MTurk iframe, causing submission to fail.

v9.8.1 (2023-06-22)

  • Fixed deployment to Heroku due to Heroku now appending identifiers to subdomains.
  • Fixed indentation bug writing Docker volumes in docker-compose.yml.j2.
  • Fixed visualization bug in dashboard monitor.
  • Fixed previously skipped Redis message queue test.
  • Fixed some typos.
  • Infrastructure: Updated dependencies; require numpy < 1.25.

v9.8.0 (2023-06-05)

  • Fixed several bugs that were manifesting on SSH deployments, some of which were specific to Prolific:
    • Fixed wrong signature for executor.run() call in docker_ssh.py.
    • Ensured that config is loaded before every Flask request; previously config was not loading in advance of the serving of static files and this was causing server errors.
    • Fixed a bug in parent window closing which was preventing Prolific experiments from completing.
    • Ensured that all fields in dallinger.identity are set properly when calling dallinger.createParticipant.
  • Fixed bug in Docker SSH when removing a pre-existing app with the same name.
  • Fixed various deprecation warnings:
    • Fixed 'DeprecationWarning: use options instead of chrome_options'.
    • Removed distutils.
    • Removed pkg_resources by replacing corresponding code using importlib.metadata.
    • Removed leftovers of support for Python 3.7 (importlib_metadata).
    • Migrated to setuptools.find_namespace_package for adding the dlgr.demos namespace.
  • Removed all mentions of Python 3.7; updated other Python version mentions consistently to 3.8, 3.9, and 3.10.
  • Fixed: Make sure docker_volumes is not empty when adding additional volumes to docker-compose.yml.
  • Fixed deprecation warning 'Rename method_whitelist to allowed_methods' (urllib3.util.retry.Retry) incl. compatibility for urllib3 < 1.26.0.
  • Fixed tests for mock 5.0.2.
  • Improvements to 'unique ID' storage:
    • Save uniqueId in dlgr.identity JavaScript object
    • Increase unique_id database column string size to 150
  • Infrastructure:
    • Added Python 3.11 to list of supported programming languages
    • Added Python 3.11 to CI workflow and updated Dockerfile to use Python 3.11
  • Infrastructure: Updated dependencies; require ipython < 8.13.

v9.7.0 (2023-04-27)

  • Fixed: Fixed failure in docker-ssh deploy that occurred when the app existed already.
  • Fixed: Fixed a bug where config dashboard credentials weren't being propagated to Docker deployments.
  • Fixed: Fixed a bug where app name / ID (app_name) was not set appropriately in config during Docker deployment. Now when deploying with docker-ssh using a specified --app argument this is saved as expected in config.heroku_app_id.
  • Fixed: Fixed a bug where dollar signs weren't being escaped in docker-compose.yml.
  • Fixed: Fixed a bug where the dashboard tab was closed on submitAssignment().
  • Fixed: Replace Heroku obsolete dyno type 'hobby' with 'basic'.
  • Enhancement: Added UI switch to the dashboard's experiment monitoring tab to toggle auto recruitment (auto_recruit) on/off.
  • Enhancement: Added new boolean config variable activate_recruiter_on_start (default: True). If the variable is set to True, then existing behavior is preserved; if set to False, then open_recruitment() is skipped when the experiment launches. This means that the user has to manually initialize recruitment (e.g. via the Prolific panel).
  • Infrastructure: Updated dependencies.

v9.6.0 (2023-04-18)

  • Fixed: Fixed GitHub CI builds by removing the codecov package from setup.py and migrating the codecov setup according to https://docs.codecov.com/docs/deprecated-uploader-migration-guide#python-uploader.
  • Fixed: Fixed broken Docker CI tests.
  • Fixed: Reinstate auto_recruit check in ProlificRecruiter.recruit().
  • Fixed: The original Bot constructor assumed that the participant recruitment URL was specified in snake case. However the Docker CI tests use participant recruit URLs with camel case. This was causing Bot parameters (assignment ID, worker ID, participant ID) to be left unset, and seemed to have caused occasional CI errors in the Docker tests.
  • Fixed: Fixed bug in docker-ssh export caused by upgrade to docker compose v2.
  • Enhancement: Enhanced efficiency in dashboard monitor data loading. Previously the dashboard could take a very long time to load when the database contained many custom object classes. In such cases we are now running about 1000 times faster.
  • Infrastructure: Updated dependencies.

v9.5.0 (2023-03-29)

  • Fixed: Backward compatibility with rq < 1.13.0.
  • Fixed: Fixed error whereby incompatible Docker credential files would be copied to the remote server.
  • Fixed: Fixed error where environment variables were missing from docker build invocations.
  • Enhancement: Run pip-compile in verbose mode.
  • Enhancements to the Dallinger network monitor:
    • Selecting a single network only redraws the graph on the front end and does not require reloading all data from the DB again.
    • Networks can be sorted by network ID, number of failed, completed, and pending Infos, as well as the number of failed and completed nodes.
    • Sorting can be done in ascending and descending order.
    • Users can show the top X networks if there are too many networks in an experiment.
    • Users can use free-text search to look for attributes in networks.
    • Cleaned up the panels in the monitor giving more space to the monitor itself.
  • Enhancements to Prolific recruitment:
    • Extended dallinger hits [--recruiter=prolific|mturk] [--sandbox] to work with Prolific as well.
    • Addition of two new command line tools:
      • dallinger hit-details --hit_id XYZ [--recruiter=prolific|mturk] [--sandbox] which pastes all the HIT details in the console window.
      • dallinger copy-qualifications --hit_id XYZ [--recruiter=prolific|mturk] [--sandbox] which copies the requirements to participate in an experiment (e.g country or the number of completed tasks) from an existing HIT and saves it into a JSON file.
  • Enhancement: Added Experiment.config_class, a hook for customizing the Configuration class.
  • Infrastructure: Update dependencies.
  • Infrastructure: Upgrade to Docker Compose v2.

v9.4.3 (2023-02-25)

  • Fixed: Check if auto_recruit is True in order to autorecruit a new participant.
  • Fixed: Rename 'default_worker_ttl' to 'worker_ttl' to work with rq==1.13.0 (See https://github.com/rq/rq/commit/b69ee10cbba78789e48ce44fa69f14715d94b7a5).
  • Fixed: Remove extras from sonstraints and requirements files.
  • Changed: Add soon to be default resolver 'backtracking' to pip-compile commands.
  • Enhancement: Add better logging on Prolific JSONDecodeError.
  • Enhancement: Ensure that Prolific API token is sent to the deployed server.
  • Infrastructure: Update dependencies.

v9.4.2 (2023-02-14)

  • Fixes:
    • Updated error catching logic to standardise case before catching ExecuteException error when deploying with Docker-SSH.
    • The collate_experiment_files function is responsible for constructing the experiment directory that is eventually deployed. Due to an oversight, the original version was written in a way such that it was impossible to override built-in Dallinger resources using the extra_files hook; such cases were instead silently ignored. This has now been rectified.
    • Added db.session.commit() at the end of scheduled task check_db_for_missing_notifications in case the server process has to be restarted. This would cause errors otherwise, because there would never be a moment at which the connection could be gracefully terminated.
    • Fixed URL link of Dallinger logo.
  • Infrastructure: Update dependencies; add pyopenssl to install_requires in setup.py.

v9.4.1 (2023-02-07)

  • Fixed: Docker image caching problems with SSH deployment.
  • Fixed: Redis server contamination when deploying multiple apps with the same name via SSH.
  • Fixed paramiko import.
  • Changed: Allow base pay to be 0 (for Prolific recruitment).
  • Infrastructure: Update dependencies.

v9.4.0 (2023-01-26)

  • Enhancement: Refactored advertisement method to prepare the advertisement in a separate function prepare_advertisement. This allows wrappers around Dallinger, e.g. PsyNet, to use other rendering functions than the one used in Flask. For example, this is important if you want to add custom Jinja2 filters or add translations.
  • Enhancement: Add a new customizable config_defaults method on the Experiment class that allows the user to specify custom default values for config variables.
  • Enhancement: Add source=dashboard to the entry information stored for participant sessions created via the dashboard. This helps to distinguish debugging participants from 'real' participants.
  • Infrastructure: Added isort to the list of pre-commit hooks to sort imports alphabetically, and automatically separated into sections and by type.
  • Infrastructure: Update dependencies; pinning SQLAlchemy to a version <2.

v9.3.1 (2023-01-17)

  • Bugfix and Enhancements for Prolific recruitment:
    • Bugfix: Prevent the survey from being published when sandboxing. Before, when mode was set to "sandbox" in config.txt the survey was published on Prolific.
    • Enhancement: Extended the Prolific documentation showing how to select specific devices (e.g., desktop only) or additional hardware (e.g., microphone).
    • Enhancement: Only use the app hash in the internal title and not in the public title as this is not informative to participants.
    • Enhancement: Explicitly log whether the experiment is sandboxed or deployed to Prolific.
  • Bugfix: Fixed unpublished doc pages.
  • Enhancement: Eliminate unnecessary 'is not a valid configuration key' errors.
  • Infrastructure: Update dependencies

v9.3.0 (2022-12-16)

  • Enhancement: Docker quality of life improvements
    • Major
      • Disabled the behavior where the built image name is written to config.txt. This behavior was inconsistent with the other Dallinger deployment patterns, because it meant that if you deployed once, changed code in experiment.py, then redeployed, then the experiment would launch in the former version unless you remembered to delete the image name from config.txt.
      • Heroku deployments were failing because the default heroku_python_version had been discontinued by Heroku. We have experienced similar problems in the past and have always had to update Dallinger. Now we have changed the behaviour such that, if heroku_python_version is not specified in the experiment config, then it will use the default Python runtime currently in use by Heroku.
    • Minor
      • Propagate more information from deployment-related functions (e.g. dashboard credentials) so that they can be used by wrapper functions.
      • Print more information (e.g. dashboard credentials) in deployment-related functions.
      • Better debugging logs for docker-ssh deployments.
      • Move deployment info logs from deployment-info_{experiment_id}.txt to deploy_logs/* to avoid clutter.
      • Move default dallinger_develop_directory to /tmp/dallinger_develop because the original location was not writable by default on Docker.
      • Minor bugfixes in docker-ssh deployment/export.
      • Rename config variable docker_ssh_volumes -> docker_volumes because it's relevant also when we're doing docker locally.
      • Some minor renaming of internal variables for consistency.
  • Infrastructure: Update dependencies; readd sphinx-js package
  • Infrastructure: Update GitHub workflows to use 'ruby-version: 3.1'
  • Infrastructure: Migrate to new Heroku Postgres/Redis plans

v9.2.1 (2022-11-26)

  • Bugfix: Fixed flake8 URL to make the pre-commit test pass again
  • Bugfix: Prevent accessing database tables when checking for protected routes. This fixes the issue of being unable to deploy to Heroku as Dallinger tried to access database tables before they were created.
  • Infrastructure: Update dependencies

v9.2.0 (2022-10-31)

  • Infrastructure: drop Chandler automatic CHANGELOG -> release notes syncing, as Chandler is no longer maintained and was causing problems with releases

v9.1.0 (2022-10-28)

  • Feature: Infrastructure and documentation to support running Dallinger with only Docker as a deployment dependency
  • Feature: Allow experiment authors/deployers to disabled some or all of Dallinger's native routes via a new protected_routes configuration variable
  • Feature: Improved experience when using dallinger develop in conjunction with IDE's which provide deep integration with Flask, like Pycharm. Pass a --skip-flask option when running dallinger develop debug: dallinger develop debug --skip-flask
  • Feature: Configurability of the directory used to store files and symlinks when using dallinger develop, via a new dallinger_develop_directory configuration variable. By default, this value is ~/dallinger_develop.
  • Feature: Allow defining classes which subclass Dallinger's Vector class in the same way it's always been possible to subclass the Node class
  • Feature: Support for private Docker image repositories
  • Feature: Support for specifying additional volumes to mount when deploying with dallinger docker-ssh deploy, via a new docker_ssh_volumns configuration variable
  • Feature: Support for customizable app name when deploying with Docker
  • Enhancement: ensure that database tables are all dropped correctly when the database is reinitialized
  • Enhancement: Add explicit foreign_keys configuration to ORM relationship declarations to ensure additional foreign keys can be added in subclasses
  • Bugfix: Fixed problem where Docker commands put the user's terminal in an unusable state
  • Infrastructure: Update dependencies

v9.0.1 (2022-06-17)

  • Enhancement: Persist docker deployment infos to a file in the current directory
  • Infrastructure: Update dependencies

v9.0.0 (2022-05-19)

  • Infrastructure: Drop support for Python 3.7
  • Infrastructure: Update versions of various dependencies, including those which had been impossible while retaining Python 3.7 compatibility, e.g. Flask to v2.x, Jinja2 to v3.x, numpy to 1.22.x, pandas to v1.4.x, click to 8.x and Sphinx to 4.5.x
  • Enhancement: Add a check for circular imports in experiment module loading
  • Enhancement: Enforce standard Python code style by applying "black" v22.3.0
  • Bugfix: Add clock support in Docker
  • Fix typos and some broken links in docs

v8.1.0 (2022-03-25)

  • Enhancement: numerous usability improvements and enhancements to tools which provide hot reloading of dallinger and experiment code while developing: run dallinger developer debug from the experiment directory, wait a few moments, then the dashboard appears, presenting a button which the user can press to open a new participant window
  • Enhancement: dallinger debug startup time reduced by 5 seconds by opening the dashboard browser window asyncronously
  • Enhancement: improvements to the experiment network visualization in the Dallinger dashboard:
    • the text by Infos so that it says the class name rather than just 'info'
    • fixed an issue for the display of networks that have no nodes; previously the visualization would draw a line between these networks and an unrelated node from a different network, but now the network is just diplayed without any connections
  • Enhancement: ensure dallinger debug executes in --verbose mode in automated tests, and correctly propagates logging output to pytest so all errors are visible

v8.0.0 (2022-02-22)

  • Potential breaking change: The function signature of the Recruiter.reward_bonus() method has changed, so if you've implemented your own recruiter, this will need to be updated.
  • Feature: Support for recruitment via the Prolific platform
  • Feature: Dallinger dashboard tabs can be hidden by including their route names in a hidden_dashboards attribute (a tuple) on your custom Experiment subclass.
  • Enhancement: dallinger.createParticipant() method now always stores entry_information on the Participant record by default, falling back to the old mechanism if no entry_information can be extracted from the URL/Request.
  • Enhancement: when running dallinger generate-constraints, if the requirements-dev.txt file for the current Dallinger version can't be found on github the local one is looked up (and can be found if dallinger was installed in editable mode) and used.
  • Bugfix: Dallinger's templates now use Flask's url_for() function to generate absolute URLs
  • Infrastructure: MTurk integration test stability improvements

v7.8.0 (2021-11-29)

  • Documentation: Docs for dallinger docker start-services
  • Bugfix: Releases should now update dallinger.readthedocs.io correctly
  • Bugfix: Remove references to now-unsupported PhantonJS headless browser
  • Enhancement: dallinger debug now works without an internet connection
  • Bugfix: When setting environment variables on Heroku or in Docker containers, use an all uppercase spelling of the AWS environment variables for better compatibility with recent boto versions
  • Enhancement: when using the CLIRecruiter or HotAirRecruiter, a message now appears in the debug command output with the link to the recruiter ad URL with the generate_tokens parameter enabled. (This link can be reused by any number of participants.)

v7.7.0 (2021-10-07)

  • Experimental: new --archive option to dallinger docker-ssh deploy command loads an existing database dump from a zipfile exported with the dallinger export subcommand
  • Bugfix: fixes to the descriptions for dallinger docker-ssh export and dallinger docker-ssh stats subcommands
  • Bugfix: dallinger.loadParticipant() Javascript function now correctly assigns the participant's assignment ID to dallinger.identity.assignmentId
  • Bugfix: more robust assurance that Postgres DB URIs generated by Heroku work with current versions of SQLAlchemy and Postgres
  • Bugfix: fix package long description so it displays on pypi landing page
  • Enhancement: improvements to release process and dependency version management

v7.6.0 (2021-08-03)

  • Experimental: alpha version of as yet undocumented dallinger develop features
  • Enhancement: error handling and logging for the create_participant() function (and Flask route) to provide more information when participant creation fails
  • Bugfix: Read the Docs integration fix, so documentation will again be generated on https://readthedocs.org/projects/dallinger/
  • Bugfix: some demos did not write Nodes created during initial network setup to the database
  • Bugfix: fix bug which caused Chrome browser profile to be written to a folder named "" in the experiment temp directory instead of a transient temp folder

v7.5.0 (2021-06-30)

  • Experimental: new dallinger docker-ssh stats command to show per container CPU and memory usage info as displayed by docker stats on the remote host
  • Feature: A new language configuration parameter for setting a gettext () language. Default value is en.
  • Feature: A new optional url parameter to the /ad route which allows for automatic generation of the recruiter entry information parameters (hitId, assignmentId, workerId). When an ad url is sent with ?generate_tokens=1 the ad route will redirect to the ad route with all request arguments (except generate_tokens) preserved, and random values for any of the standard entry information parameters that weren't provided.
  • Enhancement: Better exception logging/handling in dallinger.experiment.load(). When no class is found in the imported experiment, it will log the first ImportError exception that was triggered in addition to a message about the class not being available.
  • Enhancement: sometimes an error occurs and dallinger debug immediately shuts down the process before logging the traceback has been output. We now continue to read the process output until it hits a new error, the process has exited, or one second has elapsed (it's a very short time because this is generally just a buffering issue, and the output should be available immediately).
  • Enhancement: support installing Dallinger in a directory with spaces in the name
  • Enhancement: MTurk qualification creation and assigment is slow, so we now do is asynchronously in a worker dyno.
  • Bugfix: fix bug in error handling which resulted in storing invalid values for a participant's HIT ID and assignment ID

v7.4.0 (2021-05-20)

  • Experimental: Support for deploying to using Docker containers:

    • Deployment to Heroku using a Docker container
    • Docker image creation from an experiment
    • Deployment of the created image to a self-hosted server via ssh Related commands:
      • dallinger docker-ssh apps
      • dallinger docker-ssh deploy
      • dallinger docker-ssh export
      • dallinger docker-ssh destroy

    Note that these features should be regarded as experimental and are included in a release primarily to facilitate beta testing.

v7.3.0 (2021-05-04)

  • Enhancement: Increase the length limit on app names from 8 to 18 characters NOTE: we do not recommend attempting to upgrade your local Dallinger installation while managing an ongoing experiment, as the change in naming conventions will break some dallinger commands
  • Enhancement: a new @dallinger.experiment.scheduled_task decorator allows methods on the experiment class to be used as background tasks to be run by the Heroku clock server
  • Enhancement: Added experiment_routes Flask Blueprint to the Experiment class along with an experiment route registration decorator dallinger.experiment.experiment_route to register classmethods on experiment classes as flask routes.
  • Enhancement: Added dallinger.experiment_server.dashboard.dashboard_tab decorator to register classmethods on experiment classes as new dashboard tabs.

v7.2.1 (2021-05-04)

  • Bugfix: command helper for extend-mturk-hit was misspelled on the MTurk Dashboard
  • Bugfix: if the participant has already closed the parent experiment window, show the recruiter exit window in the second/child window instead

v7.2.0 (2021-04-08)

  • Enhancement: Default python version for Heroku bumped to 3.9.2
  • Enhancement: a new debug_recruiter config variable and support for registering a recruiter class at runtime provides the infrastructure to define custom recruiters
  • Enhancement: a new config parameter disable_when_duration_exceeded (enabled by default to preserve default experiment behavior). When this parameter is set to False the duration exceeded event triggered by the clock server will not disable the MTurk auto-recruit or expire an MTurk HIT.
  • Enhancement: To provide more insight into your MTurk HIT inventory (similar to feature of https://manage-hits-individually.s3.amazonaws.com), you can now view all your HITs with dallinger hits instead of forcing you to specify a Dallinger app ID
  • Enhancement: dallinger expire command now supports specifying a specific HIT ID to expire, via the hit_id parameter, in addition to the classic app parameter for expiring a HIT based on its relationship to an experiment ID.
  • Enhancement: Allow greater experimental control over when and how qualifications are assigned to workers for recruiters supporting qualifications. A new Experiment method participant_task_completed() will be called with a Participant instance when that participant completes the assignment. The default implementation replicates the current behavior by assigning a qualification based on the experiment ID, plus one or more additional qualifications based on the group_name config value. A second new method, calculate_qualifications(), can be overridden to change which qualifications are granted. Because the experiment is now responsible for triggering qualification assignment, this no longer needs to be done at experiment end; any time the experiment is called with a Participant as an argument can be viewed as an opportunity to assign qualifications, by calling the assign_experiment_qualifications() method on the Participant's recruiter instance.
  • Bugfix: Improved error handling of local Postgres connection
  • Bugfix: dashboard link to configuration docs is fixed
  • Bugfix: prioritize the Experiment's calculation from is_overrecruited() over anything else when deciding whether to let a Participant into the experiment
  • Bugfix: correctly identify when we are performing a remote deployment, so we can perform the right set of pre-deployment checks
  • Bugfix: If a --proxy port is specified when running dallinger debug, the dashboard now also uses it

v7.1.0 (2021-03-19)

  • Initial docker support: dallinger docker debug command to run dallinger in a local container
  • Feature: For experiments not using the MTurk Recruiter, it is now possible to display customizable information to the worker on experiment completion via a new exit_info_for(participant) method on the experiment class, which can be overridden in custom Experiment subclasses. For example, you might show a randomly generated code that is used to validate their session with an external recruitment service. The template for this exit page (exit_recruiter.html) can also be overridden in custom experiments.
  • The /ad route is now greatly simplified
  • No longer pin all transitive dependencies, so experiments can more easily specify the versions they require
  • Suppress duplicate use of [blah] as value for polymorphic_identity warnings
  • Further speedups for dallinger debug startup time
  • New CLI command dallinger generate-constraints automatically generates a constraints.txt file based on the current experiment environment, so the versions deployed to the remote environment match what's been tested locally
  • Bugfix: correct extraction of URL parameters into dallinger.identity JavaScript object
  • Bugfix: normalize database connection scheme to prevent errors with Heroku deployment

v7.0.0 (2021-02-11)

  • Infrastructure: Drop support for python 2.x :-/
  • Infrastructure: Add support for python 3.9 :-)
  • Infrastructure: Update versions of many dependencies, which had been impossible while retaining python 2 compatibility
  • Feature: Core objects with implement fail() now accept an option reason for failure, which will be stored in a failed_reason database columns

v6.6.0 (2021-01-04)

  • Bugfix: Escape HTML stored in DB records for display in the Database Dashboard
  • Bugfix: Support display of JSON lists in Database Dashboard
  • Bugfix: Store the current MTurk HIT ID in redis to avoid errors on the MTurk Dashboard for accounts with many HITs
  • Bugfix: Support deployment on Heroku using Redis version 6 by opting out of certificate validation
  • Bugfixes and enhancements to the Network Monitoring Dashboard:
    • Font Awesome icons are displayed properly on load
    • Column layout is displayed correctly
    • A new top level Experiment node is added to the visualization to aid in grouping. All network roles (under which Networks are grouped) are connected to the Experiment node.
    • A new experiment method node_visualization_options is available returning a dictionary of values that will be injected into the vis.js options configuration for experiment specific layout/visualization tweaks.
    • The default node spacing has been increased
    • Documentation updates
  • Question records now viewable via the Database Dashboard
  • Document AWS IAM permissions required to run experiments with the MTurk recruiter
  • Add short version of app ID to MTurk HIT title, so the title is unique across multiple experiment runs
  • Fix documentation of dallinger compensate CLI command

v6.5.0 (2020-09-09)

  • New dallinger.loadParticipant function to load participant data into the browser based on an assignmentId
  • Performance improvement: dallinger debug now starts up in about half the time
  • Delegates participant creation to Experiment create_participant method and participant_constructor attribute to allow experiments to specify custom Participant classes.
  • Add extensible actions to the dashboard database view.
  • Disable global S3 experiment registration by default.
  • Provide a new --archive option to dallinger deploy and dallinger sandbox which makes it possible to start an experiment run with the database populated from an experiment archive created with dallinger export

v6.4.0 (2020-08-03)

  • Bugfix: Fixes for Dashboard monitor layout and color issues
  • New customizable database dashboard for viewing live experiment data
  • Fixes and enhancements to the Lifecycle and Heroku dashboards
  • Use localhost as hostname when running in debug mode by default.
  • Dashboard credentials can now be set using configuration parameters.

v6.3.1 (2020-07-21)

  • Bugfix: Dashboard authentication now works with multiple web processes and dynos
  • Bugfix: Correct accidental change to Dallinger version used in Bartlett1932 demo
  • Update webdriver call to avoid deprecation warning

v6.3.0 (2020-07-08)

  • Add file:/path/to/file support to configuration system.
  • Add validators to configuration system.
  • Add new qualification_requirements config parameter to add explicit MTurk qualifications.
  • New, extensible /dashboard infrastructure for viewing and manipulating details of the live experiment, protected by a username and password (see http://docs.dallinger.io/en/latest/monitoring_a_live_experiment.html#the-dashboard)
  • New dallinger extend_mtuk_hit command: extend an existing MTurk HIT by adding assignments, and optionally, additional time before expiration.

v6.2.2 (2020-04-27)

  • Bugfix: revert change to HOST configuration which broke Heroku deployments (see #2130)

v6.2.1 (2020-04-25)

  • New dallinger compensate command: compensate a worker a specific amount in US dollars. This is useful if something goes wrong with the experiment and you need to pay workers for their wasted time.
  • New dallinger email_test command: validate and test your email settings quickly and easily.
  • Much of Dallinger core's test infrastructure has been moved to a pytest plugin called pytest_dallinger, which incorporates various fixtures from the Dallinger tests that are useful for writing experiment tests and adds some new fixtures and utility functions for that purpose.

v6.1.0 (2020-04-10)

  • No longer retry /launch route in debug mode. Additional logging for launch retries.
  • Allow setting of separate optional dyno_type_web and dyno_type_worker parameters.
  • Regression fix: experiment files with apostrophes and non-ascii characters in file names are again supported
  • Documentation for including dependencies on private repositories

v6.0.0 (2020-03-24)

  • Allow control of which python version will be run on Heroku through a new configuration variable heroku_python_version. If not overriddent the default version of 3.6.10 will be used.
  • If files in the custom experiment directory are excluded by Git (by a local or global .gitignore file, $GIT_DIR/info/exclude, etc.), they will not be copied for use in deployment or dallinger debug runs. They will also be excluded from file size checks performed automatically during debug and deployment, and by dallinger verify.
  • Add failed parameter to the add info route. This requires that all custom Info classes respect a failed keyword argument.
  • Fixed an issue preventing the use of multisect fields in questionnaires, so multiple selections from a multiselect HTML input will now be persisted into the database as an array.

v5.1.0 (2019-08-29)

  • As MTurk REST notifications are deprecated, the MTurk Recruiter creates an SNS Topic based on the experiment UID, subscribes to it, performs a subscription endpoint confirmation step, then associates the subscription with the HIT in order to receive notifications from MTurk about worker and HIT events
  • MTurk code for registering HITs for REST notification using deprecated/discontinued API removed
  • Dallinger /notifications endpoint removed, and replaced by a /mturk-sns-listener Flask Blueprint route associated with the MTurk Recruiter
  • Some utility functions moved out of experiment_server.experiment_server and into experiment_server.utils and experiment_server.worker_events to avoid circular dependencies and unwanted import side-effects
  • notification_url removed as a config key
  • Event resubmissions by MTurkRecruiter no longer call a Flask route to initiate processing, and instead enqueue the tasks directly

v5.0.7 (2019-03-29)

  • Improve persistence of participant attributes in dallinger.identity, so that these keys and values do not need to be passed between pages as URL parameters in order to preserve them
  • Check the total size of the experiment files that will be copied and deployed, and abort if this exceeds 50MB, to avoid making potentially many copies of large files over repeated experiment runs
  • Consolidated configuration defaults in global_config_defaults.txt so default values aren't defined throughout the codebase
  • Documentation improvements and additions:
    • Command Line Utility section: Added previously undocumented commands and expanded on optional parameters
    • New Recruitment section: Detailed documentation of Amazon Mechanical Turk recruitment
    • Include link to Thomas Morgan's beginner documentation
  • Internal/Developer-centric changes:
    • Enforce standard Python code style with "black" <https://black.readthedocs.io/en/stable/>__
    • Mark slowest tests so they're skipped by default (use the --runslow flag to run them)

v5.0.6 (2019-02-28)

  • Heroku has deprecated the use of the --org parameter which previous versions of Dallinger used. This release fixes Dallinger to use the newer --team parameter instead, which has been available in Heroku for quite some time. The change was introduced in Heroku CLI 7.21. The --team parameter was introduced in Heroku a significant time ago, thus this version of Dallinger will work with many older versions of the Heroku CLI. If using an older version of the Heroku CLI, we recommend updating to the latest version.

  • Improve launch retry messaging when running in debug mode

  • dallinger verify now fails if you have more than one Experiment class

  • Fixed: Add details JSON data to __json__ methods for all models.

  • Fixed bug related to running Dallinger with Redis 3.1.0 or higher.

  • Documentation improvements and additions:

    • Postgres install instructions for Ubuntu have been simplified and tested
    • Anaconda instructions have been removed
    • Other minor documentation improvements/clarifications

v5.0.5 (2019-02-15)

  • Documentation improvements and additions:
    • Reintroduce working and refactored Bartlett (1932) Iterated Drawing demo
    • Reorganize installation documentation so documentation for each supported operating system is grouped together

v5.0.4 (2019-01-31)

  • Documentation improvements and additions:

    • New documentation section on Networks added
    • Reintroduce working Chatroom demo
  • Start monitoring Javascript code coverage

  • Change configuration of certain demos to work in free Heroku tier (hobby)

  • Fixed: Prevent Google Chrome from showing default browser popup when running Dallinger in debug mode

  • Fixed: Running Dallinger in debug mode on OSX now uses a new browser profile for each browser window

v5.0.3 (2019-01-16)

  • Documentation improvements and additions:

    • Reintroduce working and refactored Roger's paradox demo, including better documentation
    • Correct dallinger export syntax
  • Give better and more verbose feedback when attempting to run an experiment from a location that is not a valid experiment directory

  • Fixed: Python 3.7 issues related to numpy version, numpy updated to 1.15.4

  • Fixed: Fingerprint hash appearing as undefined in experiment runs

v5.0.2 (2018-12-18)

  • Documentation improvements and additions:

    • Update Creating an Experiment documentation to use dallinger.goToPage() standard
    • Reintroduce seven working demos into the documentation
  • Legacy dallinger.js has been removed

  • Fixed: AttributeError: 'int' object has no attribute 'items' (rq has been updated to 0.13.0 to fix this)

  • Fixed: dallinger2.js: valid store values are overwritten with 'undefined'

v5.0.1 (2018-11-30)

  • Documentation improvements and additions:

    • New theme that supports searching of the documentation
    • Styling improvements to some documents for increased readability
    • Updated description of what Dallinger is
    • Add Preventing Repeat Participants section to Configuration documentation
  • Miscellaneous bug fixes

v5.0.0 (2018-10-31)

  • Feature Adds a new configuration variable, assign_qualifications, to control whether recruiters that support participant qualifications assign qualifications for the experiment ID and any configured group_name when participants are recruited.

  • Feature A new button on the jupyter_replay widget allows replay of the experiment in real-time.

  • Feature Adds a new configuration variable worker_multiplier to control the ratio of worker dynos to CPU cores. The default value is 1.5.

  • Feature Juypter replays are now allow an experiment to exclude its waiting room and surveying from replay times.

  • Feature New dallinger apps command lists all currently running experiments started by the current heroku user

  • Feature New dallinger revoke command attempts to revoke MTurk qualifications by name or qualification ID for one or more MTurk worker ID's

  • Feature The dallinger destroy command now automatically attempts to expire any HITs for the app, and adds a --no-expire-hit flag to disable HIT expiration.

  • Heroku launch scripts are now part of Dallinger package install.

  • Improvements to automatic notifications and HIT expiration. Moved handling of participant timeouts to recruiter objects.

  • Better handling of Mechanical Turk exceptions.

  • Fixes for MultiRecruiter. More reliable and detailed recruiter data for each participant.

  • Improved logging.

  • Better DB connection handling. Closes unused connections and improvements to DB availability checks.

  • No longer attempts Heroku setup when heroku_team and dyno_type settings are incompatible.

  • Improvements in handling participants recruited after experiment is full. Added overrecruited status and expedited completion path for these participants.

  • Switch to constraints based version pinning to ease development.

  • Simplify data export by generating CSV file from the remote database

  • Improve stability and reliability of Bot participants

  • store+json2.min.js is now included in standard Dallinger JS "bundle"

  • Documentation improvements and additions:

    • A new tutorial on building Dallinger experiments using the dallinger-cookiecutter package
    • Improved documentation of python Experiment API and dallinger2.js Javascript API
    • Exporting and analyzing experiment data
    • Choosing configuration values for num_dynos_web and num_dynos_worker
    • Email notification setup
    • Improved audience targeting in documentation structure
    • Installation and setup
  • Miscellaneous bug fixes

v4.0.0 (2018-05-15)

  • Feature Python 3 support (tested with Python 3.6.4)

  • Feature Add MultiRecruiter for mixed human-bot participants

  • Feature New dallinger hits command lists all Mechanical Turk HITs associated with an experiment ID

  • Feature New dallinger expire command expires all Mechanical Turk HITs associated with an experiment ID

  • Feature New --expire-hit option to dallinger destroy will expire any associated Mechanical Turk HITs prior to destroying the deployed experiment server

  • Feature Support for high performance bots which interact with the experiment server via HTTP requests or other backend means rather than via a browser + Selenium

  • Feature Jupyter Notebook widget displays the experiment name, configuration, and status

  • Feature New index page at the server's root url (/) displays the experiments active configuration

  • Feature Size configuration of Heroku's Redis add-on via the redis-size config variable (defaults to premium-0)

  • Feature New config parameter assign_qualifications to expand experimenter qualification options

  • Automatically put Flask server in debug mode if the experiment is run in that mode

  • Improvements to exception handling and error reporting

  • Show an alert if dallinger2.js and the legacy dallinger.js are loaded together on the same page

  • Cleanup git status, psycopg2 warnings, and tests

  • Increase MTurk bump timeout from 30 to 60 seconds

  • Miscellaneous bug fixes

v3.5.0 (2018-03-07)

  • Feature Email notifications are sent to experiment owners if their deployed experiment has been idle for 6 hours or more

  • Feature New dallinger2.js Javascript module makes a range of useful standard functions available to custom experiments

  • Feature CLIRecruiter provides option to recruit participants directly by printing experiment URLs to the console and Papertrail logs, rather than using Mechanical Turk

  • Feature Support recording of TrackingEvents from experiment Javascript via the new /tracking_event/ route

  • Feature Support for replaying experiments from exported data

  • Feature New SplitSampleNetwork type

  • Feature Use browser fingerprints to help prevent duplicate experiment participants

  • Ensure that data can be exported before experiment is destoyed when running via the Experiment.run() API

  • Dallinger and demo experiment templates now use Flask template inheritance for reduced duplication and easier overriding

  • Participants using Chrome or Firefox begin experiment sessions with clean browser profiles

  • Improved diagnostic console output in verbose mode

  • Improved participant experience on experiment failure

  • recruiter is now a property of dallinger.experiment.Experiment, rather than a method, but backwards-compatibility is preserved

  • Improved test coverage

  • Miscellaneous bug fixes

v3.4.1 (2017-09-16)

  • Fixes related to host names and database users.

v3.4.0 (2017-08-01)

  • Feature dallinger qualify now supports multiple worker ID's and gives the option of sending (or not) notifications to qualified workers.

  • Feature Dallinger ads are no longer caught by ad blockers.

  • Feature Sentry is now available on experiments launched via Heroku through the sentry flag.

  • Miscellaneous bug fixes.

v3.3.0 (2017-06-27)

  • Feature Experiments can now be associated with a group name via the group_name config variable. This enables you to prevent MTurk workers from accepting, or even seeing, future HITs with one or more group names, via the qualification_blacklist config variable.

  • Suppress a deprecation warning from pandas.

v3.2.0 (2017-06-25)

  • Feature Datasets in zip files can now be import to an experiment server via a new CLI command, dallinger load.

v3.1.0 (2017-06-23)

  • FEATURE The dallinger uuid command line tool has been added to generate a UUID for an experiment.

  • FEATURE Recruiters now have a reward_bonus method which allows an assignment to be paid extra and a reason given.

  • FEATURE Experiments may now set prevent_exit to enable Javascript unload protection on pages. Calling allow_exit disables the protection.

  • FEATURE The dallinger debug command now supports the num_dynos_web configuration parameter, for better performance when under heavy usage.

  • FEATURE Dallinger experiments may now be packaged as normal Python distributions. An example is dallinger.bartlett1932.

  • FEATURE Experiments may now include implementations of computer-controlled participants through the Bot framework. The documentation includes instructions on running bots. The demos bartlett1932 and chatroom contain example bot implementations.

  • FEATURE An implementation of waiting rooms is now available for use by experiments, as demonstrated by chatroom demo.

  • Exports and the :class:dallinger.data.Data class now use the same zip layout.

  • Datasets above 800mb can now be downloaded, fixing #588

  • The Dallinger tests have had speed and code style improvements.

  • Experiments with missing dependencies now raise an ImportError early in the Dallinger process lifecycle, rather than seemingly unrelated errors later.

  • Conflicts between templates available in Dallinger core and an experiment now favour the version provided by the experiment.

  • A new Dallinger namespace is available in JavaScript, that includes the function Dallinger.submitQuestionnaire which handles serialization and submission of questionnaire data.

  • Ads created on the Mechanical Turk sandbox now include the experiment UUID to make it easier to find the ad aimed at a particular experiment run while testing.

  • A bug was fixed in the MCMCP demo that caused chains to break in approximately 2% of cases. #587

  • Command line tools now use a full UUID, rather than a short id starting with dlgr-

  • A bug in the chatroom demo was fixed which improves reliability and simplifies the connection to the backend. #537

  • The fitness parameter of dallinger.nodes.Agent is now a floating point number, rather than an integer.

v3.0.1 (2017-06-19)

  • Add a runtime.txt file due to Heroku changes that require Python version specification.

v3.0.0 (2017-03-31)

Welcome to Dallinger 3. This release comes with several new features, some of which are breaking changes that will require you to edit your .dallingerconfig file and experiment code. This changelog will be updated to reflect any new breaking changes that we discover.

Several configuration parameters have been renamed or removed. In particular, to migrate, you MUST:

  • Rename amt_keywords => keywords
  • Delete psiturk_keywords
  • Delete launch_in_sandbox_mode
  • Delete section [Shell Parameters]
  • Delete anonymize_data
  • Delete table_name
  • Delete psiturk_access_key_id from .dallingerconfig
  • Delete psiturk_secret_access_id from .dallingerconfig

Additionally, note that section headings are now optional, meaning that all configuration parameters must have a unique name. We recommend that you:

  • Rename [Experiment Configuration] => [Experiment]
  • Rename [HIT Configuration] => [MTurk]
  • Rename [Database Parameters] => [Database]
  • Rename [Server Parameters] => [Server]

The command dalinger verify should catch configuration-related issues.

  • BREAKING. When testing experiments locally using dallinger debug, recruitment is now automatic and does not require you to run debug in the psiTurk shell. The workflow for debugging an experiment used to be:
  1. Run dallinger debug
  2. Run debug in the psiTurk shell
  3. Participate in the experiment
  4. Repeat steps 2 & 3 as desired

The new workflow is:

  1. Run dallinger debug. This will directly open a new browser window for each participant that is recruited.
  2. Participate in the experiment.
  • BREAKING. There are two breaking changes with regard to recruitment First, the recruiter's recruitment method has been renamed from recruit_participants to recruit. Second, the default recruitment method no longer recruits one new participant; instead, it does nothing. Thus to retain the 2.x behavior in 3.x experiments that do not override the default, you should include the original default recruit method in your experiment.py file:
def recruit(self):
    """Recruit one participant at a time until all networks are full."""
    if self.networks(full=False):
        self.recruiter().recruit(n=1)
    else:
        self.recruiter().close_recruitment()

FEATURE. Addition of a high-level Python API for automating experiments and a data module for handling Dallinger datasets, making it possible run experiments in this way:

    import dallinger

    experiment = dallinger.experiments.Bartlett1932()
    data = experiment.run({
        mode="live",
        base_payment=1.00,
    })

FEATURE. There is a new data module, dallinger.data, which provides a few new pieces of functionality. First, you can load datasets that have been exported:

data = dallinger.load(UUID_OF_EXPERIMENT)

The returned object makes the dataset accessible in a variety of formats, including a pandas DataFrame and CSV file.

FEATURE. On export, data is automatically backed up to Amazon S3.

FEATURE. Integration with Open Science Framework. When an OSF access token is added, each experiment launched in sandbox or live mode will create a new project on the Open Science Framework and back up your experiment code in that project. We will be developing deeper integrations in the future.

v2.7.1 (2017-02-25)

  • Fix issue with 2.x documentation pointing to 3.x demos.

v2.7.0 (2016-12-10)

  • Support for Heroku teams #331

v2.6.1 (2016-12-10)

  • Fix bug in waiting for Redis queue

v2.6.0 (2016-11-19)

  • Add demo on Concentration memory game
  • Use CDN for jQuery
  • Refactor CLI
  • Misc. bugfixes

v2.5.0 (2016-11-03)

  • Allow pip requirements specified by URL
  • Improve style of docs
  • Add GetSiteControl to docs
  • Use Heroku's Redis addon and wait until available
  • Upgrade pypandoc and future
  • Add PyPi classifiers

v2.4.2 (2016-10-18)

  • Fix issue with clock processes

v2.4.1 (2016-10-17)

  • Fix issue with versioning

v2.4.0 (2016-10-17)

  • Allow property columns to be of arbitrary length
  • Add a demo of the game Snake

v2.3.1 (2016-09-25)

  • Fix a regression in 2.3.0 where the consent form no longer receives the query parameters from the HIT advertisement.

v2.3.0 (2016-09-24)

New demos

Enhancements

  • Upgrade some dependencies #203, #205
  • Add a dallinger.config module that automatically loads variables from the experiment config file #213
  • Add waiting room to chatroom demo

Bug fixes

  • Miscellaneous typo fixes

v2.2.2 (2016-09-21)

Bugs squashed

  • Fix backwards incompatibility #201
  • We now use valid RFC 4122 UUIDs for experiment ids #185

v2.2.1 (2016-09-14)

Bugs squashed

  • Fix issues with requirements #117

Merged pull requests:

  • Rename "example" to "demo" #105
  • Minify StackBlur #99

v2.2.0 (2016-09-12)

New demos

  • Vox populi, a replication of Sir Francis Galton's 1903 study of the wisdom of the crowd #45
  • The Sheep Market, drawing 10k sheep #27

Enhancements and bug fixes

  • Faster Travis CI builds (#48), a README badge with the number of demos (#33), amongst others.

v2.1.1 (2016-09-09)

Bugs squashed

  • Fix issue with installation on PyPi #31

v2.1.0 (2016-09-09)

Bugs squashed

  • Install Dallinger via PyPi on Heroku #28

v2.0.1 (2016-09-09)

Enhancements

  • Drawing demo #24

Bugs squashed

  • Add pypandoc 1.2.0 to reqs #26

Merged pull requests:

  • GitHub templates #22
  • Release 2.0.0 #21
  • Add code of conduct #20

v2.0.0 (2016-09-07)

Bugs squashed

  • License badge shows up as unknown #17
  • Test ticket from Code Climate #12
  • Test ticket from Code Climate #11
  • Fix README license badge #19
  • Version bump doc config file #16
  • Fix a few more rebranding issues #9
  • Don't check for broken links when building docs #8
  • Fix a branding bug #6

Issues closed

  • Deploy to PyPi automatically #13
  • Improve documentation styling #5

Merged pull requests:

  • Set up a release process #18
  • Speed up Travis CI runs #15
  • Deploy to PyPi test server #14
  • Check PRs with Danger #10
  • Improve documentation styling #7
  • Add Codecov settings file #4
  • Use Codecov, not Coveralls #3
  • Rebrand as "Dallinger" #2

v1.0.0 (2016-09-02)

Before Dallinger, there was Wallace, a platform for automating experiments on cultural transmission through crowdsourcing. Wallace was funded, in part, by the National Science Foundation (grant 1456709 to T.L.G).

  • Fix issue with installation on PyPi #31