Skip to content

Commit dce091b

Browse files
Cleanup (#290)
* Prepare 1.5.0 release * fix: plantuml dependency * remove useless extra index url from python requirements * refactor: split huge function
1 parent b072f03 commit dce091b

5 files changed

Lines changed: 67 additions & 58 deletions

File tree

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
module(
1515
name = "score_docs_as_code",
16-
version = "1.4.0",
16+
version = "1.5.0",
1717
compatibility_level = 1,
1818
)
1919

docs/conf.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@
1616
project_prefix = "DOCS_"
1717
version = "0.1"
1818

19-
extensions = ["score_sphinx_bundle"]
19+
extensions = [
20+
# TODO remove plantuml here once docs-as-code is updated to sphinx-needs 6
21+
"sphinxcontrib.plantuml",
22+
"score_sphinx_bundle",
23+
]

src/extensions/score_metamodel/external_needs.py

Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -137,64 +137,73 @@ def temp(self: NeedsList):
137137
NeedsList._finalise = temp # pyright: ignore[reportPrivateUsage]
138138

139139

140-
def connect_external_needs(app: Sphinx, config: Config):
141-
extend_needs_json_exporter(config, ["project_url", "project_prefix"])
142-
143-
bazel = app.config.external_needs_source or os.getenv("RUNFILES_DIR")
140+
def get_external_needs_source(external_needs_source: str) -> list[ExternalNeedsSource]:
141+
bazel = external_needs_source or os.getenv("RUNFILES_DIR")
144142

145143
if bazel:
146-
external_needs = parse_external_needs_sources_from_DATA(
147-
app.config.external_needs_source
148-
) # pyright: ignore[reportAny]
144+
external_needs = parse_external_needs_sources_from_DATA(external_needs_source)
149145
else:
150146
external_needs = parse_external_needs_sources_from_bazel_query() # pyright: ignore[reportAny]
151147

152-
for e in external_needs:
153-
assert not e.path_to_target # path_to_target is always empty
154-
json_file = f"{e.bazel_module}+/{e.target}/_build/needs/needs.json"
155-
if r := os.getenv("RUNFILES_DIR"):
156-
logger.debug("Using runfiles to determine external needs JSON file.")
157-
fixed_json_file = Path(r) / json_file
158-
else:
159-
logger.debug(
160-
"Running outside bazel. "
161-
"Determining git root for external needs JSON file."
162-
)
163-
git_root = Path.cwd().resolve()
164-
while not (git_root / ".git").exists():
165-
git_root = git_root.parent
166-
if git_root == Path("/"):
167-
sys.exit("Could not find git root.")
168-
logger.debug(f"Git root found: {git_root}")
169-
fixed_json_file = (
170-
git_root / "bazel-bin" / "ide_support.runfiles" / json_file
171-
)
148+
return external_needs
172149

173-
logger.debug(f"Fixed JSON file path: {json_file} -> {fixed_json_file}")
174-
json_file = fixed_json_file
175150

176-
try:
177-
needs_json_data = json.loads(Path(json_file).read_text(encoding="utf-8")) # pyright: ignore[reportAny]
178-
except FileNotFoundError:
179-
logger.error(
180-
f"Could not find external needs JSON file at {json_file}. "
181-
+ "Something went terribly wrong. "
182-
+ "Try running `bazel clean --async && rm -rf _build`."
183-
)
184-
continue
185-
186-
assert isinstance(app.config.needs_external_needs, list) # pyright: ignore[reportUnknownMemberType]
187-
app.config.needs_external_needs.append( # pyright: ignore[reportUnknownMemberType]
188-
{
189-
"id_prefix": needs_json_data["project_prefix"],
190-
"base_url": needs_json_data["project_url"]
191-
+ "/main", # for now always "main"
192-
"json_path": json_file,
193-
}
151+
def add_external_needs_json(e: ExternalNeedsSource, config: Config):
152+
json_file = f"{e.bazel_module}+/{e.target}/_build/needs/needs.json"
153+
if r := os.getenv("RUNFILES_DIR"):
154+
logger.debug("Using runfiles to determine external needs JSON file.")
155+
fixed_json_file = Path(r) / json_file
156+
else:
157+
logger.debug(
158+
"Running outside bazel. "
159+
+ "Determining git root for external needs JSON file."
194160
)
195-
# Making the prefixes uppercase here to match sphinx_needs,
196-
# as it does this internally too.
197-
assert isinstance(app.config.allowed_external_prefixes, list) # pyright: ignore[reportAny]
198-
app.config.allowed_external_prefixes.append( # pyright: ignore[reportUnknownMemberType]
199-
needs_json_data["project_prefix"].upper() # pyright: ignore[reportAny]
161+
git_root = Path.cwd().resolve()
162+
while not (git_root / ".git").exists():
163+
git_root = git_root.parent
164+
if git_root == Path("/"):
165+
sys.exit("Could not find git root.")
166+
logger.debug(f"Git root found: {git_root}")
167+
fixed_json_file = git_root / "bazel-bin" / "ide_support.runfiles" / json_file
168+
169+
logger.debug(f"Fixed JSON file path: {json_file} -> {fixed_json_file}")
170+
json_file = fixed_json_file
171+
172+
try:
173+
needs_json_data = json.loads(Path(json_file).read_text(encoding="utf-8")) # pyright: ignore[reportAny]
174+
except FileNotFoundError:
175+
logger.error(
176+
f"Could not find external needs JSON file at {json_file}. "
177+
+ "Something went terribly wrong. "
178+
+ "Try running `bazel clean --async && rm -rf _build`."
200179
)
180+
# Attempt to continue, exit code will be non-zero after a logged error anyway.
181+
return
182+
183+
assert isinstance(config.needs_external_needs, list) # pyright: ignore[reportUnknownMemberType]
184+
config.needs_external_needs.append( # pyright: ignore[reportUnknownMemberType]
185+
{
186+
"id_prefix": needs_json_data["project_prefix"],
187+
"base_url": needs_json_data["project_url"]
188+
+ "/main", # for now always "main"
189+
"json_path": json_file,
190+
}
191+
)
192+
# Making the prefixes uppercase here to match sphinx_needs,
193+
# as it does this internally too.
194+
assert isinstance(config.allowed_external_prefixes, list) # pyright: ignore[reportAny]
195+
config.allowed_external_prefixes.append( # pyright: ignore[reportUnknownMemberType]
196+
needs_json_data["project_prefix"].upper() # pyright: ignore[reportAny]
197+
)
198+
199+
200+
def connect_external_needs(app: Sphinx, config: Config):
201+
extend_needs_json_exporter(config, ["project_url", "project_prefix"])
202+
203+
external_needs = get_external_needs_source(app.config.external_needs_source)
204+
205+
for e in external_needs:
206+
assert not e.path_to_target # path_to_target is always empty
207+
assert e.target == "needs_json"
208+
209+
add_external_needs_json(e, app.config)

src/requirements.in

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
--extra-index-url https://pypi.org/simple/
2-
31
Sphinx
42

53
# At least 4.2.0, as it fixes a bug in combination with esbonio live preview:

src/requirements.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
#
55
# bazel run //src:requirements.update
66
#
7-
--extra-index-url https://pypi.org/simple/
8-
97
accessible-pygments==0.0.5 \
108
--hash=sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872 \
119
--hash=sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7

0 commit comments

Comments
 (0)