beat issueshttps://gitlab.idiap.ch/groups/beat/-/issues2020-09-17T14:14:18Zhttps://gitlab.idiap.ch/beat/beat.web/-/issues/566Asset files are read in templates rather than using the proper property2020-09-17T14:14:18ZSamuel GAISTAsset files are read in templates rather than using the proper propertyAsset having files have are related properties that handles the data loading.
Several templates use the file object directly rather than the property which has as side effect of depending on the default mode used to open the file.
Curr...Asset having files have are related properties that handles the data loading.
Several templates use the file object directly rather than the property which has as side effect of depending on the default mode used to open the file.
Currently it looks like the mode is binary and thus the rendering is wrong.
Related to !358Code cleanupSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/564Crash in some admin pages2020-09-11T15:56:04ZSamuel GAISTCrash in some admin pagesWhen trying to go to an admin page that shows a beat asset, the site crashes because of a missing parameter.When trying to go to an admin page that shows a beat asset, the site crashes because of a missing parameter.Django 3 migrationSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/562Pre-commit cleanup2020-09-11T15:54:25ZSamuel GAISTPre-commit cleanupThe current code base is pretty old and contains code that requires some cleanup.
The cleanup includes:
- Unused import
- Ordering of imports
- Unused code
- Possible coding issue
This list is not exhaustive.
The cleanup shall be done...The current code base is pretty old and contains code that requires some cleanup.
The cleanup includes:
- Unused import
- Ordering of imports
- Unused code
- Possible coding issue
This list is not exhaustive.
The cleanup shall be done using pre-commit hooks that include:
- black
- isort
- bandit
- flake8
And possibly others if relevant tools are found in the process.Code cleanupSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.editor/-/issues/243There is no way to close an asset without opening another one.2020-08-10T15:27:51ZZohreh MOSTAANIThere is no way to close an asset without opening another one.At the moment at all the times there should be one asset opened (except for when the editor starts).
It might be useful to add a button to close an asset without opening a new one. It might also be useful in the future if multiple insta...At the moment at all the times there should be one asset opened (except for when the editor starts).
It might be useful to add a button to close an asset without opening a new one. It might also be useful in the future if multiple instances/windows of editor are open.https://gitlab.idiap.ch/beat/beat.editor/-/issues/185Experiment Editor2020-08-10T12:44:08ZJaden DIEFENBAUGHExperiment EditorThis issue tracks the implementation of the experiment editor.
As this editor is more complex regarding object management as well as setup, the work will be done in several steps:
* [x] Blocks edition
* [x] Toolchain preview
* [x] S...This issue tracks the implementation of the experiment editor.
As this editor is more complex regarding object management as well as setup, the work will be done in several steps:
* [x] Blocks edition
* [x] Toolchain preview
* [x] Smart filtering
Unlike all other BEAT assets, creating a new experiment requires an additional step therefore, a dedicated task is needed with regard to the creation of such a new asset:
* [x] Add support for new experiment creation to asset dialog[v2] 3 - Experiment editorSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.editor/-/issues/246Correct base types management in AssetModel2020-08-10T08:39:27ZSamuel GAISTCorrect base types management in AssetModelSummary
The DataFormat base types provided through AssetModel shall not be used everywhere a DataFormat is used.
An analysis must be done to determine where exactly it make sense to have them and also if they must be made availble toge...Summary
The DataFormat base types provided through AssetModel shall not be used everywhere a DataFormat is used.
An analysis must be done to determine where exactly it make sense to have them and also if they must be made availble together with the other Dataformats provided by the prefix.
AssetModel shall be purged from these types and a dedicated subclass created if it makes sense to provide them all in one or more places in the code.
Depending also on whether these base types should be the only type used, another model might be created or [QStringListModel](https://doc.qt.io/qt-5/qstringlistmodel.html) used directly in these cases.[v2] 1 - Edition/Visualization for small editorsFlavio TARSETTIFlavio TARSETTIhttps://gitlab.idiap.ch/beat/beat.editor/-/issues/227Feature request: Search functionality when making a new version or fork an as...2020-08-06T09:10:07ZZohreh MOSTAANIFeature request: Search functionality when making a new version or fork an asset.It would be good to be able to search for the asset you want to fork or make a new version since the existing list can be very long.It would be good to be able to search for the asset you want to fork or make a new version since the existing list can be very long.Samuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.editor/-/issues/275TypeError: %d format: a number is required, not NoneType2020-08-06T08:41:49ZAmir MOHAMMADITypeError: %d format: a number is required, not NoneTypeSteps to reproduce:
1. open a v1 alg in the editor: [livdet_baseline.tar.xz](/uploads/2e239002e1c600fe44c57b67005b5817/livdet_baseline.tar.xz)
2. answer yes to its migration to v2
3. save it:
```
Traceback (most recent call last):
File...Steps to reproduce:
1. open a v1 alg in the editor: [livdet_baseline.tar.xz](/uploads/2e239002e1c600fe44c57b67005b5817/livdet_baseline.tar.xz)
2. answer yes to its migration to v2
3. save it:
```
Traceback (most recent call last):
File "/home/amir/miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/assetwidget.py", line 520, in saveJson
is_valid, errors = self.current_asset.is_valid()
File "/home/amir/miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/backend/asset.py", line 269, in is_valid
_, error_list = self.type.validate(self.declaration_path)
File "/home/amir/miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/backend/asset.py", line 112, in validate
return validate(self.name.lower(), data)
File "/home/amir/miniconda/envs/iris/lib/python3.7/site-packages/beat/core/schema/__init__.py", line 176, in validate
validator = load_schema(schema_name, version)
File "/home/amir/miniconda/envs/iris/lib/python3.7/site-packages/beat/core/schema/__init__.py", line 93, in load_schema
__name__, os.path.join(schema_name, "%d.json" % version)
TypeError: %d format: a number is required, not NoneType
```Samuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/557Experiment put may fail due to spur PUT calls2020-08-03T09:49:48ZSamuel GAISTExperiment put may fail due to spur PUT callsThis issue appears currently only with Safari.
When accessing an experiment it sometimes sends a PUT command that does not follow through but still runs through enough of the machinery to trigger an error.
The error comes from the fact...This issue appears currently only with Safari.
When accessing an experiment it sometimes sends a PUT command that does not follow through but still runs through enough of the machinery to trigger an error.
The error comes from the fact that the writing serializer class is set to None as the `put` handling is currently custom implemented unlike the other subclasses of RetrieveUpdateDestroyContributionView.Samuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/556Cannot access C++ environment information page2020-08-03T09:18:52ZSamuel GAISTCannot access C++ environment information pageCurrently when trying to access the C++ information page an error is generated because no valid pattern can be found that matches the environment name.Currently when trying to access the C++ information page an error is generated because no valid pattern can be found that matches the environment name.Samuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/100Backend/scheduler administration page improvements2020-08-03T08:41:33ZAndré AnjosBackend/scheduler administration page improvementsA small list of improvements for the backend/scheduler page:
1. The worker listing takes too much space and does not allow for the visualisation of important information. It would be better to transform it into a table, in which each ...A small list of improvements for the backend/scheduler page:
1. The worker listing takes too much space and does not allow for the visualisation of important information. It would be better to transform it into a table, in which each line corresponds to a host and each column shows the following information: IP address, cores (in-use/available), memory (in-use/available), beat.scheduler version. The color of the line can be color coded: light green means 100% free, light read means 100% occupied, light yellow means partially occupied.
2. The total number of cores affected to a queue should be displayed
3. The queue listing should also become a table with more compact information displayed.Tutorial for the FG2015 ConferenceAndré AnjosAndré Anjoshttps://gitlab.idiap.ch/beat/beat.web/-/issues/555Analyzer results are not shown for new experiments2020-08-03T08:33:36ZAmir MOHAMMADIAnalyzer results are not shown for new experimentsWhen a new experiment runs on the platform, its analyzer results are not shown.
For example, I tried running the tutorial atnt eigenfaces experiment:
https://www.idiap.ch/software/beat/platform/experiments/amohammadi/tutorial/eigenface/1...When a new experiment runs on the platform, its analyzer results are not shown.
For example, I tried running the tutorial atnt eigenfaces experiment:
https://www.idiap.ch/software/beat/platform/experiments/amohammadi/tutorial/eigenface/1/atnt-eigenfaces-69-comp/#results
and its results are not showing up.
This has to do with new experiments only I thinkSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.editor/-/issues/278Crash with TypeError: '<' not supported between instances of 'numpy.ndarray' ...2020-07-29T13:19:22ZAmir MOHAMMADICrash with TypeError: '<' not supported between instances of 'numpy.ndarray' and 'str'```
Traceback (most recent call last):
File "src/beat.editor/beat/editor/widgets/assetwidget.py", line 507, in loadAsset
self.__update_content(declaration)
File "src/beat.editor/beat/editor/widgets/assetwidget.py", line 227, in _...```
Traceback (most recent call last):
File "src/beat.editor/beat/editor/widgets/assetwidget.py", line 507, in loadAsset
self.__update_content(declaration)
File "src/beat.editor/beat/editor/widgets/assetwidget.py", line 227, in __update_content
editor.load_json(json_data)
File "src/beat.editor/beat/editor/widgets/editor.py", line 276, in load_json
self._load_json(json_object)
File "src/beat.editor/beat/editor/widgets/plotterparameterseditor.py", line 497, in _load_json
self.__load_json(json_object)
File "src/beat.editor/beat/editor/widgets/plotterparameterseditor.py", line 462, in __load_json
self.__load_parameter(json_object)
File "src/beat.editor/beat/editor/widgets/plotterparameterseditor.py", line 447, in __load_parameter
parameter_viewer = PlotterParameterViewer(name, data)
File "src/beat.editor/beat/editor/widgets/plotterparameterseditor.py", line 256, in __init__
self.parameter_widget = RestrictedParameterWidget(data)
File "src/beat.editor/beat/editor/widgets/plotterparameterseditor.py", line 185, in __init__
self.numerical_spinbox.setValue(self.default)
File "src/beat.editor/beat/editor/widgets/spinboxes.py", line 183, in setValue
if value > self.maximum():
TypeError: '<' not supported between instances of 'numpy.ndarray' and 'str'
```
Steps to reproduce:
```
$ beat plotterparam pull plot/isoroc/1
# open it with the editor
```https://gitlab.idiap.ch/beat/beat.core/-/issues/101Add tmpfs when running a container2020-07-29T09:18:53ZSamuel GAISTAdd tmpfs when running a containerDespite the tests run in the various aspects of the BEAT code base which showed that having the container start read-only was successful, actual run on the platform started to unsuccessfully fail with an error related to temporary file c...Despite the tests run in the various aspects of the BEAT code base which showed that having the container start read-only was successful, actual run on the platform started to unsuccessfully fail with an error related to temporary file creation coming from the entrypoint script loading the correct conda environment.
"Unsuccessfully failed" here means that the full experiment run was marked as good despite that error happening which in fact did not even allow for a proper start of the execution procedure.
The fix for this situation is to add a minimal writable tmpfs for /tmp in order to have the space necessary for that file to be created.
It might also be useful to have one for /run even if it does not look like it is being used currently (at least in the same way as /tmp seemed to not be used).Soft loopsSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.cmdline/-/issues/70Cannot specify plotterparmeters when calling `beat exp plot`2020-07-28T14:57:58ZAmir MOHAMMADICannot specify plotterparmeters when calling `beat exp plot`I was thinking that we can fix this by providing the plotterparams using click optiona and also loading from rc.I was thinking that we can fix this by providing the plotterparams using click optiona and also loading from rc.https://gitlab.idiap.ch/beat/beat.editor/-/issues/277editor puts local config setting into global config2020-07-28T11:27:58ZAmir MOHAMMADIeditor puts local config setting into global configSteps to reproduce
```
$ beat config show
{
"user": "user"
}
$ cat ~/.beatrc
{
"user": "user"
}
$ beat config set --local user tst
$ beat config show
{
"user": "tst"
}
$ cat ~/.beatrc
{
"user": "user"
}
$ beat editor star...Steps to reproduce
```
$ beat config show
{
"user": "user"
}
$ cat ~/.beatrc
{
"user": "user"
}
$ beat config set --local user tst
$ beat config show
{
"user": "tst"
}
$ cat ~/.beatrc
{
"user": "user"
}
$ beat editor start
# do nothing, exit editor
$ cat ~/.beatrc
{
"user": "tst"
}
```https://gitlab.idiap.ch/beat/beat.cmdline/-/issues/73Cannot push a C++ algorithm2020-07-23T12:24:14ZAmir MOHAMMADICannot push a C++ algorithmLooks like when pushing a C++ algorithm, the code fails with:
```
lib/python3.7/site-packages/click/core.py(829)__call__()
828 """Alias for :meth:`main`."""
--> 829 return self.main(*args, **kwargs)
830
lib/...Looks like when pushing a C++ algorithm, the code fails with:
```
lib/python3.7/site-packages/click/core.py(829)__call__()
828 """Alias for :meth:`main`."""
--> 829 return self.main(*args, **kwargs)
830
lib/python3.7/site-packages/click/core.py(782)main()
781 with self.make_context(prog_name, args, **extra) as ctx:
--> 782 rv = self.invoke(ctx)
783 if not standalone_mode:
lib/python3.7/site-packages/click/core.py(1259)invoke()
1258 with sub_ctx:
-> 1259 return _process_result(sub_ctx.command.invoke(sub_ctx))
1260
lib/python3.7/site-packages/click/core.py(1259)invoke()
1258 with sub_ctx:
-> 1259 return _process_result(sub_ctx.command.invoke(sub_ctx))
1260
lib/python3.7/site-packages/beat/cmdline/click_helper.py(121)invoke()
119
120 ctx.meta["asset_info"] = self.asset_info
--> 121 return super().invoke(ctx)
lib/python3.7/site-packages/click/core.py(1066)invoke()
1065 if self.callback is not None:
-> 1066 return ctx.invoke(self.callback, **ctx.params)
1067
lib/python3.7/site-packages/click/core.py(610)invoke()
609 with ctx:
--> 610 return callback(*args, **kwargs)
611
lib/python3.7/site-packages/click/decorators.py(21)new_func()
20 def new_func(*args, **kwargs):
---> 21 return f(get_current_context(), *args, **kwargs)
22
lib/python3.7/site-packages/beat/cmdline/decorators.py(94)_decorator()
93 def _decorator(*args, **kwargs):
---> 94 value = view_func(*args, **kwargs)
95 if value not in [None, 0]:
lib/python3.7/site-packages/beat/cmdline/commands.py(321)push_impl()
320 dry_run=dry_run,
--> 321 indentation=0,
322 )
lib/python3.7/site-packages/beat/cmdline/common.py(1486)push()
1485 try:
-> 1486 webapi.post(url, data=message)
1487 except RuntimeError as e:
> lib/python3.7/site-packages/beat/cmdline/webapi.py(104)post()
103 url = self.__build_url(path)
--> 104 answer = requests.post(url, json=data, headers=self._make_headers())
105
lib/python3.7/site-packages/requests/api.py(119)post()
118
--> 119 return request('post', url, data=data, json=json, **kwargs)
120
lib/python3.7/site-packages/requests/api.py(61)request()
60 with sessions.Session() as session:
---> 61 return session.request(method=method, url=url, **kwargs)
62
lib/python3.7/site-packages/requests/sessions.py(516)request()
515 )
--> 516 prep = self.prepare_request(req)
517
lib/python3.7/site-packages/requests/sessions.py(459)prepare_request()
458 cookies=merged_cookies,
--> 459 hooks=merge_hooks(request.hooks, self.hooks),
460 )
lib/python3.7/site-packages/requests/models.py(317)prepare()
316 self.prepare_cookies(cookies)
--> 317 self.prepare_body(data, files, json)
318 self.prepare_auth(auth, url)
lib/python3.7/site-packages/requests/models.py(467)prepare_body()
466 content_type = 'application/json'
--> 467 body = complexjson.dumps(json)
468 if not isinstance(body, bytes):
lib/python3.7/site-packages/simplejson/__init__.py(395)dumps()
394 ):
--> 395 return _default_encoder.encode(obj)
396 if cls is None:
lib/python3.7/site-packages/simplejson/encoder.py(296)encode()
295 # equivalent to the PySequence_Fast that ''.join() would do.
--> 296 chunks = self.iterencode(o, _one_shot=True)
297 if not isinstance(chunks, (list, tuple)):
lib/python3.7/site-packages/simplejson/encoder.py(378)iterencode()
377 try:
--> 378 return _iterencode(o, 0)
379 finally:
```
I will not attach the binary the `.so` file (can be found in https://filesender.switch.ch/filesender/?vid=59e1dbc9-04e4-67c8-2bb1-00007d77b3bb but you don't need that)
Steps to reproduce:
* create an algorithm with this .json file [1.json](/uploads/d625814e021f43f4543060e5b3045b55/1.json)
* generate a random binary file for this alg and save it as `1.so` for example this: [1.so](/uploads/d7507a1afdff15ed1c07c1b6de9403d7/1.so)
* push it to the online platformSamuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.web/-/issues/554cannot fork an experiment2020-07-21T14:40:56ZAmir MOHAMMADIcannot fork an experimentWhen I try to fork an experiment, https://www.idiap.ch/software/beat/platform/experiments/fork/amohammadi/tutorial/eigenface/1/atnt-eigenfaces-69-comp/ I get this error:
![image](/uploads/a703a2ab2133b08e6ffc2dc4384f635f/image.png)When I try to fork an experiment, https://www.idiap.ch/software/beat/platform/experiments/fork/amohammadi/tutorial/eigenface/1/atnt-eigenfaces-69-comp/ I get this error:
![image](/uploads/a703a2ab2133b08e6ffc2dc4384f635f/image.png)Samuel GAISTSamuel GAISThttps://gitlab.idiap.ch/beat/beat.cmdline/-/issues/29Provide a plugin-based command line mechanism2020-07-21T14:02:10ZAmir MOHAMMADIProvide a plugin-based command line mechanismWhile the `beat` commandline is nice, @andre.anjos pointed out that a plugin-based commandline would be more useful.
I could not find an issue for this, so I'm creating this but feel free to close it if it is not relevant.
This was care...While the `beat` commandline is nice, @andre.anjos pointed out that a plugin-based commandline would be more useful.
I could not find an issue for this, so I'm creating this but feel free to close it if it is not relevant.
This was carefully designed and implemented in bob:
* https://gitlab.idiap.ch/bob/bob.extension/issues/44
* https://gitlab.idiap.ch/bob/bob.extension/merge_requests/64
* https://www.idiap.ch/software/bob/docs/bob/docs/master/bob.extension/doc/framework.html#unified-command-line-mechanism
A similar approach could be taken here as well.https://gitlab.idiap.ch/beat/beat.editor/-/issues/276Editor crashes with KeyError on block parameters2020-07-21T13:12:53ZAmir MOHAMMADIEditor crashes with KeyError on block parameters```
Traceback (most recent call last):
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/assetwidget.py", line 507, in loadAsset
self.__update_content(declaration)
File "miniconda/envs/iris/lib/python3.7/s...```
Traceback (most recent call last):
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/assetwidget.py", line 507, in loadAsset
self.__update_content(declaration)
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/assetwidget.py", line 234, in __update_content
self.__updateJsonWidget()
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/assetwidget.py", line 319, in __updateJsonWidget
self.json_widget.setText(self.current_editor.dump_as_string())
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/editor.py", line 299, in dump_as_string
self.dump_json(), sort_keys=True, indent=4, cls=utils.NumpyJSONEncoder
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/editor.py", line 292, in dump_json
json_data.update(self._dump_json())
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/experimenteditor.py", line 1435, in _dump_json
__filter_parameters(item, globals_)
File "miniconda/envs/iris/lib/python3.7/site-packages/beat/editor/widgets/experimenteditor.py", line 1411, in __filter_parameters
block_parameters[parameter_name]
KeyError: 'useBestGuess'
```
To reproduce:
* use this prefix: https://filesender.switch.ch/filesender/?vid=59e1dbc9-04e4-67c8-2bb1-00007d77b3bb
* start beat editor
* open this experiment:
```
├── experiments
│ └── jmcgrat3
│ └── jmcgrat3
│ └── livdet-baseline
│ └── 1
│ └── livdet-baseline.json
```Samuel GAISTSamuel GAIST