Files
sqlalchemy/tools/sync_test_files.py
T
Mike Bayer cd96ffe287 refactor code generation tools , include --check command
in particular it looks like CI was not picking up on the
"git diff" oriented commands, which were failing to run due
to pathing issues.  As we were setting cwd for black/zimports
relative to sqlalchemy library, and tox installs it in
the venv, black/zimports would fail to run from tox, and
since these are subprocess.run we didn't pick up the
failure.

This overall locks down how zimports/black are run
so that we are definitely from the source root, by using
the location of tools/ to determine the root.

Fixes: #8892
Change-Id: I7c54b747edd5a80e0c699b8456febf66d8b62375
2023-01-18 15:07:55 -05:00

67 lines
1.6 KiB
Python

"""Synchronizes test files that require the future annotation import.
.. versionadded:: 2.0
"""
from __future__ import annotations
from pathlib import Path
from typing import Any
from typing import Iterable
from sqlalchemy.util.tool_support import code_writer_cmd
header = '''\
"""This file is automatically generated from the file
{source!r}
by the {this_file!r} script.
Do not edit manually, any change will be lost.
""" # noqa: E501
from __future__ import annotations
'''
home = Path(__file__).parent.parent
this_file = Path(__file__).relative_to(home).as_posix()
remove_str = "# anno only: "
def run_operation(
name: str, source: str, dest: str, cmd: code_writer_cmd
) -> None:
source_data = Path(source).read_text().replace(remove_str, "")
dest_data = header.format(source=source, this_file=this_file) + source_data
cmd.write_output_file_from_text(dest_data, dest)
def main(file: str, cmd: code_writer_cmd) -> None:
if file == "all":
operations: Iterable[Any] = files.items()
else:
operations = [(file, files[file])]
for name, info in operations:
run_operation(name, info["source"], info["dest"], cmd)
files = {
"typed_annotation": {
"source": "test/orm/declarative/test_typed_mapping.py",
"dest": "test/orm/declarative/test_tm_future_annotations_sync.py",
}
}
if __name__ == "__main__":
cmd = code_writer_cmd(__file__)
with cmd.add_arguments() as parser:
parser.add_argument(
"--file", choices=list(files) + ["all"], default="all"
)
with cmd.run_program():
main(cmd.args.file, cmd)