Skip to content

Commit

Permalink
Parse subdirectory with quotes (#5117)
Browse files Browse the repository at this point in the history
Signed-off-by: dinaldoap <dinaldoap@gmail.com>
  • Loading branch information
dinaldoap committed Nov 30, 2021
1 parent 1955682 commit 987de02
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
13 changes: 9 additions & 4 deletions mlflow/projects/utils.py
Expand Up @@ -50,16 +50,21 @@
def _parse_subdirectory(uri):
# Parses a uri and returns the uri and subdirectory as separate values.
# Uses '#' as a delimiter.
unquoted_uri = _strip_quotes(uri)
subdirectory = ""
parsed_uri = uri
if "#" in uri:
subdirectory = uri[uri.find("#") + 1 :]
parsed_uri = uri[: uri.find("#")]
parsed_uri = unquoted_uri
if "#" in unquoted_uri:
subdirectory = unquoted_uri[unquoted_uri.find("#") + 1 :]
parsed_uri = unquoted_uri[: unquoted_uri.find("#")]
if subdirectory and "." in subdirectory:
raise ExecutionException("'.' is not allowed in project subdirectory paths.")
return parsed_uri, subdirectory


def _strip_quotes(uri):
return uri.strip("'\"")


def _get_storage_dir(storage_dir):
if storage_dir is not None and not os.path.exists(storage_dir):
os.makedirs(storage_dir)
Expand Down
6 changes: 6 additions & 0 deletions tests/projects/test_utils.py
Expand Up @@ -137,6 +137,12 @@ def test_parse_subdirectory():
assert parsed_uri == "uri"
assert parsed_subdirectory == "subdirectory"

# Make sure the parsing works with quotes.
test_uri = "'uri#subdirectory'"
parsed_uri, parsed_subdirectory = _parse_subdirectory(test_uri)
assert parsed_uri == "uri"
assert parsed_subdirectory == "subdirectory"

# Make sure periods are restricted in Git repo subdirectory paths.
period_fail_uri = GIT_PROJECT_URI + "#.."
with pytest.raises(ExecutionException):
Expand Down

0 comments on commit 987de02

Please sign in to comment.