Skip to content

Commit

Permalink
Ban invalid escape chars (#11443)
Browse files Browse the repository at this point in the history
Resolves #10840

In static partitions definitions, ban any escape characters that may not
be displayed.
  • Loading branch information
clairelin135 committed Jan 17, 2023
1 parent 9735ca1 commit 4f92708
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
19 changes: 15 additions & 4 deletions python_modules/dagster/dagster/_core/definitions/partition.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@
Union["Partition[T]", Sequence["Partition[T]"], SkipReason],
]

# Dagit selects partition ranges following the format '2022-01-13...2022-01-14'
# "..." is an invalid substring in partition keys
# The other escape characters are characters that may not display in Dagit
INVALID_PARTITION_SUBSTRINGS = ["...", "\a", "\b", "\f", "\n", "\r", "\t", "\v", "\0"]


class Partition(Generic[T]):
"""
Expand Down Expand Up @@ -278,10 +283,16 @@ class StaticPartitionsDefinition(
def __init__(self, partition_keys: Sequence[str]):
check.sequence_param(partition_keys, "partition_keys", of_type=str)

# Dagit selects partition ranges following the format '2022-01-13...2022-01-14'
# "..." is an invalid substring in partition keys
if any(["..." in partition_key for partition_key in partition_keys]):
raise DagsterInvalidDefinitionError("'...' is an invalid substring in a partition key")
for partition_key in partition_keys:
found_invalid_substrs = [
invalid_substr
for invalid_substr in INVALID_PARTITION_SUBSTRINGS
if invalid_substr in partition_key
]
if found_invalid_substrs:
raise DagsterInvalidDefinitionError(
f"{found_invalid_substrs} are invalid substrings in a partition key"
)

self._partitions = [Partition(key) for key in partition_keys]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -822,3 +822,12 @@ def test_static_partitions_subset():
assert len(with_some_partitions) == 2
assert len(deserialized) == 2
assert "bar" in with_some_partitions


def test_static_partitions_invalid_chars():
with pytest.raises(DagsterInvalidDefinitionError):
StaticPartitionsDefinition(["foo...bar"])
with pytest.raises(DagsterInvalidDefinitionError, match="n"):
StaticPartitionsDefinition(["foo\nfoo"])
with pytest.raises(DagsterInvalidDefinitionError, match="b"):
StaticPartitionsDefinition(["foo\bfoo"])

0 comments on commit 4f92708

Please sign in to comment.