blob: bdd9d62d414708d1bb257f9bab97fb6aa89c35e9 [file] [log] [blame]
#!/usr/bin/env python3
# SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Contains methods to check if the downloaded resources need to be refreshed
"""
import hashlib
import json
import sys
import typing
from argparse import ArgumentParser
from pathlib import Path
def get_md5sum_for_file(
filepath: typing.Union[str, Path]
) -> str:
"""
Function to calculate md5sum for contents of a given file.
Parameters:
----------
filepath (string): Path to the required file.
Returns:
-------
Hex digest represented as string.
"""
md5_sum = hashlib.md5()
with open(filepath, mode='rb') as f:
buf = f.read()
md5_sum.update(buf)
return md5_sum.hexdigest()
def check_update_resources_downloaded(
resource_downloaded_dir: str, set_up_script_path: str
):
"""
Function that check if the resources downloaded need to be refreshed.
Parameters:
----------
resource_downloaded_dir (string): Specifies the path to resources_downloaded folder.
set_up_script_path (string): Specifies the path to set_up_default_resources.py file.
"""
metadata_file_path = Path(resource_downloaded_dir) / "resources_downloaded_metadata.json"
if metadata_file_path.is_file():
with open(metadata_file_path, encoding="utf8") as metadata_json:
metadata_dict = json.load(metadata_json)
md5_key = 'set_up_script_md5sum'
set_up_script_md5sum_metadata = ''
if md5_key in metadata_dict.keys():
set_up_script_md5sum_metadata = metadata_dict["set_up_script_md5sum"]
set_up_script_md5sum_current = get_md5sum_for_file(set_up_script_path)
if set_up_script_md5sum_current == set_up_script_md5sum_metadata:
return 0
# Return code 1 if the resources need to be refreshed.
print('Error: hash mismatch!')
print(f'Metadata: {set_up_script_md5sum_metadata}')
print(f'Current : {set_up_script_md5sum_current}')
return 1
# Return error code 2 if the file doesn't exist.
print(f'Error: could not find {metadata_file_path}')
return 2
if __name__ == "__main__":
parser = ArgumentParser()
parser.add_argument(
"--resource_downloaded_dir",
help="Resources downloaded directory.",
type=str,
required=True)
parser.add_argument(
"--setup_script_path",
help="Path to set_up_default_resources.py.",
type=str,
required=True)
args = parser.parse_args()
# Check validity of script path.
if not Path(args.setup_script_path).is_file():
raise ValueError(f'Invalid script path: {args.setup_script_path}')
# Check the resources are downloaded as expected
STATUS = check_update_resources_downloaded(
args.resource_downloaded_dir,
args.setup_script_path
)
sys.exit(STATUS)