Skip to content

Commit

Permalink
Implement prepend_sys_path_separator
Browse files Browse the repository at this point in the history
  • Loading branch information
mwerezak committed Nov 4, 2023
1 parent a4b3782 commit 50cad3d
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 33 deletions.
19 changes: 19 additions & 0 deletions alembic/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,25 @@ def messaging_opts(self) -> MessagingOptions:
),
)

def get_separator_char(self, name: str) -> Optional[str]:
separator = self.get_main_option(name)

split_on_path = {
None: None,
"space": " ",
"os": os.pathsep,
":": ":",
";": ";",
}

try:
return split_on_path[separator]
except KeyError as ke:
raise ValueError(
"'%s' is not a valid value for %s; "
"expected 'space', 'os', ':', ';'" % (separator, name)
) from ke


class MessagingOptions(TypedDict, total=False):
quiet: bool
Expand Down
55 changes: 22 additions & 33 deletions alembic/script/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,49 +175,38 @@ def from_config(cls, config: Config) -> ScriptDirectory:
version_locations_str = config.get_main_option("version_locations")
version_locations: Optional[List[str]]
if version_locations_str:
version_path_separator = config.get_main_option(
split_char = config.get_separator_char(
"version_path_separator"
)

split_on_path = {
None: None,
"space": " ",
"os": os.pathsep,
":": ":",
";": ";",
}

try:
split_char: Optional[str] = split_on_path[
version_path_separator
]
except KeyError as ke:
raise ValueError(
"'%s' is not a valid value for "
"version_path_separator; "
"expected 'space', 'os', ':', ';'" % version_path_separator
) from ke
if split_char is None:
# legacy behaviour for backwards compatibility
version_locations = _split_on_space_comma.split(
version_locations_str
)
else:
if split_char is None:
# legacy behaviour for backwards compatibility
version_locations = _split_on_space_comma.split(
version_locations_str
)
else:
version_locations = [
x for x in version_locations_str.split(split_char) if x
]
version_locations = [
x for x in version_locations_str.split(split_char) if x
]
else:
version_locations = None

prepend_sys_path = config.get_main_option("prepend_sys_path")
if prepend_sys_path:
if os.name == 'nt':
prepend_paths = _split_on_space_comma.split(prepend_sys_path)
split_char = config.get_separator_char(
"prepend_sys_path_separator"
)

if split_char is None:
# legacy behaviour for backwards compatibility
sys.path[:0] = list(
_split_on_space_comma_colon.split(prepend_sys_path)
)
else:
prepend_paths = _split_on_space_comma_colon.split(prepend_sys_path)

sys.path[:0] = (os.path.normpath(path.strip()) for path in prepend_paths)
sys.path[:0] = (
os.path.normpath(path.strip())
for path in prepend_sys_path.split(split_char)
)

rvl = config.get_main_option("recursive_version_locations") == "true"
return ScriptDirectory(
Expand Down

0 comments on commit 50cad3d

Please sign in to comment.