def check_uninstall()

in modular_api/services/install_service.py [0:0]


def check_uninstall(api_module_config):
    """
    Expecting module descriptor file template:
    {
        "module_name": "$MODULE_NAME",
        "cli_path": "$MODULE_CLI_PATH",
        "mount_point": "$MOUNT_POINT",
        "dependencies": [
            {
                "module_name": "$MODULE_NAME_DEPENDENT_FROM",
            },
            ...
        ]
    }
    Property "dependencies" is optional, but if present - "module_name" in
    "dependencies"`s objects is required.
    """
    modules_path = Path(__file__).parent.parent / MODULES_DIR
    if not modules_path.exists():
        return
    conflict_modules_list = list()
    for module in modules_path.iterdir():
        api_file_path = module / API_MODULE_FILE
        if not api_file_path.exists():
            continue
        with open(api_file_path, 'r') as file:
            api_module_file = json.load(file)
            dependencies = list()
            if not api_module_file.get(DEPENDENCIES):
                continue
            for item in api_module_file.get(DEPENDENCIES):
                dependencies.append(item.get(MODULE_NAME_KEY))
            conflict_modules_list.append({
                f"{api_module_file.get(MODULE_NAME_KEY)}": dependencies
            })
    if not conflict_modules_list:
        return
    uninstall_candidate = api_module_config.get(MODULE_NAME_KEY)
    result_list = list()
    for conflict_item in conflict_modules_list:
        for k, v in conflict_item.items():
            if uninstall_candidate in v:
                result_list.append(k)
    if result_list:
        message = f'Module "{uninstall_candidate}" you are trying to ' \
                  f'uninstall is in dependencies of the another module(s). ' \
                  f'Please uninstall "{", ".join(result_list)}" module(s) first'
        _LOG.error(message)
        sys.exit(message)