forked from sqlalchemy/sqlalchemy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnormalize_file_headers.py
More file actions
69 lines (56 loc) · 2.01 KB
/
normalize_file_headers.py
File metadata and controls
69 lines (56 loc) · 2.01 KB
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)