.. _changelog: Changelog ========= Version 0.5.6 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.6/ Date: May 23rd, 2020 Changes ^^^^^^^ * Support for bulk operation that obtains multiple reservations at the same time Version 0.5.5 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.5/ Date: April 25th, 2020 Changes ^^^^^^^ * Fixed compatibility with Werkzeug >= 1.0.0 * Fixed a bug where sometimes the loop would delete the task before running * Fixed a potential bug in creating task identifiers Version 0.5.4 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.4/ Date: August 26th, 2019 Changes ^^^^^^^ * Fixed bug when storing information in the initialization of a session Version 0.5.3 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.3/ Date: August 23rd, 2019 Changes ^^^^^^^ * Before, any call would change current_user.data. Now this only applies to calls that actually modify current_user.data Version 0.5.2 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.2/ Date: January 25th, 2019 Bug fixes: ^^^^^^^^^^ * Critical bugfix in get_task(func) not working Version 0.5.1 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.1/ Date: January 19th, 2019 Bug fixes: ^^^^^^^^^^ * Critical bugfix in case of abrupt restart while keeping Redis information. Version 0.5.0 ------------- Link: https://developers.labsland.com/weblablib/en/0.5.0/ Date: January 17th, 2019 General ^^^^^^^ * ``weblab_user`` now contains also ``weblab_user.request_client_data`` and ``weblab_user.request_server_data`` which provides the data passed on the ``on_start`` method. Also it contains ``weblab_user.start_date`` which is the millisecond when it started according to WebLab. * ``weblab_user.data`` has two new methods: ``weblab_user.data.retrieve()`` and ``weblab_user.data.store()``. Now, by default you can change things in ``weblab_user.data`` in your views or in ``on_start`` and weblablib will automatically push the information to the Redis server whenever the view has finished, as the standard ``flask.session`` object. If you have a particularly long view, or you are inside a task, you may want to push data or pull data from redis at some point. For that, you can use those two methods. Note that, as before, there is no merging process: if you ``store`` data it will override whatever is there (as ``flask.session``). If you change ``weblab_user.data`` inside a task, by default it is not automatically stored unless you force it with ``store``. Tasks ^^^^^ * ``ensure_unique`` has been replaced by ``unique='global'``. This allows us to put also ``unique='user'`` for concurrent laboratories. * ``WebLabTask`` does not get updated automatically. This provides more reliability (until now, you could do ``if not task.finished: (something with task)`` but it may have finished by then. There are two ways to refresh the information: ``retrieve`` (inside or outside the running task) and ``store`` (only inside the task). * ``task.data`` return an immutable dictionary, to enforce the idea that only the task changes the contents of the task. Bug fixes: ^^^^^^^^^^ * If the ``on_dispose`` was long, it would happen that WebLab would consider the experiment already finished. * UTC issues are fixed (if newer versions of WebLab are used) * Reduce the verbosity of logs when Redis is restarting Version 0.4.1 ------------- Link: https://developers.labsland.com/weblablib/en/0.4.1/ Date: August 19th, 2018 Bug fixes: ^^^^^^^^^^ In some contexts, the poll message receives a temporary error (such as 502). In those cases we try a couple of seconds later instead of automatically kicking out the user. Version 0.4 ----------- Link: https://developers.labsland.com/weblablib/en/0.4/ Date: September 6th, 2017 General ^^^^^^^ * Added ``WEBLAB_NO_THREAD`` which is equivalent to ``WEBLAB_AUTOCLEAN_THREAD=False`` and ``WEBLAB_TASK_THREADS_PROCESS=0``. Tasks ^^^^^ * A ``WebLabTask`` supports ``.join()`` method. It defaults to ``.join(timeout=None, error_on_timeout=True)``, raising an error, but can be configured with those parameters. * It also supports ``run_sync()``, with the optional named parameter ``timeout``. This guarantees that you can run tasks in a background process such as ``flask weblab loop``. * There is also now a ``stop()`` method and a ``stopping`` flag. If you call ``stop``, ``stopping`` will be ``True``. There is also a property called ``current_task_stopping``. * ``@weblab.task()`` now supports ``@weblab.task(ensure_unique=True)``. If multiple threads attempt to raise the same task, only one will run it (and the rest will fail) * New methods in ``WebLab``: * ``weblab.get_running_task(function_or_name)`` (which returns the any or ``None``; use with ``ensure_unique=True``) and ``webalb.get_running_tasks(func_or_name)`` to obtain all. * ``weblab.join_tasks(function_or_name, timeout=None, stop=False)`` which calls ``stop()`` if ``stop`` and joins all the tasks with that function (or name of function). WebSockets ^^^^^^^^^^ * Flask-SocketIO support through helpers: * ``socket_requires_login`` and ``socket_requires_active`` behave similar to ``requires_login`` and ``requires_active``; but calling ``disconnect`` of Flask-SocketIO * ``socket_weblab_user`` is equivalent to ``weblab_user``, but using it in real time without caching. This avoids the typical problems of a long-standing thread with WebSockets Examples ^^^^^^^^ * A new example, ``complete``, has been added. It includes: * Example of WebSocket support, including in a task in a different process. * Example of use of Flask-Babel for internationalization * Example of use of Flask-Assets for minimizing the static files CLI changes ^^^^^^^^^^^ * Similarly to other Flask projects, all the ``weblablib`` commands are in a single command group called ``weblab``. This way, in case of using multiple libraries which include their own commands (such as Flask-Migrate or Flask-Assets), the number of commands in the ``--help`` are low, and there is a low chance of collision (e.g., you might be using a celery-like system that also has a ``run-tasks`` command or a ``loop`` command). Therefore, since this version: .. tabularcolumns:: |p{6.5cm}|p{8.5cm}| ================================= ========================================= **Before weblablib 0.4** **Since weblablib 0.4** ================================= ========================================= ``flask fake-new-user`` ``flask weblab fake new`` ``flask fake-dispose`` ``flask weblab fake dispose`` ``flask fake-status`` ``flask weblab fake status`` ``flask loop`` ``flask weblab loop`` ``flask run-tasks`` ``flask weblab run-tasks`` ``flask clean-expired-users`` ``flask weblab clean-expired-users`` ================================= ========================================= * When running ``flask weblab fake new`` the default behavior is to open a web browser. ``--open-browser`` removed, and a new ``--dont-open-browser`` flag is available. * Added ``flask weblab loop --reload``. If you change the source code of your application, it will restart the process automatically. Version 0.3 ----------- Link: https://developers.labsland.com/weblablib/en/0.3/ Date: August 29th, 2017 * Added ``weblab_user.locale`` for i18n processing. * Added ``weblab_user.experiment_name``, ``weblab_user.category_name`` and ``weblab_user.experiment_id`` as more metadata about the context on how the laboratory is used. * Added ``task.done``, ``task.failed``, ``task.finished``, ``task.running``, ``task.submitted`` so as to avoid playing with strings. * ``WEBLAB_CALLBACK_URL`` is now optional, and ``/callback`` by default. * Added ``current_task`` that can be called inside a task to get the ``task_id`` or update data. * Added ``current_task.data`` and ``current_task.update_data`` so as to update JSON-friendly data to measure the progress of the task. * Added ``@weblab.user_loader``. If set, you can later run say ``user = weblab_user.user``, and it returns a user (e.g., from your database) * Supported arguments on ``{{ weblab_poll_script() }}``: ``logout_on_close``, which logs out when you close the current window (by default ``False``); and ``callback`` if you want to be notified when the time has passed or an error occurs. * Add ``flask loop`` for running tasks and thread cleaners concurrently. Version 0.2 ----------- Link: https://developers.labsland.com/weblablib/en/0.2/ Date: August 26th, 2017 Version 0.1 was uploaded to Pypi, etc., but was not production ready (no tests, docs, some bugs, etc.)