beat issueshttps://gitlab.idiap.ch/groups/beat/-/issues2015-11-24T10:35:44Zhttps://gitlab.idiap.ch/beat/beat.web/-/issues/351[staging] list of shared objects within a team inconsistent ?2015-11-24T10:35:44ZSébastien MARCEL[staging] list of shared objects within a team inconsistent ?I have the impression that the detailed sharing information if
For instance for this "shared" toolchain http://beatweb-staging/toolchains/smarcel/eigenface_prepro/1/ I can see the persons it is shared with but not for:
http://beatwe...I have the impression that the detailed sharing information if
For instance for this "shared" toolchain http://beatweb-staging/toolchains/smarcel/eigenface_prepro/1/ I can see the persons it is shared with but not for:
http://beatweb-staging/toolchains/chichan/full_mlbphs_projection/1/
Also for http://beatweb-staging/experiments/anjos/ivana7c/simple-antispoofing-updated/1/ivanas-experiment/ I don't see the sharing details although it is indicated as shared
https://gitlab.idiap.ch/beat/beat.web/-/issues/347[staging] impossible to fill documentation when expe running2015-11-24T10:38:25ZSébastien MARCEL[staging] impossible to fill documentation when expe runningimpossible to fill documentation when expe running because of automatic page reload
impossible to fill documentation when expe running because of automatic page reload
https://gitlab.idiap.ch/beat/beat.web/-/issues/284[reports] Plot URL not found2015-11-25T15:31:33ZAndré Anjos[reports] Plot URL not foundYet another place where we're missing the URL_PREFIX trick: http://beatweb-staging/reports/1164982793/, somehow.Yet another place where we're missing the URL_PREFIX trick: http://beatweb-staging/reports/1164982793/, somehow.Final DocumentationFlavio TARSETTIFlavio TARSETTIhttps://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/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/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/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/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/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/317[reports] adding measure type (%, time) in tables2015-12-03T12:43:37ZSébastien MARCEL[reports] adding measure type (%, time) in tablesAdding on the first row of table the measure type (%, time, ...) for each columns would be beneficial:
E.g in http://beatweb-staging/reports/smarcel/fr-dct-ubm-gmm/ (% and time in seconds ?).
Adding on the first row of table the measure type (%, time, ...) for each columns would be beneficial:
E.g in http://beatweb-staging/reports/smarcel/fr-dct-ubm-gmm/ (% and time in seconds ?).
Final DocumentationFlavio TARSETTIFlavio TARSETTIhttps://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/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/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/359[experiments] Cannot rename experiment if it is not on a "PENDING" state2015-12-13T16:34:32ZAndré Anjos[experiments] Cannot rename experiment if it is not on a "PENDING" stateRe-implementing the renaming functionality on the `master` branch got me to hit on limitation.
Could somebody motivate why that is? From my understanding, the only condition for renaming should be `modifiable() == True`. Clearly, I'm ...Re-implementing the renaming functionality on the `master` branch got me to hit on limitation.
Could somebody motivate why that is? From my understanding, the only condition for renaming should be `modifiable() == True`. Clearly, I'm missing something here.Final Documentationhttps://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/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/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/39Algorithm to reset the toolchain graph display2015-12-15T11:33:23ZAndré AnjosAlgorithm to reset the toolchain graph displayAs of today, we have toolchains that were created by hand. In that case, the toolchain editor cannot display the toolchain properly. There will be cases in the future as well, in which the user would like to reorganise a toolchain to its...As of today, we have toolchains that were created by hand. In that case, the toolchain editor cannot display the toolchain properly. There will be cases in the future as well, in which the user would like to reorganise a toolchain to its best possible representation. For those purposes, we need to implement an algorithm for finding the best graph given the toolchain and some constraints.
Possibilities:
1. A simple algorithm which would be better than stacking all blocks to the left as it is today:
* Put all databases, spaced to the left, one after the other
* All analyzers, spaced to the right
* All blocks equally randomly around the space left
2. Use a more complex graph-theory algorithm. Searching for "topological graph sorting" in Python I did find some resources:
* http://code.activestate.com/recipes/578272-topological-sort/, for acyclic graphs.
* A package in Python that can do it: https://pypi.python.org/pypi/toposort/1.1
* Sorting cyclic graphs is apparently an NP-hard optimisation problem, so we should not try to solve it.Final DocumentationPhilip ABBETPhilip ABBEThttps://gitlab.idiap.ch/beat/beat.web/-/issues/259[toolchains] New editor scrollbars quirks2015-12-15T11:54:57ZAndré Anjos[toolchains] New editor scrollbars quirksHello and thanks for the scrollbars. It is a very useful addition! A few quirks/suggestions:
1. On both Safari and Chromium the toolchain placement is initialised strangely (I have disabled the cache to make sure it was loading proper...Hello and thanks for the scrollbars. It is a very useful addition! A few quirks/suggestions:
1. On both Safari and Chromium the toolchain placement is initialised strangely (I have disabled the cache to make sure it was loading properly, but still):
![Screen_Shot_2015-08-18_at_00.06.03](https://gitlab.idiap.ch/biometric/beat.web/uploads/bf0d38f66090daa9e8897e34eb48497f/Screen_Shot_2015-08-18_at_00.06.03.png)
2. On my Mac, a two-finger movement does not translate into canvas movement, but on zoom-in/zoom-out. Do you think we could re-bind it so that: (a) two-finger movement is the same as canvas movement and (b) zoom-in/zoom-out is Cmd + two-finger movement or whatever the natural combination should be? That may make the editor a bit more intuitive.
3. Since you're developing a toolbar, it would be great to have a button that would make the whole toolchain visible on the viewport, re-centering it on the canvas.
4. Movement is a bit weird... This idea of infinite canvas is implemented in other tools (such as Dia or Excel) in a more natural way. I guess the size is defined by the drawn area contents and then expanded as the user forces in each direction. If the canvas continues blank after the user goes back, then it is re-trimmed. At least, that is the (loose) impression I have by looking at how it works. Of course, the toolkit and widgets for this are very different than the ones we probably have access through a JS canvas, but I thought maybe that could be a helpful hint for an algorithm for this task.Final DocumentationPhilip ABBETPhilip ABBET