From d50f574a316682954d93a98603bac9d0dd11d072 Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Mon, 3 Oct 2022 10:59:31 +0200 Subject: [PATCH] Tools: The Python dependency checker should not update the constraint file The Python dependency checker called from the export scripts and before build remains offline, i.e. it will use the previously downloaded constraint file but won't download a newer version. Related to https://github.com/espressif/esp-idf/pull/9328 --- docs/en/api-guides/tools/idf-tools.rst | 2 +- tools/idf_tools.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/en/api-guides/tools/idf-tools.rst b/docs/en/api-guides/tools/idf-tools.rst index 5847423bec..291314ce34 100644 --- a/docs/en/api-guides/tools/idf-tools.rst +++ b/docs/en/api-guides/tools/idf-tools.rst @@ -111,7 +111,7 @@ Any mirror server can be used provided the URL matches the ``github.com`` downlo * ``install-python-env``: Create a Python virtual environment in the ``${IDF_TOOLS_PATH}/python_env`` directory and install there the required Python packages. An optional ``--features`` argument allows one to specify a comma-separated list of features to be added or removed. Feature that begins with ``-`` will be removed and features with ``+`` or without any sign will be added. Example syntax for removing feature ``XY`` is ``--features=-XY`` and for adding ``--features=+XY`` or ``--features=XY``. If both removing and adding options are provided with the same feature, no operation is performed. For each feature a requirements file must exist. For example, feature ``XY`` is a valid feature if ``${IDF_PATH}/tools/requirements/requirements.XY.txt`` is an existing file with a list of Python packages to be installed. There is one mandatory ``core`` feature ensuring core functionality of ESP-IDF (build, flash, monitor, debug in console). There can be an arbitrary number of optional features. The selected list of features is stored in ``idf-env.json``. The requirement files contain a list of the desired Python packages to be installed and ``espidf.constraints.*.txt`` downloaded from https://dl.espressif.com and stored in ``${IDF_TOOLS_PATH}`` the package version requirements for a given ESP-IDF version. Althought it is not recommended, the download and use of constraint files can be disabled with the ``--no-constraints`` argument or setting the ``IDF_PYTHON_CHECK_CONSTRAINTS`` environment variable to ``no``. -* ``check-python-dependencies``: Checks if all required Python packages are installed. Packages from ``${IDF_PATH}/tools/requirements/requirements.*.txt`` files selected by the feature list of ``idf-env.json`` are checked with the package versions specified in the ``espidf.constraints.*.txt`` file. The constraint file will be downloaded from https://dl.espressif.com if this step hasn't been done already in the last day. The use of constraints files can be disabled similarly to the ``install-python-env`` command. +* ``check-python-dependencies``: Checks if all required Python packages are installed. Packages from ``${IDF_PATH}/tools/requirements/requirements.*.txt`` files selected by the feature list of ``idf-env.json`` are checked with the package versions specified in the ``espidf.constraints.*.txt`` file. The constraint file is downloaded with ``install-python-env`` command. The use of constraints files can be disabled similarly to the ``install-python-env`` command. * ``uninstall``: Print and remove tools, that are currently not used by active ESP-IDF version. diff --git a/tools/idf_tools.py b/tools/idf_tools.py index bcf2f9e9fd..580d9d34ca 100755 --- a/tools/idf_tools.py +++ b/tools/idf_tools.py @@ -1879,12 +1879,20 @@ def get_requirements(new_features): # type: (str) -> list[str] return [feature_to_requirements_path(feature) for feature in features] -def get_constraints(idf_version): # type: (str) -> str +def get_constraints(idf_version, online=True): # type: (str, bool) -> str constraint_file = 'espidf.constraints.v{}.txt'.format(idf_version) constraint_path = os.path.join(global_idf_tools_path or '', constraint_file) constraint_url = '/'.join([IDF_DL_URL, constraint_file]) temp_path = constraint_path + '.tmp' + if not online: + if os.path.isfile(constraint_path): + return constraint_path + else: + fatal(f'{constraint_path} doesn\'t exist. Perhaps you\'ve forgotten to run the install scripts. ' + f'Please check the installation guide for more information.') + raise SystemExit(1) + mkdir_p(os.path.dirname(temp_path)) try: @@ -2060,7 +2068,7 @@ def action_check_python_dependencies(args): # type: ignore raise SystemExit(1) if use_constraints: - constr_path = get_constraints(idf_version) + constr_path = get_constraints(idf_version, online=False) # keep offline for checking info('Constraint file: {}'.format(constr_path)) info('Requirement files:')