Skip to content

Commit

Permalink
update regex for quotes, spaces, etc
Browse files Browse the repository at this point in the history
  • Loading branch information
dave-connors-3 committed May 8, 2024
1 parent 8f9f2cf commit c8aedf6
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 3 deletions.
5 changes: 3 additions & 2 deletions dbt_meshify/storage/jinja_blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ def find_block_range(file_content: str, block_type: str, name: str) -> Tuple[int
end_line = None

for match in re.finditer(
r"{%-?\s+" + block_type + r"\s+" + name + r"([(a-zA-Z0-9=,_ )]*)\s-?%}",
r"{%-?\s*" + block_type + r"\s*" + name + r"\s*([(a-zA-Z0-9=,_ \'\")]*)\s*-?%}",
# r"\s*\((.*?)\)\s*-?%}"
file_content,
re.MULTILINE,
):
Expand All @@ -36,7 +37,7 @@ def find_block_range(file_content: str, block_type: str, name: str) -> Tuple[int
raise Exception(f"Unable to find a {block_type} block with the name {name}.")

for match in re.finditer(
r"{%-?\s+end" + block_type + r"\s+-?%}", file_content, re.MULTILINE
r"{%-?\s*end" + block_type + r"\s*-?%}", file_content, re.MULTILINE
):
end = match.span()[1] # .span() gives tuple (start, end)
new_end_line = end # file_content[:start].count("\n")
Expand Down
1 change: 0 additions & 1 deletion dbt_meshify/utilities/versioner.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ def bump_version(
LatestVersionBehavior.Latest: greatest_version + 1,
}


new_latest_version_number = latest_version_number_map[latest_version_behavior]
# Setup the new version definitions
new_version_data: Dict[str, Any] = {"v": new_greatest_version_number}
Expand Down
134 changes: 134 additions & 0 deletions tests/unit/test_jinja_blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,146 @@
{% enddocs %}
"""

no_leading_space = """\
{%docs customer_id %}
The unique key for each customer.
{% enddocs %}
"""

no_trailing_space = """\
{% docs customer_id%}
The unique key for each customer.
{% enddocs %}
"""

no_spaces = """\
{%docs customer_id%}
The unique key for each customer.
{% enddocs %}
"""

no_spaces_end_docs = """\
{%docs customer_id%}
The unique key for each customer.
{%enddocs%}
"""

special_character = """\
{% docs cust-omer_id %}
The unique key for each customer.
{% enddocs %}
"""

simple_macro = """\
{% macro test_macro(name) %}
{{ name }}
{% endmacro %}
"""

simple_macro_no_spaces = """\
{%macro test_macro(name)%}
{{ name }}
{%endmacro%}
"""

simple_macro_space_to_args = """\
{% macro test_macro (name) %}
{{ name }}
{% endmacro %}
"""

simple_macro_string_defaults = """\
{% macro test_macro(name='dave') %}
{{ name }}
{% endmacro %}
"""

simple_macro_string_defaults_double_quotes = """\
{% macro test_macro(name="dave") %}
{{ name }}
{% endmacro %}
"""

simple_macro_int_defaults = """\
{% macro test_macro(num=8) %}
{{ num }}
{% endmacro %}
"""


class TestJinjaBlock:
def test_from_file_detects_block_range(self):
range = JinjaBlock.find_block_range(string, "docs", "customer_id")
assert range == (2, 72)

def test_from_file_detects_block_range_no_leading_space(self):
range = JinjaBlock.find_block_range(no_leading_space, "docs", "customer_id")
assert range == (2, 71)

def test_from_file_detects_block_range_no_trailing_space(self):
range = JinjaBlock.find_block_range(no_trailing_space, "docs", "customer_id")
assert range == (2, 71)

def test_from_file_detects_block_range_no_spaces(self):
range = JinjaBlock.find_block_range(no_spaces, "docs", "customer_id")
assert range == (2, 70)

def test_from_file_detects_block_range_no_spaces_end_docs(self):
range = JinjaBlock.find_block_range(no_spaces_end_docs, "docs", "customer_id")
assert range == (2, 68)

def test_from_file_detects_block_range_special_character(self):
range = JinjaBlock.find_block_range(special_character, "docs", "cust-omer_id")
assert range == (2, 73)

def test_from_file_detects_block_range_simple_macro(self):
range = JinjaBlock.find_block_range(simple_macro, "macro", "test_macro")
assert range == (2, 58)

def test_from_file_detects_block_range_simple_macro_no_spaces(self):
range = JinjaBlock.find_block_range(simple_macro_no_spaces, "macro", "test_macro")
assert range == (2, 54)

def test_from_file_detects_block_range_simple_macro_space_to_args(self):
range = JinjaBlock.find_block_range(simple_macro_space_to_args, "macro", "test_macro")
assert range == (2, 59)

def test_from_file_detects_block_range_simple_macro_string_defaults(self):
range = JinjaBlock.find_block_range(simple_macro_string_defaults, "macro", "test_macro")
assert range == (2, 65)

def test_from_file_detects_block_range_simple_macro_string_defaults_double_quotes(self):
range = JinjaBlock.find_block_range(
simple_macro_string_defaults_double_quotes, "macro", "test_macro"
)
assert range == (2, 65)

def test_from_file_detects_block_range_simple_macro_int_defaults(self):
range = JinjaBlock.find_block_range(simple_macro_int_defaults, "macro", "test_macro")
assert range == (2, 58)

def test_from_file_extracts_content(self):
content = JinjaBlock.isolate_content(string, 2, 72)
assert (
Expand Down

0 comments on commit c8aedf6

Please sign in to comment.