-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfixup_versions.py
More file actions
110 lines (84 loc) · 3.29 KB
/
Copy pathfixup_versions.py
File metadata and controls
110 lines (84 loc) · 3.29 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import re
from google.ads.googleads import client
sorted_versions = sorted(client._VALID_API_VERSIONS)
def replace_between_markers(content, marker_prefix, marker_suffix, replacement):
replacement = "\n".join([marker_prefix, replacement, marker_suffix])
new_content = re.sub(
f"{marker_prefix}.+{marker_suffix}",
replacement,
content,
flags=re.DOTALL,
)
return new_content
def fix_errors():
error_imports = []
error_types = []
for version in sorted_versions:
error_imports.append(
f"from google.ads.googleads.{version}.errors import GoogleAdsFailure as GoogleAdsFailure{version.upper()}"
)
error_types.append(f"GoogleAdsFailure{version.upper()}")
error_imports_prefix = "# Autogenerated imports"
error_imports_suffix = "# End of autogenerated imports"
error_types_prefix = "# Autogenerated failure types"
error_types_suffix = "# End of autogenerated failure types"
error_imports_replacement = "\n".join(error_imports)
error_types_replacement = " | ".join(error_types)
with open("google-stubs/ads/googleads/errors.pyi") as f:
errors_pyi = f.read()
errors_pyi = replace_between_markers(
errors_pyi,
error_imports_prefix,
error_imports_suffix,
error_imports_replacement,
)
errors_pyi = replace_between_markers(
errors_pyi,
error_types_prefix,
error_types_suffix,
error_types_replacement,
)
with open("google-stubs/ads/googleads/errors.pyi", mode="w") as f:
f.write(errors_pyi)
def fix_client():
default_version_import = (
f"from google.ads.googleads import {client._DEFAULT_VERSION}"
)
default_version_import_prefix = "# Autogenerated import of latest version"
default_version_import_suffix = "# End of autogenerated import of latest version"
with open("google-stubs/ads/googleads/client.pyi") as f:
client_pyi = f.read()
client_pyi = replace_between_markers(
client_pyi,
default_version_import_prefix,
default_version_import_suffix,
default_version_import,
)
version_literals = []
for version in sorted_versions:
version_literals.append(f'_{version.upper()} = Literal["{version}"]')
version_literals.append(
f"_V = {' | '.join([f'_{version.upper()}' for version in sorted_versions])}"
)
version_literals_prefix = "# Autogenerated version literals"
version_literals_suffix = "# End of autogenerated version literals"
version_literals_replacement = "\n".join(version_literals)
client_pyi = replace_between_markers(
client_pyi,
version_literals_prefix,
version_literals_suffix,
version_literals_replacement,
)
get_type_overload = f' def get_type(cls, name: str, version: _V = "{client._DEFAULT_VERSION}") -> Any: ...'
get_type_overload_prefix = " # Autogenerated get_type overload"
get_type_overload_suffix = " # End of autogenerated get_type overload"
client_pyi = replace_between_markers(
client_pyi,
get_type_overload_prefix,
get_type_overload_suffix,
get_type_overload,
)
with open("google-stubs/ads/googleads/client.pyi", mode="w") as f:
f.write(client_pyi)
fix_errors()
fix_client()