esp-idf/tools/idf_py_actions
Frantisek Hrbata cf161304bb fix: save RunTool command output with correct line endings
Currently RunTool reads command's output with asyncio read, which
returns bytes. This is decoded into python's string and the output already
contains OS specific line endings, which on Windows is CRLF. Problem is
that the command output is saved by using python's text stream/file,
which replaces LF, native python's line ending, with OS specific line ending.
On Windows, and in this particular case, the CRLF from the command output is
translated into CRCRLF and saved in the commands output file. When this
file is read in again, e.g. for hint modules, the CRCRLF is replaced
with LFLF. Again the file is open as text file. Meaning a new emply line
is added.

Fix this by opening the output file with "newline=''", which prevents
this translation. We already have the OS specific line ending in the
command's output.

Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
2024-01-23 10:03:40 +01:00
..
hint_modules feat(hints): use all_component_info from project_description.json 2023-10-02 16:24:41 +02:00
__init__.py Add idf.py extensions and move core actions to separate files 2019-10-30 10:34:17 +01:00
constants.py feat(esp32c5): add esp32c5 target in kconfig and tools 2023-11-28 16:14:17 +08:00
core_ext.py feat(tools): esp_idf_size.ng integration 2023-11-30 09:26:51 +01:00
create_ext.py feat: fix: create-project & create_component with proper file permission 2023-07-17 19:32:30 +08:00
debug_ext.py fix(gdbgui): Fix support of gdbgui on Unix with Python 3.11 2024-01-05 11:23:02 +01:00
dfu_ext.py dfu: add esp32s3 to supported DFU targets for idf.py 2022-07-11 15:58:21 +08:00
errors.py tools: Add python types hints 2022-06-15 14:33:29 +02:00
global_options.py idf.py: Change copyright in tools dir 2022-05-24 14:01:50 +02:00
hints.yml feat(bootloader_support): Make esp_secure_boot_verify_sbv2_signature_block() function public 2023-12-11 18:50:55 +05:30
qemu_ext.py feat(qemu): add a CLI option for graphics output 2023-12-18 11:47:15 +01:00
README.md Fix typo and naming format for extensions 2019-10-30 10:34:17 +01:00
roms_schema.json tools: fixed elf symbols load if gdbinit specified 2022-09-21 22:39:03 +04:00
roms.json tools: update esp-rom-elf to version 20230320 2023-03-20 19:20:34 +08:00
serial_ext.py fix(tools): fix autocomplete for --port option 2023-09-06 14:32:48 +02:00
tools.py fix: save RunTool command output with correct line endings 2024-01-23 10:03:40 +01:00
uf2_ext.py feat(tools): move uf2 generation to esptool 2023-10-09 15:38:30 +02:00

idf.py extensions

Python modules (subdirectories and files) in this directory named [your_extension]_ext will be loaded as idf.py extensions. If you want to provide extra extensions just provide ; separated list of directories with extensions in IDF_EXTRA_ACTIONS_PATH. Extensions will be loaded in alphanumeric order. Command line arguments parsing and extension mechanism is implemented on top of Click (versions >=5.0 are supported).

They should define a function action_extensions(base_actions, project_path) where:

  • base_actions - dictionary with actions that are already available for idf.py
  • project_path - working dir, may be defaulted to os.getcwd()

This function have to return a dict with 3 possible keys:

{
    # Additional options that will be available from id
    "global_options": [{
        "names": ["--option-name"],
        "help": "Help for option --option-name.",
    }],
    # List of functions that will have access to full app context, and can mangle with arguments
    "global_action_callbacks": [global_callback],
    # Additional subcommands for idf.py
    "actions": {
        "subcommand_name": {
            "callback": subcommand_callback,
            "help": "Help for subcommand.",
        },
    },
}

Where function global_callback(ctx, global_args, tasks) accepts 3 arguments:

  • ctx - Click context
  • global_args - dictionary of all available global arguments
  • tasks - list of Task objects

And subcommand_callback(subcommand_name, ctx, args) accepts 3 arguments:

  • subcommand_name - name of subcommand
  • ctx - Click context
  • args - list of command's arguments