Skip to content

Commit 32fd0b5

Browse files
authored
🔧 change prepare_need_list to expand_needs_view function (#1258)
Rename `prepare_need_list` to `expand_needs_view`, to make its purpose clearer, and change its input argument to a `NeedsView`, so we can do the expansion more performantly.
1 parent 26bcdc4 commit 32fd0b5

File tree

4 files changed

+23
-32
lines changed

4 files changed

+23
-32
lines changed

‎sphinx_needs/directives/needbar.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from sphinx_needs.config import NeedsSphinxConfig
1212
from sphinx_needs.data import NeedsBarType, SphinxNeedsData
13-
from sphinx_needs.filter_common import FilterBase, filter_needs, prepare_need_list
13+
from sphinx_needs.filter_common import FilterBase, expand_needs_view, filter_needs
1414
from sphinx_needs.logging import get_logger, log_warning
1515
from sphinx_needs.utils import (
1616
add_doc,
@@ -291,9 +291,8 @@ def process_needbar(
291291

292292
# 5. process content
293293
local_data_number = []
294-
need_list = list(
295-
prepare_need_list(needs_data.get_needs_view().values())
296-
) # adds parts to need_list
294+
# adds parts to need_list
295+
need_list = expand_needs_view(needs_data.get_needs_view())
297296

298297
for line in local_data:
299298
line_number = []

‎sphinx_needs/directives/needpie.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from sphinx_needs.data import NeedsPieType, SphinxNeedsData
1313
from sphinx_needs.debug import measure_time
1414
from sphinx_needs.directives.utils import no_needs_found_paragraph
15-
from sphinx_needs.filter_common import FilterBase, filter_needs, prepare_need_list
15+
from sphinx_needs.filter_common import FilterBase, expand_needs_view, filter_needs
1616
from sphinx_needs.logging import get_logger, log_warning
1717
from sphinx_needs.utils import (
1818
add_doc,
@@ -157,9 +157,8 @@ def process_needpie(
157157
content = current_needpie["content"]
158158

159159
sizes = []
160-
need_list = list(
161-
prepare_need_list(needs_data.get_needs_view().values())
162-
) # adds parts to need_list
160+
# adds parts to need_list
161+
need_list = expand_needs_view(needs_data.get_needs_view())
163162
if content and not current_needpie["filter_func"]:
164163
for line in content:
165164
if line.isdigit():

‎sphinx_needs/filter_common.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,13 @@ def process_filters(
124124
found_needs: list[NeedsInfoType]
125125

126126
# check if include external needs
127-
all_needs: Iterable[NeedsInfoType] = needs_view.values()
128127
if not include_external:
129-
all_needs = [need for need in all_needs if not need["is_external"]]
130-
131-
found_needs_by_options: list[NeedsInfoType] = []
128+
needs_view = NeedsView(
129+
{id: need for id, need in needs_view.items() if not need["is_external"]}
130+
)
132131

133132
# Add all need_parts of given needs to the search list
134-
all_needs_incl_parts = prepare_need_list(all_needs)
133+
all_needs_incl_parts = expand_needs_view(needs_view)
135134

136135
# Check if external filter code is defined
137136
try:
@@ -154,6 +153,7 @@ def process_filters(
154153

155154
if (not filter_code or filter_code.isspace()) and not filter_func_sig:
156155
if bool(filter_data["status"] or filter_data["tags"] or filter_data["types"]):
156+
found_needs_by_options: list[NeedsInfoType] = []
157157
for need_info in all_needs_incl_parts:
158158
status_filter_passed = False
159159
if (
@@ -277,20 +277,13 @@ def process_filters(
277277
return found_needs
278278

279279

280-
def prepare_need_list(need_list: Iterable[NeedsInfoType]) -> list[NeedsInfoType]:
281-
# all_needs_incl_parts = need_list.copy()
282-
all_needs_incl_parts: list[NeedsInfoType]
283-
try:
284-
all_needs_incl_parts = need_list[:] # type: ignore
285-
except TypeError:
286-
try:
287-
all_needs_incl_parts = need_list.copy() # type: ignore
288-
except AttributeError:
289-
all_needs_incl_parts = list(need_list)[:]
290-
291-
for need in need_list:
292-
for filter_part in iter_need_parts(need):
293-
all_needs_incl_parts.append(filter_part)
280+
def expand_needs_view(needs_view: NeedsView) -> list[NeedsInfoType]:
281+
"""Turns a needs view into a list of needs, expanding all need["parts"] to be items of the list."""
282+
all_needs_incl_parts: list[NeedsInfoType] = []
283+
for need in needs_view.values():
284+
all_needs_incl_parts.append(need)
285+
for need_part in iter_need_parts(need):
286+
all_needs_incl_parts.append(need_part)
294287

295288
return all_needs_incl_parts
296289

‎sphinx_needs/roles/need_count.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from sphinx_needs.api.exceptions import NeedsInvalidFilter
1313
from sphinx_needs.config import NeedsSphinxConfig
1414
from sphinx_needs.data import SphinxNeedsData
15-
from sphinx_needs.filter_common import filter_needs, prepare_need_list
15+
from sphinx_needs.filter_common import expand_needs_view, filter_needs
1616
from sphinx_needs.logging import get_logger
1717

1818
log = get_logger(__name__)
@@ -30,13 +30,13 @@ def process_need_count(
3030
) -> None:
3131
needs_config = NeedsSphinxConfig(app.config)
3232
for node_need_count in found_nodes:
33-
all_needs = list(SphinxNeedsData(app.env).get_needs_view().values())
33+
needs_view = SphinxNeedsData(app.env).get_needs_view()
3434
filter = node_need_count["reftarget"]
3535

3636
if filter:
3737
filters = filter.split(" ? ")
3838
if len(filters) == 1:
39-
need_list = prepare_need_list(all_needs) # adds parts to need_list
39+
need_list = expand_needs_view(needs_view) # adds parts to need_list
4040
amount = str(
4141
len(
4242
filter_needs(
@@ -48,7 +48,7 @@ def process_need_count(
4848
)
4949
)
5050
elif len(filters) == 2:
51-
need_list = prepare_need_list(all_needs) # adds parts to need_list
51+
need_list = expand_needs_view(needs_view) # adds parts to need_list
5252
amount_1 = len(
5353
filter_needs(
5454
need_list, needs_config, filters[0], location=node_need_count
@@ -66,7 +66,7 @@ def process_need_count(
6666
'Use " ? " only once to separate filters.'
6767
)
6868
else:
69-
amount = str(len(all_needs))
69+
amount = str(len(needs_view))
7070

7171
new_node_count = nodes.Text(amount)
7272
node_need_count.replace_self(new_node_count)

0 commit comments

Comments
 (0)