Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse subdirectory with quotes #5117

Merged
merged 1 commit into from Nov 30, 2021
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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