-
Notifications
You must be signed in to change notification settings - Fork 22
/
mike_bin.py
79 lines (66 loc) · 2.67 KB
/
mike_bin.py
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
# Copyright 2023 Aurora Operations, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import re
import subprocess
import sys
from unittest import mock
import mike.driver
import mike.mkdocs_utils
from mike.mkdocs_utils import docs_version_var
# We need to monkey patch any function in mike which calls `mkdocs` via its
# command line interface. Fortunately, there are only two: `version` and
# `build`.
def override_version():
"""Override mike's native logic for retrieving the version."""
# Original code:
# output = subprocess.run(
# ['mkdocs', '--version'],
# check=True, stdout=subprocess.PIPE, universal_newlines=True
# ).stdout.rstrip()
# m = re.search('^mkdocs, version (\\S*)', output)
# return m.group(1)
# Changed version (reformatted with Black):
output = subprocess.run(
["update_docs", "--version"],
check=True,
stdout=subprocess.PIPE,
universal_newlines=True,
).stdout.rstrip()
m = re.search("^\\S+, version (\\S*)", output)
return m.group(1)
def override_build(config_file, version, *, quiet=False, output=None):
"""Override mike's native logic for building the docs."""
# Original line:
# command = (
# ['mkdocs'] + (['--quiet'] if quiet else []) + ['build', '--clean'] +
# (['--config-file', config_file] if config_file else [])
# )
# Changed version (reformatted with Black):
command = (
["update_docs"]
+ (["--quiet"] if quiet else [])
+ ["build", "--clean"]
+ (["--config-file", config_file] if config_file else [])
)
env = os.environ.copy()
env[docs_version_var] = version
subprocess.run(command, check=True, env=env, stdout=output, stderr=output)
if __name__ == "__main__":
# `update_docs` is our name for `mkdocs`. It will be found in the same folder as this script.
# We need to add this folder to the PATH.
os.environ["PATH"] = f"{os.path.join(os.getcwd())}:{os.environ['PATH']}"
with mock.patch("mike.mkdocs_utils.version", override_version):
with mock.patch("mike.mkdocs_utils.build", override_build):
sys.exit(mike.driver.main())