Source code for masci_tools.io.parsers.fleur.fleur_schema.add_fleur_schema

# -*- coding: utf-8 -*-
###############################################################################
# Copyright (c), Forschungszentrum Jülich GmbH, IAS-1/PGI-1, Germany.         #
#                All rights reserved.                                         #
# This file is part of the Masci-tools package.                               #
# (Material science tools)                                                    #
#                                                                             #
# The code is hosted on GitHub at https://github.com/judftteam/masci-tools.   #
# For further information on the license, see the LICENSE.txt file.           #
# For further information please visit http://judft.de/.                      #
#                                                                             #
###############################################################################
"""
Contains utility to add new pairs of input/output schemas.
"""
from masci_tools.util.xml.common_functions import clear_xml
import os
import sys
import shutil
from lxml import etree

PACKAGE_DIRECTORY = os.path.dirname(os.path.abspath(__file__))


[docs]def add_fleur_schema(path, overwrite=False): """ Adds the FleurInput/OutputSchema from the specified path (folder containing the Schemas) to the folder with the correct version number and creates the schema_dicts :param path: path to the folder containing the schema files :param overwrite: bool, if True and the schema with the same version exists it will be overwritten. Otherwise an error is raised """ schema_path = os.path.join(path, 'FleurInputSchema.xsd') if os.path.isfile(schema_path): xmlschema = etree.parse(schema_path) xmlschema, _ = clear_xml(xmlschema) namespaces = {'xsd': 'http://www.w3.org/2001/XMLSchema'} inp_version = xmlschema.xpath('/xsd:schema/@version', namespaces=namespaces)[0] copy_schema_folder = os.path.abspath(os.path.join(PACKAGE_DIRECTORY, f'./{inp_version}')) copy_schema_file = os.path.abspath(os.path.join(copy_schema_folder, 'FleurInputSchema.xsd')) if os.path.isfile(copy_schema_file) and not overwrite: raise ValueError( f'Input Schema for version {inp_version} already exists. Use overwrite=True to replace the Schema') os.makedirs(copy_schema_folder, exist_ok=True) if not os.path.isfile(os.path.abspath(os.path.join(copy_schema_folder, '__init__.py'))): with open(os.path.abspath(os.path.join(copy_schema_folder, '__init__.py')), 'w') as f: pass shutil.copy(schema_path, copy_schema_file) schema_path = os.path.join(path, 'FleurOutputSchema.xsd') if os.path.isfile(schema_path): xmlschema = etree.parse(schema_path) xmlschema, _ = clear_xml(xmlschema) namespaces = {'xsd': 'http://www.w3.org/2001/XMLSchema'} out_version = xmlschema.xpath('/xsd:schema/@version', namespaces=namespaces)[0] copy_schema_folder = os.path.abspath(os.path.join(PACKAGE_DIRECTORY, f'./{out_version}')) copy_schema_file = os.path.abspath(os.path.join(copy_schema_folder, 'FleurOutputSchema.xsd')) if os.path.isfile(copy_schema_file) and not overwrite: raise ValueError( f'Output Schema for version {out_version} already exists. Use overwrite=True to replace the Schema') os.makedirs(copy_schema_folder, exist_ok=True) if not os.path.isfile(os.path.abspath(os.path.join(copy_schema_folder, '__init__.py'))): with open(os.path.abspath(os.path.join(copy_schema_folder, '__init__.py')), 'w') as f: pass shutil.copy(schema_path, copy_schema_file)
if __name__ == '__main__': add_fleur_schema(sys.argv[1], overwrite=sys.argv[2])