1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
from datetime import date
from pathlib import Path
import re
from sqlalchemy.util.tool_support import code_writer_cmd
sa_path = Path(__file__).parent.parent / "lib/sqlalchemy"
file_re = re.compile(r"^# [\w+/]+.(?:pyx?|pxd)$", re.MULTILINE)
license_re = re.compile(
r"Copyright .C. (\d+)-\d+ the SQLAlchemy authors and contributors"
)
this_year = date.today().year
license_ = f"""
# Copyright (C) 2005-{this_year} the SQLAlchemy authors and \
contributors
# <see AUTHORS file>
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
"""
def run_file(cmd: code_writer_cmd, file: Path, update_year: bool):
content = file.read_text("utf-8")
path = str(file.relative_to(sa_path)).replace("\\", "/") # handle windows
path_comment = f"# {path}"
has_license = bool(license_re.search(content))
if file_re.match(content.strip()):
if has_license:
to_sub = path_comment
else:
to_sub = path_comment + license_
content = file_re.sub(to_sub, content, count=1)
else:
content = path_comment + ("\n" if has_license else license_) + content
if has_license and update_year:
content = license_re.sub(
rf"Copyright (C) \1-{this_year} the SQLAlchemy "
"authors and contributors",
content,
1,
)
cmd.write_output_file_from_text(content, file)
def run(cmd: code_writer_cmd, update_year: bool):
i = 0
for ext in ("py", "pyx", "pxd"):
for file in sa_path.glob(f"**/*.{ext}"):
run_file(cmd, file, update_year)
i += 1
cmd.write_status(f"\nDone. Processed {i} files.")
if __name__ == "__main__":
cmd = code_writer_cmd(__file__)
with cmd.add_arguments() as parser:
parser.add_argument(
"--update-year",
action="store_true",
help="Update the year in the license files",
)
with cmd.run_program():
run(cmd, cmd.args.update_year)
|