mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Dynamic argument matching for visualization tags?
This commit is contained in:
@@ -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<container>%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<firstargcall>{FUNCTION_ARG})(?P<restargcalls>(?:,{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):
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
""")
|
||||
|
||||
Reference in New Issue
Block a user