diff --git a/lib/galaxy/managers/markdown_parse.py b/lib/galaxy/managers/markdown_parse.py index 9420cef2e7f..19e7559d604 100644 --- a/lib/galaxy/managers/markdown_parse.py +++ b/lib/galaxy/managers/markdown_parse.py @@ -13,6 +13,7 @@ GALAXY_FLAVORED_MARKDOWN_CONTAINER_LINE_PATTERN = re.compile( r"```\s*galaxy\s*" ) VALID_CONTAINER_END_PATTERN = re.compile(r"^```\s*$") +DYNAMIC_ARGUMENTS = object() VALID_ARGUMENTS = { "history_dataset_display": ["input", "output", "history_dataset_id"], "history_dataset_embedded": ["input", "output", "history_dataset_id"], @@ -32,7 +33,7 @@ VALID_ARGUMENTS = { "generate_galaxy_version": [], "generate_time": [], "invocation_time": ["invocation_id"], - "visualization": ["id", "history_dataset_id"], + "visualization": DYNAMIC_ARGUMENTS, # Invocation Flavored Markdown "invocation_outputs": [], "invocation_inputs": [], @@ -40,8 +41,8 @@ VALID_ARGUMENTS = { GALAXY_FLAVORED_MARKDOWN_CONTAINERS = list(VALID_ARGUMENTS.keys()) GALAXY_FLAVORED_MARKDOWN_CONTAINER_REGEX = r'(?P%s)' % "|".join(GALAXY_FLAVORED_MARKDOWN_CONTAINERS) -ARG_VAL_REGEX = r'''[\w_\-\|]+|\"[^\"]+\"|\'[^\']+\'''' -FUNCTION_ARG = r'\s*\w+\s*=\s*(?:%s)\s*' % ARG_VAL_REGEX +ARG_VAL_REGEX = r'''[\w_\-]+|\"[^\"]+\"|\'[^\']+\'''' +FUNCTION_ARG = r'\s*[\w\|]+\s*=\s*(?:%s)\s*' % ARG_VAL_REGEX # embed commas between arguments FUNCTION_MULTIPLE_ARGS = fr'(?P{FUNCTION_ARG})(?P(?:,{FUNCTION_ARG})*)' FUNCTION_MULTIPLE_ARGS_PATTERN = re.compile(FUNCTION_MULTIPLE_ARGS) @@ -86,14 +87,15 @@ def validate_galaxy_markdown(galaxy_markdown, internal=True): continue elif fenced and line and expecting_container_close_for: func_call_match = GALAXY_MARKDOWN_FUNCTION_CALL_LINE.match(line) - # todo: issues with regex - continue if func_call_match: function_calls += 1 if function_calls > 1: invalid_line("Only one Galaxy directive is allowed per fenced Galaxy block (```galaxy)") container = func_call_match.group("container") valid_args = VALID_ARGUMENTS[container] + if valid_args is DYNAMIC_ARGUMENTS: + continue + first_arg_call = func_call_match.group("firstargcall") def _validate_arg(arg_str): diff --git a/test/unit/test_markdown_validate.py b/test/unit/test_markdown_validate.py index 2b7a6f2acf3..4cce819f547 100644 --- a/test/unit/test_markdown_validate.py +++ b/test/unit/test_markdown_validate.py @@ -212,3 +212,14 @@ history_dataset_link( output = moo, pathx ="cow.png", label= "my label" ) history_dataset_link( output = moo, path ="cow.png", labelx= "my label" ) ``` """, at_line=2) + + assert_markdown_valid(""" +```galaxy +visualization(id=1) +``` +""") + assert_markdown_valid(""" +```galaxy +visualization(foo|bar=hello) +``` +""")