Source code for aiida_castep.cmdline.mock_castep
"""
Mock castep command
Separate cli interface for commands useful in development and testing.
"""
import os
from pathlib import Path
import click
from aiida_castep.utils.mock_code import MockRegistry, MockCastep
[docs]def data_path(path):
"""Return a path inside the `data` folder"""
return Path(__file__).parent.parent.parent / 'tests' / 'data' / path
@click.command('mock-castep')
@click.argument('seed')
def mock_castep(seed):
"""
A 'mock' CASTEP code that throws out output files for a given input seed name.
"""
pwd = Path().absolute()
mock_output = []
mock_output.append('MOCK PREPEND: START ----------------------\n')
mock_output.append('MOCK PREPEND: Mock directory: ' + str(pwd) + '\n')
mock_output.append('MOCK PREPEND: AIIDA_PATH: ' +
os.environ.get('AIIDA_PATH', '') + '\n')
if not Path(f"{seed}.cell").is_file:
mock_output.append(f'MOCK PREPEND: {seed}.cell is not found.\n')
stop_and_return(mock_output)
if not Path(f"{seed}.param").is_file:
mock_output.append(f'MOCK PREPEND: {seed}.param is not found.\n')
stop_and_return(mock_output)
mock_registry_path = os.environ.get('MOCK_CODE_BASE',
data_path('registry'))
click.echo('DEBUG: MOCK REGSISTRY PATH = {}'.format(
str(mock_registry_path)))
registry = MockRegistry(mock_registry_path)
mock = MockCastep(pwd, registry, seed)
if mock.is_runnable:
detected_path = mock.registry.get_path_by_hash(
registry.compute_hash(pwd))
mock_output.append(
f'MOCK PREPEND: Using test data in path {detected_path} based detection from inputs.\n'
)
mock.run()
else:
mock_output.append('MOCK PREPEND: No match was found.\n')
stop_and_return(mock_output)
# Write the stored information to the stdout file
with open('_scheduler-stdout.txt', 'a', encoding='utf8') as handler:
handler.write(''.join(mock_output))
[docs]def stop_and_return(castep_mock_output):
"""Halts castep.mock, rebuilds the castep_output and returns."""
# Assemble the
print(''.join(castep_mock_output))
raise RuntimeError('The castep.mock code could not perform a clean run.')