beat issueshttps://gitlab.idiap.ch/groups/beat/-/issues2015-12-14T12:44:26Zhttps://gitlab.idiap.ch/beat/beat.web/-/issues/358[api] Django restframework 3.3.x update will affect experiment queueing2015-12-14T12:44:26ZAndré Anjos[api] Django restframework 3.3.x update will affect experiment queueingIn my installation with this version of rest framework, I can no longer queue a configured experiment (i.e., click on the "Save" button). Downgrading to 3.2.x makes it work again.
The error caught by the web UI is: `Could not read req...In my installation with this version of rest framework, I can no longer queue a configured experiment (i.e., click on the "Save" button). Downgrading to 3.2.x makes it work again.
The error caught by the web UI is: `Could not read request body` (experiments/api.py, line 137) which generates a 400 error.
After inspection, it seems the request is read before entering the our API function. Putting a traceback printout on `django/http/request.py` `read()`, shows me the following stack:
```text
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/utils/autoreload.py", line 229, in wrapper
fn(*args, **kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/commands/runserver.py", line 143, in inner_run
ipv6=self.use_ipv6, threading=threading)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/servers/basehttp.py", line 201, in run
httpd.serve_forever()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/servers/basehttp.py", line 102, in __init__
super(WSGIRequestHandler, self).__init__(*args, **kwargs)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 655, in __init__
self.handle()
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/servers/basehttp.py", line 182, in handle
handler.run(self.server.get_app())
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
self.result = application(self.environ, self.start_response)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/contrib/staticfiles/handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/handlers/wsgi.py", line 189, in __call__
response = self.get_response(request)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/views.py", line 454, in dispatch
self.initial(request, *args, **kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/views.py", line 376, in initial
self.perform_authentication(request)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/views.py", line 310, in perform_authentication
request.user
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 353, in __getattribute__
return super(Request, self).__getattribute__(attr)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 193, in user
self._authenticate()
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 316, in _authenticate
user_auth_tuple = authenticator.authenticate(self)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/authentication.py", line 127, in authenticate
self.enforce_csrf(request)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/authentication.py", line 136, in enforce_csrf
reason = CSRFCheck().process_view(request, None, (), {})
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/middleware/csrf.py", line 174, in process_view
request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 353, in __getattribute__
return super(Request, self).__getattribute__(attr)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 372, in POST
self._load_data_and_files()
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 243, in _load_data_and_files
self._data, self._files = self._parse()
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/request.py", line 289, in _parse
parsed = parser.parse(stream, media_type, self.parser_context)
File "/Users/andre/Projects/beat/beat.web/eggs/djangorestframework-3.3.1-py2.7.egg/rest_framework/parsers.py", line 66, in parse
data = stream.read().decode(encoding)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/http/request.py", line 290, in read
import traceback; traceback.print_stack()
[13/Dec/2015 10:30:44] "POST /api/v1/experiments/anjos/ HTTP/1.1" 400 29
```Final DocumentationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/357[api] Django Restframework update to 3.3.x will affect tests2015-12-14T12:42:39ZAndré Anjos[api] Django Restframework update to 3.3.x will affect testsA heads-up with django restframework 3.3.x: apparently they changed something internally, so that some of the POST requests we're issuing will not any longer return a 400, but a 415 (Unsupported Media Type) error.
Here is a list of af...A heads-up with django restframework 3.3.x: apparently they changed something internally, so that some of the POST requests we're issuing will not any longer return a 400, but a 415 (Unsupported Media Type) error.
Here is a list of affected tests:
```text
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.algorithms.tests.tests_api.AlgorithmCreation)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/algorithms/tests/tests_api.py", line 410, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.algorithms.tests.tests_api.AlgorithmsNameCheck)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/algorithms/tests/tests_api.py", line 284, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.dataformats.tests.tests_api.DataFormatCreation)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/dataformats/tests/tests_api.py", line 279, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.dataformats.tests.tests_api.DataFormatsNameCheck)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/dataformats/tests/tests_api.py", line 178, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.libraries.tests.tests_api.LibrariesNameCheck)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/libraries/tests/tests_api.py", line 253, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.libraries.tests.tests_api.LibraryCreation)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/libraries/tests/tests_api.py", line 378, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
======================================================================
FAIL: test_bad_request_for_post_method_without_needed_data (beat.web.toolchains.tests.ToolchainCreation)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/test/beat.web/beat/web/toolchains/tests.py", line 807, in test_bad_request_for_post_method_without_needed_data
self.checkResponse(response, 400)
File "/home/user/test/beat.web/beat/web/common/testutils.py", line 66, in checkResponse
self.assertEqual(response.status_code, status_code)
AssertionError: 415 != 400
----------------------------------------------------------------------
Ran 818 tests in 234.487s
FAILED (failures=7)
```Final DocumentationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/356[reports] New migration does not complete2015-12-01T13:07:06ZAndré Anjos[reports] New migration does not completeFollowing the discussions, I see we have implemented a proper way to handle plotter/parameters by locking them through the Report object via a relationship.
With that change, came a migration that will not work if the plotter/paramete...Following the discussions, I see we have implemented a proper way to handle plotter/parameters by locking them through the Report object via a relationship.
With that change, came a migration that will not work if the plotter/parameter does not exist anymore:
```text
Applying reports.0005_report_add_referenced_plotter_plotterparameter...Traceback (most recent call last):
File "./bin/django", line 52, in <module>
sys.exit(djangorecipe.binscripts.manage('beat.web.settings.settings'))
File "/Users/andre/Projects/beat/beat.web/eggs/djangorecipe-2.1.2-py2.7.egg/djangorecipe/binscripts.py", line 9, in manage
management.execute_from_command_line(sys.argv)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/core/management/commands/migrate.py", line 222, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/migrations/executor.py", line 110, in migrate
self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/migrations/executor.py", line 148, in apply_migration
state = migration.apply(state, schema_editor)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/migrations/migration.py", line 115, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/migrations/operations/special.py", line 183, in database_forwards
self.code(from_state.apps, schema_editor)
File "/Users/andre/Projects/beat/beat.web/beat/web/reports/migrations/0005_report_add_referenced_plotter_plotterparameter.py", line 25, in add_plotter_references
plotterparameter = PlotterParameter.objects.get(author__username = plotterparameters_parts[0], name = plotterparameters_parts[1], version = plotterparameters_parts[2])
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/andre/Projects/beat/beat.web/eggs/Django-1.8.7-py2.7.egg/django/db/models/query.py", line 334, in get
self.model._meta.object_name
__fake__.DoesNotExist: PlotterParameter matching query does not exist.
```
We must figure out:
1. What are the affected reports
2. What to do with those
@flavio.tarsetti: Could you please prepare a small python script that dumps report name and the names of plotters/parameters that do not exist, run it and come for the meeting with a list?Final DocumentationFlavio TARSETTIFlavio TARSETTIhttps://gitlab.idiap.ch/beat/beat.web/-/issues/354[search] Not registered at act stream2015-11-30T14:50:19ZAndré Anjos[search] Not registered at act streamWe're getting a 500 error upon Search sharing:
```text
Internal Server Error: /platform/api/v1/search/share/anjos/foo_search/
Traceback (most recent call last):
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/...We're getting a 500 error upon Search sharing:
```text
Internal Server Error: /platform/api/v1/search/share/anjos/foo_search/
Traceback (most recent call last):
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/rest_framework/views.py", line 466, in dispatch
response = self.handle_exception(exc)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch
response = handler(request, *args, **kwargs)
File "/remote/sw/beat.web/src/beat.web/beat/web/common/api.py", line 62, in post
self.do_share(object_db, data)
File "/remote/sw/beat.web/src/beat.web/beat/web/common/api.py", line 50, in do_share
obj.share(users=users, teams=teams)
File "/remote/sw/beat.web/src/beat.web/beat/web/common/models.py", line 230, in share
self._update_sharing(sharing, users, teams)
File "/remote/sw/beat.web/src/beat.web/beat/web/common/models.py", line 306, in _update_sharing
shared.send(sender=self, users=users, teams=teams)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send
response = receiver(signal=self, sender=sender, **named)
File "/remote/sw/beat.web/src/beat.web/beat/web/common/signals/handlers.py", line 63, in on_shared
action.send(sender.author, verb=verb, target=sender, public=public)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send
response = receiver(signal=self, sender=sender, **named)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/actstream/actions.py", line 110, in action_handler
check(obj)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/actstream/registry.py", line 110, in check
'to register it.' % model_class.__name__)
ImproperlyConfigured: The model Search is not registered. Please use actstream.registry to register it.
```
This problem also occurred with the `Plotter`, but I solved it in another patch. Must be done for `Search` as wellFinal DocumentationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/353[reports] charts plotters/plotterparameters not updated on save() in new_design2015-11-25T15:31:34ZFlavio TARSETTI[reports] charts plotters/plotterparameters not updated on save() in new_designcharts plotters/plotterparameters not updated on save() in new_designcharts plotters/plotterparameters not updated on save() in new_designFinal DocumentationFlavio TARSETTIFlavio TARSETTIhttps://gitlab.idiap.ch/beat/beat.web/-/issues/352[dataformats] Invalid data format may generate 500 error on "fork"2015-11-30T14:50:47ZAndré Anjos[dataformats] Invalid data format may generate 500 error on "fork"Upon forking a dataformat, the user may slightly modify the said format and generate an internal logical error leading to a 500 page displayed.
I just received this e-mail from our beat.web server:
```text
Internal Server Error: /...Upon forking a dataformat, the user may slightly modify the said format and generate an internal logical error leading to a 500 page displayed.
I just received this e-mail from our beat.web server:
```text
Internal Server Error: /platform/dataformats/fork/chichan/a-collection-of-linear_machines/1/
Traceback (most recent call last):
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/remote/sw/beat.env.web-0.0.1/usr/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/remote/sw/beat.web/src/beat.web/beat/web/dataformats/views.py", line 165, in fork_dataformat
dataformat.author.username,
AttributeError: 'NoneType' object has no attribute 'author'
```
Indeed, this bit of code needs protection:
```python
if form.is_valid():
(dataformat, errors) = DataFormat.objects.create_dataformat(
author=request.user,
name=form.cleaned_data['name'],
short_description=form.cleaned_data['short_description'],
description=form.cleaned_data['description'],
declaration=form.cleaned_data['file'],
fork_of=fork_of
)
# Redirect to the page of the dataformat just created
return HttpResponseRedirect(
reverse('dataformats-view',
args=(
dataformat.author.username,
dataformat.name,
dataformat.version,
),
)
)
```
For example, it does not handle the case in which the "validation" generates an error and the returned data format is `None`, generating the error above. This code must be corrected both on the branch "0.14" as well as on the "master" branch.Final DocumentationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/350[teams] list of teams a user is part of but not created2015-11-30T14:52:30ZSébastien MARCEL[teams] list of teams a user is part of but not createdExample: http://beatweb-staging/teams/smarcel/
it will be good to list also the team a user is part of even if that team is not created by that userExample: http://beatweb-staging/teams/smarcel/
it will be good to list also the team a user is part of even if that team is not created by that userFinal Documentationhttps://gitlab.idiap.ch/beat/beat.web/-/issues/348[experiments] Green toolchain filling while running2015-12-11T10:30:57ZSébastien MARCEL[experiments] Green toolchain filling while runningWhen running an experiment we don't see anymore the process in "green" on the graphical representation of the toolchain.
This would have to be hooked in into the new setup page.When running an experiment we don't see anymore the process in "green" on the graphical representation of the toolchain.
This would have to be hooked in into the new setup page.Final Documentationhttps://gitlab.idiap.ch/beat/beat.web/-/issues/345[ui] More meaningful names for tabs on main page2015-12-01T14:21:54ZSébastien MARCEL[ui] More meaningful names for tabs on main pagehttp://beatweb-staging/events/smarcel/
Events -> Activity ?
this could be a place to put also later on a Leaderboard
System Objects -> Resources (Data and Computing)
For the others what about sticky to the Open Science terminol...http://beatweb-staging/events/smarcel/
Events -> Activity ?
this could be a place to put also later on a Leaderboard
System Objects -> Resources (Data and Computing)
For the others what about sticky to the Open Science terminology ( https://en.wikipedia.org/wiki/Open_science ) ?
Objects -> Open Source -- it might not be 100% correct if we accommodate binaries are some point !
Queries -> Open Access
Note that the Teams can me moved from Objects to Queries as it is a sharing feature.
My 2 cents
Final Documentationhttps://gitlab.idiap.ch/beat/beat.web/-/issues/344[attestations] Show all existing attestations on user page2015-11-20T11:48:42ZAndré Anjos[attestations] Show all existing attestations on user pagePresently, only user attestations are displayed. This is not true any longer for all other contribution types.Presently, only user attestations are displayed. This is not true any longer for all other contribution types.Final DocumentationAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/343[experiments] Cancel page refresh if not on "Result Display" mode2015-12-10T14:50:41ZAndré Anjos[experiments] Cancel page refresh if not on "Result Display" modeOtherwise user changes may be forgotten.Otherwise user changes may be forgotten.Final DocumentationAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/340[search] Leader board notification2015-12-04T11:05:23ZAndré Anjos[search] Leader board notificationThis is an idea to implement leader boards in the platform re-using the search app.
1. Implement a new attribute to the `Search` model called `experiments`, pointing to the current set of experiments which are the result of a search. ...This is an idea to implement leader boards in the platform re-using the search app.
1. Implement a new attribute to the `Search` model called `experiments`, pointing to the current set of experiments which are the result of a search. N.B.: This field is not used to display the search results, which still relies on the code available at the app. It is only used for the Leader Board feature. This feature is switchable with a simple checkbox and, `Search.experiments` is not visible otherwise to the user.
2. For every `Search` with `experiments` set, perform the following via a cronjob (once every 4 hours?):
1. Re-run the search
2. Check if the new set of experiments is the same as before
3. If it changed, report this via e-mail (and on the actstream?) of the owner, indicating the old and new lists (relative differences may be displayed). The e-mail contains a link to the original search
4. If (3) was fullfilled, for each user that has an experiment on the search AND access to the search, report the relative displacement of the user experiment's position.Final Documentationhttps://gitlab.idiap.ch/beat/beat.web/-/issues/339[experiments] Re-running reset experiments generates invalid results2015-12-01T14:22:44ZAndré Anjos[experiments] Re-running reset experiments generates invalid resultsResult screen after re-running an experiment that was reset:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/891489c5dc0a7469fc52924195060fe3/image.png)
Result screen after re-running an experiment that was reset:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/891489c5dc0a7469fc52924195060fe3/image.png)
Final DocumentationAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/338[multiple] History viewer rows are out of place after new design merger2015-12-15T14:43:01ZAndré Anjos[multiple] History viewer rows are out of place after new design mergerAfter our new design merger, we now have a history viewer in which rows are out of order.
@philip.abbet: could you please have a look at this and try to understand the reason of this misplacement? (Likely a change from my side, but I'...After our new design merger, we now have a history viewer in which rows are out of order.
@philip.abbet: could you please have a look at this and try to understand the reason of this misplacement? (Likely a change from my side, but I'm not sure where that would be.)Final DocumentationPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/337[reports] button settings and delete visible in edition mode via number access2015-11-20T08:37:27ZFlavio TARSETTI[reports] button settings and delete visible in edition mode via number accessThis should be removedThis should be removedFinal DocumentationFlavio TARSETTIFlavio TARSETTIhttps://gitlab.idiap.ch/beat/beat.web/-/issues/336[activities] Cannot restore activities2016-01-04T16:55:55ZAndré Anjos[activities] Cannot restore activitiesAs of today, the restore of actions from the app actstream is broken. The reason is our backup/restore functionality depends on apps fixture dumping using natural keys instead of database identifiers. We cannot guarantee that the restore...As of today, the restore of actions from the app actstream is broken. The reason is our backup/restore functionality depends on apps fixture dumping using natural keys instead of database identifiers. We cannot guarantee that the restored objects will have exactly the same PKs all the time.
The app `actstream` does not use natural keys for fields such as `actor_object_id`, and `target_object_id` so, when restoring, it relies on the exact usage of a given PK and it gets lost. This may cause degradation on the admin page:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/f3932cdfa57bdd5970e174fda11adfa5/image.png)
Or more severe errors on the front page:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/1e6ac66e02c523c1044af39e15d36969/image.png)
@samuel.gaist: Suggestions on how to proceed?Final DocumentationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/335[reports] Display bug in Report2015-11-19T15:41:27ZSushil BHATTACHARJEE[reports] Display bug in ReportPlease refer to the following report:
https://www.beat-eu.org/platform/reports/990149671/
The table in the report, comparing two experiments, displays the statistics for only
one experiment. The values for the other experiment are n...Please refer to the following report:
https://www.beat-eu.org/platform/reports/990149671/
The table in the report, comparing two experiments, displays the statistics for only
one experiment. The values for the other experiment are not visible.Final DocumentationFlavio TARSETTIFlavio TARSETTIhttps://gitlab.idiap.ch/beat/beat.web/-/issues/334[commands] Backup and Restore are broken2015-12-15T11:30:57ZAndré Anjos[commands] Backup and Restore are brokenFollowing changes in "AccountSettings" and "ActStream", we can back-up but cannot re-store anymore from these backups. This makes moving data pretty hard, so it is a critical problem.Following changes in "AccountSettings" and "ActStream", we can back-up but cannot re-store anymore from these backups. This makes moving data pretty hard, so it is a critical problem.Final Documentationhttps://gitlab.idiap.ch/beat/beat.web/-/issues/331[toolchain] Editor has problems adjusting location of "synchronization" modal...2015-12-17T15:17:39ZAndré Anjos[toolchain] Editor has problems adjusting location of "synchronization" modal on zoomed toolchainsIf the toolchain editor zooms too much, it has problems calculating where to pop-up the synchronization modal window.
Example:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/d829732a27cd13301a29637a602b94a6/image.png)
If the toolchain editor zooms too much, it has problems calculating where to pop-up the synchronization modal window.
Example:
![image](https://gitlab.idiap.ch/biometric/beat.web/uploads/d829732a27cd13301a29637a602b94a6/image.png)
Final DocumentationPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/330[reports] tables are not dynamic anymore after a settings change2015-11-18T16:12:12ZFlavio TARSETTI[reports] tables are not dynamic anymore after a settings changeThis appeared after migration to new designThis appeared after migration to new designFinal DocumentationFlavio TARSETTIFlavio TARSETTI