Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions scripts/parse_tools/fortran_conditional.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

import re

FORTRAN_CONDITIONAL_REGEX_WORDS = [' ', '(', ')', '==', '/=', '<=', '>=', '<', '>', '.eqv.', '.neqv.',
fortran_conditional_regex_tokens = ['==', '/=', '<=', '>=', '<', '>', '.eqv.', '.neqv.',
'.true.', '.false.', '.lt.', '.le.', '.eq.', '.ge.', '.gt.', '.ne.',
'.not.', '.and.', '.or.', '.xor.']
FORTRAN_CONDITIONAL_REGEX = re.compile(r"[\w']+|" + "|".join([word.replace('(','\(').replace(')', '\)') for word in FORTRAN_CONDITIONAL_REGEX_WORDS]))

FORTRAN_CONDITIONAL_REGEX_WORDS = [' ', '[(]', '[)]'] + fortran_conditional_regex_tokens

FORTRAN_CONDITIONAL_REGEX = re.compile(r"[\w']+|[ ()]|" + "|".join([word for word in FORTRAN_CONDITIONAL_REGEX_WORDS]))
5 changes: 3 additions & 2 deletions scripts/parse_tools/parse_checkers.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@
########################################################################

_UNITLESS_REGEX = "1"
_NON_LEADING_ZERO_NUM = "[1-9]\d*"
_NON_LEADING_ZERO_NUM = r"[1-9]\d*"
_CHAR_WITH_UNDERSCORE = "([a-zA-Z]+_[a-zA-Z]+)+"
_NEGATIVE_NON_LEADING_ZERO_NUM = f"[-]{_NON_LEADING_ZERO_NUM}"
_POSITIVE_NON_LEADING_ZERO_NUM = f"[+]{_NON_LEADING_ZERO_NUM}"
_UNIT_EXPONENT = f"({_NEGATIVE_NON_LEADING_ZERO_NUM}|{_POSITIVE_NON_LEADING_ZERO_NUM}|{_NON_LEADING_ZERO_NUM})"
_UNIT_REGEX = f"[a-zA-Z]+{_UNIT_EXPONENT}?"
_UNITS_REGEX = f"^({_CHAR_WITH_UNDERSCORE}|{_UNIT_REGEX}(\s{_UNIT_REGEX})*|{_UNITLESS_REGEX})$"
_UNIT_REGEXES = f"{_UNIT_REGEX}(" r"\s" f"{_UNIT_REGEX})"
_UNITS_REGEX = f"^({_CHAR_WITH_UNDERSCORE}|{_UNIT_REGEXES}*|{_UNITLESS_REGEX})$"
_UNITS_RE = re.compile(_UNITS_REGEX)
_MAX_MOLAR_MASS = 10000.0

Expand Down
44 changes: 36 additions & 8 deletions scripts/parse_tools/xml_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,14 @@ def __init__(self, message):
super().__init__(message)

###############################################################################
def call_command(commands, logger, silent=False):
def call_command(commands, logger, silent=False, return_proc=False):
###############################################################################
"""
Try a command line and return the output on success (None on failure)
Try a command line and return True only for a zero return code
If silent==True, do not log output and simply return False on an exception
If return_proc==True, return the CompletedProcess instance instead of a boolean
If silent==True and return_proc==True, return None in the case of an exception

>>> _LOGGER = init_log('xml_tools')
>>> set_log_to_null(_LOGGER)
>>> call_command(['ls', 'really__improbable_fffilename.foo'], _LOGGER) #doctest: +IGNORE_EXCEPTION_DETAIL
Expand All @@ -50,6 +54,8 @@ def call_command(commands, logger, silent=False):
[Errno 2] No such file or directory
>>> call_command(['ls', 'really__improbable_fffilename.foo'], _LOGGER, silent=True)
False
>>> call_command(['ls'], _LOGGER, silent=True, return_proc=True).returncode
0
>>> call_command(['ls'], _LOGGER)
True
>>> try:
Expand All @@ -75,11 +81,22 @@ def call_command(commands, logger, silent=False):
capture_output=True)
if not silent:
logger.debug(cproc.stdout)
if cproc.stderr:
logger.warning(cproc.stderr)
# end if
# end if
if return_proc:
result = cproc
else:
result = cproc.returncode == 0
# end if
result = cproc.returncode == 0
except (OSError, CCPPError, subprocess.CalledProcessError) as err:
if silent:
result = False
if return_proc:
result = None
else:
result = False
# end if
else:
cmd = ' '.join(commands)
outstr = f"Execution of '{cmd}' failed with code: {err.returncode}\n"
Expand Down Expand Up @@ -213,7 +230,15 @@ def validate_xml_file(filename, schema_root, version, logger,
logger.debug("Checking file {} against schema {}".format(filename,
schema_file))
cmd = [_XMLLINT, '--noout', '--schema', schema_file, filename]
result = call_command(cmd, logger)
result = call_command(cmd, logger, return_proc=True)
if result.returncode == 0:
## We got a pass return code but some versions of xmllint do not
## correctly return an error code on non-validation so double check
## the result
result = b'validates' in result.stdout or b'validates' in result.stderr
else:
result = True
# end if
return result
# end if
lmsg = "xmllint not found, could not validate file {}"
Expand Down Expand Up @@ -411,11 +436,14 @@ def replace_nested_suite(element, nested_suite, default_path, logger):
suite_name = nested_suite.attrib.get("name")
group_name = nested_suite.attrib.get("group")
file = nested_suite.attrib.get("file")
if not file:
raise CCPPError("file attribute required for nested_suite tag")
# end if
if not os.path.isabs(file):
file = os.path.join(default_path, file)
referenced_suite = load_suite_by_name(suite_name, group_name, file,
logger=logger)
imported_content = [ET.fromstring(ET.tostring(child))
imported_content = [ET.fromstring(ET.tostring(child))
for child in referenced_suite]
# Swap nested suite with imported content
for item in imported_content:
Expand Down Expand Up @@ -581,7 +609,7 @@ def expand_nested_suites(suite, default_path, logger=None):
return
raise CCPPError("Exceeded number of iterations while expanding nested suites:" + \
"check for inifite recursion or adjust limit max_iterations")

###############################################################################
def write_xml_file(root, file_path, logger=None):
###############################################################################
Expand All @@ -598,7 +626,7 @@ def remove_whitespace_nodes(node):

# Convert ElementTree to a byte string
byte_string = ET.tostring(root, 'us-ascii')

# Parse string using minidom for pretty printing
reparsed = xml.dom.minidom.parseString(byte_string)

Expand Down
10 changes: 10 additions & 0 deletions test/unit_tests/sample_suite_files/another_suite.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="another_suite" version="2.0">
<group name="another_group">
<subcycle loop="num_subcycles_for_ag">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
</group>
</suite>
16 changes: 16 additions & 0 deletions test/unit_tests/sample_suite_files/another_suite2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="another_suite2" version="2.0">
<group name="another_group2">
<subcycle loop="num_subcycles_for_ag2">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
</group>
<group name="another_group3">
<subcycle loop="num_subcycles_for_ag3">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
</group>
</suite>
10 changes: 10 additions & 0 deletions test/unit_tests/sample_suite_files/nested_full_suite.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="nested_suite" version="2.0" >
<group name="nested_group1">
<scheme>g1_scheme1</scheme>
</group>
<group name="nested_group2">
<nested_suite name="subsuite_1" group="group1" file="subsuite1.xml"/>
</group>
</suite>
7 changes: 7 additions & 0 deletions test/unit_tests/sample_suite_files/subsuite1.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="subsuite_1" version="2.0">
<group name="group1">
<scheme>scheme_subsuite1</scheme>
</group>
</suite>
9 changes: 9 additions & 0 deletions test/unit_tests/sample_suite_files/subsuite_inline.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="subsuite_inline" version="1.0">
<group name="group2">
<scheme>scheme1i</scheme>
<scheme>scheme2i</scheme>
<scheme>scheme1i</scheme>
</group>
</suite>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="main_suite" version="2.0">
<group name="group1">
<subcycle loop="num_subcycles_for_scheme9">
<scheme>effr_pre</scheme>
<subcycle loop="2">
<subcycle loop="2">
<scheme>scheme9</scheme>
</subcycle>
</subcycle>
<scheme>scheme3</scheme>
</subcycle>
</group>
<nested_suite name="subsuite_1" file="subsuite1.xml"/>
</suite>
7 changes: 7 additions & 0 deletions test/unit_tests/sample_suite_files/suite_bad_v2_suite_tag.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="ver_test_suite" version="2.0">
<group name="group1">
<suite>subsuite_inline</suite>
</group>
</suite>
8 changes: 8 additions & 0 deletions test/unit_tests/sample_suite_files/suite_bad_version01.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="bad_suite_version" version="a">
<group name="group1">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
</group>
</suite>
8 changes: 8 additions & 0 deletions test/unit_tests/sample_suite_files/suite_bad_version02.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="bad_suite_version" version="1.2.3">
<group name="group1">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
</group>
</suite>
8 changes: 8 additions & 0 deletions test/unit_tests/sample_suite_files/suite_bad_version03.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="bad_suite_version" version="0.1">
<group name="group1">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
</group>
</suite>
8 changes: 8 additions & 0 deletions test/unit_tests/sample_suite_files/suite_bad_version04.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="bad_suite_version" version="1.-1">
<group name="group1">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
</group>
</suite>
8 changes: 8 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v1_test01.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="ver_test_suite" version="1.0">
<group name="group1">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
</group>
</suite>
11 changes: 11 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v1_test02.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="good_suite" version="1.0">
<group name="physics">
<scheme>scheme1</scheme>
<scheme>scheme2</scheme>
<scheme>scheme3</scheme>
<scheme>scheme2</scheme>
<scheme>scheme1</scheme>
</group>
</suite>
9 changes: 9 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test01.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="ver_test_suite" version="2.0">
<group name="group1">
<scheme>scheme5</scheme>
<nested_suite name="subsuite_inline" group="group2" file="subsuite_inline.xml"/>
<scheme>scheme9</scheme>
</group>
</suite>
11 changes: 11 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test01_exp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" ?>

<suite name="ver_test_suite" version="2.0">
<group name="group1">
<scheme>scheme5</scheme>
<scheme>scheme1i</scheme>
<scheme>scheme2i</scheme>
<scheme>scheme1i</scheme>
<scheme>scheme9</scheme>
</group>
</suite>
10 changes: 10 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test02.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="v2_suite" version="2.0">
<group name="main_group">
<subcycle loop="num_subcycles_for_scheme6">
<scheme>scheme6</scheme>
</subcycle>
<nested_suite name="another_suite2" group="another_group3" file="another_suite2.xml"/>
</group>
</suite>
13 changes: 13 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test02_exp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" ?>

<suite name="v2_suite" version="2.0">
<group name="main_group">
<subcycle loop="num_subcycles_for_scheme6">
<scheme>scheme6</scheme>
</subcycle>
<subcycle loop="num_subcycles_for_ag3">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
</group>
</suite>
19 changes: 19 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test03.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="main_suite" version="2.0" >
<group name="groupp">
<scheme>scheme13</scheme>
<subcycle loop="num_subcycles_for_main1">
<scheme>effr_pre</scheme>
<subcycle loop="2">
<subcycle loop="2">
<scheme>main_calc</scheme>
</subcycle>
</subcycle>
<scheme>main_post</scheme>
</subcycle>
<nested_suite name="another_suite2" group="another_group3" file="another_suite2.xml"/>
<nested_suite name="another_suite" group="another_group" file="another_suite.xml"/>
</group>
<nested_suite name="nested_suite" file="nested_full_suite.xml"/>
</suite>
30 changes: 30 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test03_exp.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" ?>

<suite name="main_suite" version="2.0">
<group name="groupp">
<scheme>scheme13</scheme>
<subcycle loop="num_subcycles_for_main1">
<scheme>effr_pre</scheme>
<subcycle loop="2">
<subcycle loop="2">
<scheme>main_calc</scheme>
</subcycle>
</subcycle>
<scheme>main_post</scheme>
</subcycle>
<subcycle loop="num_subcycles_for_ag3">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
<subcycle loop="num_subcycles_for_ag">
<scheme>another_scheme</scheme>
</subcycle>
<scheme>more_scheme</scheme>
</group>
<group name="nested_group1">
<scheme>g1_scheme1</scheme>
</group>
<group name="nested_group2">
<scheme>scheme_subsuite1</scheme>
</group>
</suite>
18 changes: 18 additions & 0 deletions test/unit_tests/sample_suite_files/suite_good_v2_test04.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="ver_test_suite" version="2.0">
<group name="main11">
<subcycle loop="num_subcycles_for_main1">
<scheme>effr_pre</scheme>
<subcycle loop="2">
<subcycle loop="2">
<scheme>main_calc</scheme>
</subcycle>
</subcycle>
<scheme>main_post</scheme>
</subcycle>
<nested_suite name="another_suite2" group="another_group3" file="another_suite2.xml"/>
<nested_suite name="another_suite" group="another_group" file="another_suite.xml"/>
</group>
<nested_suite name="nested_suite" group="nested_group2" file="nested_full_suite.xml"/>
</suite>
Loading