Skip to content

Commit

Permalink
Merge "Enhance version_path_separator behaviour by adding a newline o…
Browse files Browse the repository at this point in the history
…ption" into main
  • Loading branch information
zzzeek authored and Gerrit Code Review committed Aug 5, 2024
2 parents 6bf8238 + 252f7b9 commit e210c24
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 8 deletions.
8 changes: 6 additions & 2 deletions alembic/script/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ def from_config(cls, config: Config) -> ScriptDirectory:
split_on_path = {
None: None,
"space": " ",
"newline": "\n",
"os": os.pathsep,
":": ":",
";": ";",
Expand All @@ -200,7 +201,8 @@ def from_config(cls, config: Config) -> ScriptDirectory:
raise ValueError(
"'%s' is not a valid value for "
"version_path_separator; "
"expected 'space', 'os', ':', ';'" % version_path_separator
"expected 'space', 'newline', 'os', ':', ';'"
% version_path_separator
) from ke
else:
if split_char is None:
Expand All @@ -210,7 +212,9 @@ def from_config(cls, config: Config) -> ScriptDirectory:
)
else:
version_locations = [
x for x in version_locations_str.split(split_char) if x
x.strip()
for x in version_locations_str.split(split_char)
if x
]
else:
version_locations = None
Expand Down
1 change: 1 addition & 0 deletions alembic/templates/async/alembic.ini.mako
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ prepend_sys_path = .
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
# version_path_separator = newline
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.

# set to 'true' to search source files recursively
Expand Down
1 change: 1 addition & 0 deletions alembic/templates/generic/alembic.ini.mako
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ prepend_sys_path = .
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
# version_path_separator = newline
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.

# set to 'true' to search source files recursively
Expand Down
1 change: 1 addition & 0 deletions alembic/templates/multidb/alembic.ini.mako
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ prepend_sys_path = .
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
# version_path_separator = newline
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.

# set to 'true' to search source files recursively
Expand Down
17 changes: 13 additions & 4 deletions alembic/testing/assertions.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ class _ErrorContainer:


@contextlib.contextmanager
def _expect_raises(except_cls, msg=None, check_context=False):
def _expect_raises(
except_cls, msg=None, check_context=False, text_exact=False
):
ec = _ErrorContainer()
if check_context:
are_we_already_in_a_traceback = sys.exc_info()[0]
Expand All @@ -85,7 +87,10 @@ def _expect_raises(except_cls, msg=None, check_context=False):
ec.error = err
success = True
if msg is not None:
assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}"
if text_exact:
assert str(err) == msg, f"{msg} != {err}"
else:
assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}"
if check_context and not are_we_already_in_a_traceback:
_assert_proper_exception_context(err)
print(str(err).encode("utf-8"))
Expand All @@ -98,8 +103,12 @@ def expect_raises(except_cls, check_context=True):
return _expect_raises(except_cls, check_context=check_context)


def expect_raises_message(except_cls, msg, check_context=True):
return _expect_raises(except_cls, msg=msg, check_context=check_context)
def expect_raises_message(
except_cls, msg, check_context=True, text_exact=False
):
return _expect_raises(
except_cls, msg=msg, check_context=check_context, text_exact=text_exact
)


def eq_ignore_whitespace(a, b, msg=None):
Expand Down
1 change: 1 addition & 0 deletions docs/build/tutorial.rst
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ The file generated with the "generic" configuration looks like::
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
# version_path_separator = newline
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.

# set to 'true' to search source files recursively
Expand Down
5 changes: 5 additions & 0 deletions docs/build/unreleased/1509.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.. change::
:tags: feature, environment
:tickets: 1509

Enhance ``version_locations`` parsing to handle paths containing newlines.
11 changes: 9 additions & 2 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,12 @@ def test_attributes_constructor(self):
"/foo /bar",
["/foo", "/bar"],
),
(
"multiline string 1",
"newline",
" /foo \n/bar ",
["/foo", "/bar"],
),
(
"Linux pathsep 1",
":",
Expand Down Expand Up @@ -171,7 +177,7 @@ def test_attributes_constructor(self):
"/foo|/bar",
ValueError(
"'|' is not a valid value for version_path_separator; "
"expected 'space', 'os', ':', ';'"
"expected 'space', 'newline', 'os', ':', ';'"
),
),
id_="iaaa",
Expand All @@ -188,7 +194,8 @@ def test_version_locations(self, separator, string_value, expected_result):
cfg.set_main_option("version_locations", string_value)

if isinstance(expected_result, ValueError):
with expect_raises_message(ValueError, expected_result.args[0]):
message = str(expected_result)
with expect_raises_message(ValueError, message, text_exact=True):
ScriptDirectory.from_config(cfg)
else:
s = ScriptDirectory.from_config(cfg)
Expand Down

0 comments on commit e210c24

Please sign in to comment.