1+ import os
2+ import sys
3+ import tomli
4+ import tomli_w
5+ import argparse
6+
7+ package_name = "pyIDI"
8+
9+ def synchronize_version ():
10+ print ("Synchronizing version (pyproject.toml and __init__.py)..." )
11+
12+ # Read the version from pyproject.toml
13+ with open ("pyproject.toml" , "rb" ) as f :
14+ pyproject = tomli .load (f )
15+
16+ version_toml = pyproject ["project" ]["version" ]
17+
18+ # Read the __init__.py
19+ with open (f"{ package_name } /__init__.py" , "r" ) as f :
20+ init = f .readlines ()
21+
22+ # Replace the version with the one from pyproject.toml
23+ for i , line in enumerate (init ):
24+ if "__version__" in line :
25+ init [i ] = "__version__ = " + f'"{ version_toml } "' + "\n "
26+ init = "" .join (init )
27+
28+ # Write the new __init__.py
29+ with open (f"{ package_name } /__init__.py" , "w" ) as f :
30+ f .write (init )
31+
32+ # Update docs/source/conf.py
33+ with open ("docs/source/conf.py" , "r" , encoding = "utf8" ) as f :
34+ conf = f .readlines ()
35+
36+ for i , line in enumerate (conf ):
37+ if "version = " in line and not line .strip ().startswith ("#" ):
38+ conf [i ] = f"version = '{ version_toml .rsplit ('.' , 1 )[0 ]} '\n "
39+ elif "release = " in line and not line .strip ().startswith ("#" ):
40+ conf [i ] = f"release = '{ version_toml } '\n "
41+
42+ # Write the new conf.py
43+ with open ("docs/source/conf.py" , "w" , encoding = "utf8" ) as f :
44+ f .write ("" .join (conf ))
45+
46+ def set_version (version ):
47+ with open ("pyproject.toml" , "rb" ) as f :
48+ pyproject = tomli .load (f )
49+ pyproject ["project" ]["version" ] = version
50+ with open ("pyproject.toml" , "wb" ) as f :
51+ tomli_w .dump (pyproject , f )
52+
53+ def bump_version (bump ):
54+ with open ("pyproject.toml" , "rb" ) as f :
55+ pyproject = tomli .load (f )
56+ version = pyproject ["project" ]["version" ]
57+ version_parts = version .split ("." )
58+ if bump == "patch" :
59+ version_parts [2 ] = str (int (version_parts [2 ]) + 1 )
60+ elif bump == "minor" :
61+ version_parts [1 ] = str (int (version_parts [1 ]) + 1 )
62+ version_parts [2 ] = "0"
63+ elif bump == "major" :
64+ version_parts [0 ] = str (int (version_parts [0 ]) + 1 )
65+ version_parts [1 ] = "0"
66+ version_parts [2 ] = "0"
67+ else :
68+ raise ValueError (f"Invalid bump type: { bump } " )
69+
70+ version = "." .join (version_parts )
71+ set_version (version )
72+
73+ if __name__ == "__main__" :
74+ parser = argparse .ArgumentParser ()
75+ parser .add_argument ("--bump" , default = "" , choices = ["patch" , "minor" , "major" ], help = "Bump the version of the package." )
76+ parser .add_argument ("--set-version" , type = str , help = "Set the version of the package." )
77+ args = parser .parse_args ()
78+
79+ if args .set_version :
80+ set_version (args .set_version )
81+
82+ elif args .bump :
83+ bump_version (args .bump )
84+
85+ synchronize_version ()
0 commit comments