|  | #!/usr/bin/env python3 | 
|  | # | 
|  | # Automatically create or update the .expected files in the | 
|  | # cache key test directory. | 
|  | # | 
|  | # Simply run without any arguments, from anywhere, e.g.: | 
|  | # | 
|  | #   PYTHONPATH=. ./tests/cachekey/update.py | 
|  | # | 
|  | # After this, add any files which were newly created and commit | 
|  | # the result in order to adjust the cache key test to changed | 
|  | # keys. | 
|  | # | 
|  | import os | 
|  | import tempfile | 
|  | from tests.testutils.runcli import Cli | 
|  |  | 
|  | # This weird try / except is needed, because this will be imported differently | 
|  | # when pytest runner imports them vs when you run the updater directly from | 
|  | # this directory. | 
|  | try: | 
|  | from cachekey import element_filename, parse_output_keys, load_expected_keys | 
|  | except ImportError: | 
|  | from .cachekey import element_filename, parse_output_keys, load_expected_keys | 
|  |  | 
|  | # Project directory | 
|  | PROJECT_DIR = os.path.join( | 
|  | os.path.dirname(os.path.realpath(__file__)), | 
|  | "project", | 
|  | ) | 
|  |  | 
|  |  | 
|  | def write_expected_key(element_name, actual_key): | 
|  | expected_file = element_filename(PROJECT_DIR, element_name, 'expected') | 
|  | with open(expected_file, 'w') as f: | 
|  | f.write(actual_key) | 
|  |  | 
|  |  | 
|  | def update_keys(): | 
|  |  | 
|  | with tempfile.TemporaryDirectory(dir=PROJECT_DIR) as tmpdir: | 
|  | directory = os.path.join(tmpdir, 'cache') | 
|  | os.makedirs(directory) | 
|  | cli = Cli(directory, verbose=False) | 
|  |  | 
|  | # Run bst show | 
|  | result = cli.run(project=PROJECT_DIR, silent=True, args=[ | 
|  | '--no-colors', | 
|  | 'show', '--format', '%{name}::%{full-key}', | 
|  | 'target.bst' | 
|  | ]) | 
|  |  | 
|  | # Load the actual keys, and the expected ones if they exist | 
|  | actual_keys = parse_output_keys(result.output) | 
|  | expected_keys = load_expected_keys(PROJECT_DIR, actual_keys, raise_error=False) | 
|  |  | 
|  | for element_name in actual_keys: | 
|  | expected = element_filename(PROJECT_DIR, element_name, 'expected') | 
|  |  | 
|  | if actual_keys[element_name] != expected_keys[element_name]: | 
|  | if not expected_keys[element_name]: | 
|  | print("Creating new expected file: {}".format(expected)) | 
|  | else: | 
|  | print("Updating expected file: {}".format(expected)) | 
|  |  | 
|  | write_expected_key(element_name, actual_keys[element_name]) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | update_keys() |