Browse code

Merge pull request #29 from chinghwayu/feature-add-ver-cmd

Adds ver command option to return generated version

Joseph Weston authored on 13/04/2021 17:09:04 • GitHub committed on 13/04/2021 17:09:04
Showing 1 changed files
... ...
@@ -8,8 +8,9 @@ import argparse
8 8
 import tempfile
9 9
 import shutil
10 10
 import textwrap
11
+import glob
11 12
 from zipfile import ZipFile
12
-from importlib.util import find_spec
13
+from importlib.util import find_spec, spec_from_file_location, module_from_spec
13 14
 from urllib.request import urlretrieve
14 15
 
15 16
 if sys.version_info < (3, 5):
... ...
@@ -146,6 +147,14 @@ def get_parser():
146 147
         "package_directory", help="Directory to install 'miniver' into."
147 148
     )
148 149
     install_parser.set_defaults(dispatch=install)
150
+    # 'ver' command
151
+    ver_parser = subparsers.add_parser(
152
+        "ver", help="Get generated version"
153
+    )
154
+    ver_parser.add_argument(
155
+        "package_directory", help="Directory 'miniver' was installed."
156
+    )
157
+    ver_parser.set_defaults(dispatch=ver)
149 158
     return parser
150 159
 
151 160
 
... ...
@@ -192,6 +201,25 @@ def install(args):
192 201
     print("\n".join((msg, _setup_template)).format(package_dir=package_dir))
193 202
 
194 203
 
204
+def ver(args):
205
+    package_dir = args.package_directory
206
+    try:
207
+        version_location, = glob.glob(f"{package_dir}/**/_version.py", recursive=True)
208
+    except ValueError as err:
209
+        if "not enough" in str(err):
210
+            print(f"'_version.py' not found in '{package_dir}'", file=sys.stderr)
211
+            sys.exit(1)
212
+        elif "too many" in str(err):
213
+            print(f"More than 1 '_version.py' found in '{package_dir}'",  file=sys.stderr)
214
+            sys.exit(1)
215
+        else:
216
+            raise
217
+    version_spec = spec_from_file_location("version", version_location)
218
+    version = module_from_spec(version_spec)
219
+    version_spec.loader.exec_module(version)
220
+    print(version.get_version())
221
+
222
+
195 223
 def main():
196 224
     parser = get_parser()
197 225
     args = parser.parse_args()