uhd-urz / elAPI

An extensible API client for eLabFTW
GNU Affero General Public License v3.0
5 stars 0 forks source link

elapi init generates bad configuration file #37

Closed alexander-haller closed 1 month ago

alexander-haller commented 2 months ago

In GitLab by @mhxion on Jun 6, 2024, 01:14

Discovered by @alexander-haller. Reproducible.

username@xxxxx:~/urz/elabftw/presentations/2024-06-06_HeFDI_Data_Week$ elapi init
Enter your the host URL of your eLabFTW instance. It will look like "https://demo.elabftw.net/api/v2": https://elabftw-dev.uni-heidelberg.de/api/v2/
Enter your API token (or API key) of your eLabFTW instance. You can generate it from eLabFTW "User Panel". Make sure your API key has proper permission for your future tasks: xxx
Enter your Preferred export directory. If '--export-dir' isn't passed, /home/<username>/Downloads will be set as the export directory [/home/<username>/Downloads]: ~/elapi
⠴ Creating configuration file elapi.yml...
Configuration file has been successfully created! Run 'elapi show-config' to see the configuration path and more configuration details.
username@ahqurz1:~/urz/elabftw/presentations/2024-06-06_HeFDI_Data_Week$ elapi show-config
Traceback (most recent call last):
  File "/home/username/.local/bin/elapi", line 5, in <module>
    from elapi.cli.elapi import app
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/cli/__init__.py", line 1, in <module>
    from ..plugins.commons.cli_helpers import CLIExport, CLIFormat, OrderedCommands  # noqa: F401
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/plugins/commons/__init__.py", line 1, in <module>
    from .export import Export, ExportPathValidator  # noqa: F401
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/plugins/commons/export.py", line 9, in <module>
    logger = Logger()
             ^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/loggers/__init__.py", line 13, in __new__
    return MainLogger()
           ^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/loggers/base.py", line 14, in __new__
    from ..configuration.log_file import LOG_FILE_PATH
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/configuration/__init__.py", line 3, in <module>
    from .config import (
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/configuration/config.py", line 58, in <module>
    history = ConfigHistory(settings)
              ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/elapi/configuration/_config_history.py", line 20, in __init__
    self._history = inspect.get_history(self.setting)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/utils/inspect.py", line 241, in get_history
    sep = obj.get("NESTED_SEPARATOR_FOR_DYNACONF", "__")
          ^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/base.py", line 122, in __getattr__
    self._setup()
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/base.py", line 183, in _setup
    self._wrapped = self._wrapper_class(
                    ^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/base.py", line 273, in __init__
    self.execute_loaders()
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/base.py", line 1176, in execute_loaders
    settings_loader(
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/loaders/__init__.py", line 297, in settings_loader
    loader["loader"].load(
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/loaders/yaml_loader.py", line 94, in load
    loader.load(
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/loaders/base.py", line 79, in load
    source_data = self.get_source_data(files)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/loaders/base.py", line 95, in get_source_data
    content = self.file_reader(open_file)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/main.py", line 335, in safe_load
    def safe_load(stream,version=_A):return load(stream,SafeLoader,version)
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/main.py", line 317, in load
    try:return loader._constructor.get_single_data()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/constructor.py", line 99, in get_single_data
    node=self.composer.get_single_node()
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/composer.py", line 33, in get_single_node
    if not A.parser.check_event(StreamEndEvent):B=A.compose_document()
                                                  ^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/composer.py", line 36, in compose_document
    def compose_document(A):A.parser.get_event();B=A.compose_node(_A,_A);A.parser.get_event();A.anchors={};return B
                                                   ^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/composer.py", line 48, in compose_node
    elif A.parser.check_event(MappingStartEvent):E=A.compose_mapping_node(B)
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/composer.py", line 73, in compose_mapping_node
    while not B.parser.check_event(MappingEndEvent):G=B.compose_node(A,_A);H=B.compose_node(A,G);A.value.append((G,H))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/parser.py", line 32, in check_event
    if self.state:self.current_event=self.state()
                                     ^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/parser.py", line 150, in parse_block_mapping_key
    if self.scanner.check_token(KeyToken):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/scanner.py", line 61, in check_token
    while self.need_more_tokens():self.fetch_more_tokens()
                                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/scanner.py", line 95, in fetch_more_tokens
    if ch==':'and self.check_value():return self.fetch_value()
                                            ^^^^^^^^^^^^^^^^^^
  File "/home/username/.local/pipx/venvs/elapi/lib/python3.11/site-packages/dynaconf/vendor/ruamel/yaml/scanner.py", line 167, in fetch_value
    if not self.allow_simple_key:raise ScannerError(_C,_C,'mapping values are not allowed here',self.reader.get_mark())
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
dynaconf.vendor.ruamel.yaml.scanner.ScannerError: mapping values are not allowed here
  in "/home/username/.config/elapi.yml", line 2, column 14

And elapi.yml:

host: https://elabftw-dev.uni-heidelberg.de/api/v2/
    api_token: xxx
    export_dir: ~/elapi
    unsafe_api_token_warning: yes