Skip to content

Commit bc0b8c9

Browse files
authored
👌 Remove some unnecessary keys from needs.json (#1053)
Remove additional keys from the `needs.json`, that are not intended to be exposed to the user: - back links for user defined link types (standard back links are already ommited), - `id_parent` and `id_complete`, which are only relevant to parts expansion.
1 parent d8b0a28 commit bc0b8c9

File tree

8 files changed

+11
-284
lines changed

8 files changed

+11
-284
lines changed

‎sphinx_needs/needsfile.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from jsonschema import Draft7Validator
1313
from sphinx.config import Config
1414

15+
from sphinx_needs.config import NeedsSphinxConfig
1516
from sphinx_needs.data import NeedsFilterType, NeedsInfoType
1617
from sphinx_needs.logging import get_logger
1718

@@ -31,6 +32,10 @@ class NeedsList:
3132
"hide_tags",
3233
"content",
3334
"content_node",
35+
# id_parent, id_parent are added on calls to `prepare_need_list`
36+
# but are only relevant to parts
37+
"id_parent",
38+
"id_complete",
3439
}
3540

3641
JSON_KEY_EXCLUSIONS_FILTERS = {
@@ -60,6 +65,10 @@ def __init__(self, config: Config, outdir: str, confdir: str) -> None:
6065
"versions": {},
6166
}
6267
self.log = log
68+
# also exclude back links for link types dynamically set by the user
69+
back_link_keys = {x["option"] + "_back" for x in NeedsSphinxConfig(config).extra_links}
70+
self._exclude_need_keys = self.JSON_KEY_EXCLUSIONS_NEEDS | back_link_keys
71+
self._exclude_filter_keys = self.JSON_KEY_EXCLUSIONS_FILTERS | back_link_keys
6372

6473
def update_or_add_version(self, version: str) -> None:
6574
if version not in self.needs_list["versions"].keys():
@@ -78,14 +87,14 @@ def update_or_add_version(self, version: str) -> None:
7887

7988
def add_need(self, version: str, need_info: NeedsInfoType) -> None:
8089
self.update_or_add_version(version)
81-
writable_needs = {key: need_info[key] for key in need_info if key not in self.JSON_KEY_EXCLUSIONS_NEEDS} # type: ignore[literal-required]
90+
writable_needs = {key: need_info[key] for key in need_info if key not in self._exclude_need_keys} # type: ignore[literal-required]
8291
writable_needs["description"] = need_info["content"]
8392
self.needs_list["versions"][version]["needs"][need_info["id"]] = writable_needs
8493
self.needs_list["versions"][version]["needs_amount"] = len(self.needs_list["versions"][version]["needs"])
8594

8695
def add_filter(self, version: str, need_filter: NeedsFilterType) -> None:
8796
self.update_or_add_version(version)
88-
writable_filters = {key: need_filter[key] for key in need_filter if key not in self.JSON_KEY_EXCLUSIONS_FILTERS} # type: ignore[literal-required]
97+
writable_filters = {key: need_filter[key] for key in need_filter if key not in self._exclude_filter_keys} # type: ignore[literal-required]
8998
self.needs_list["versions"][version]["filters"][need_filter["export_id"].upper()] = writable_filters
9099
self.needs_list["versions"][version]["filters_amount"] = len(self.needs_list["versions"][version]["filters"])
91100

‎tests/__snapshots__/test_basic_doc.ambr

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
'has_forbidden_dead_links': '',
3535
'hidden': '',
3636
'id': 'ST_001',
37-
'id_complete': 'ST_001',
38-
'id_parent': 'ST_001',
3937
'id_prefix': '',
4038
'is_external': False,
4139
'is_modified': False,
@@ -52,8 +50,6 @@
5250
'parent_need': '',
5351
'parent_needs': list([
5452
]),
55-
'parent_needs_back': list([
56-
]),
5753
'parts': dict({
5854
}),
5955
'post_template': None,
@@ -106,8 +102,6 @@
106102
'has_forbidden_dead_links': '',
107103
'hidden': '',
108104
'id': 'US_38823',
109-
'id_complete': 'US_38823',
110-
'id_parent': 'US_38823',
111105
'id_prefix': '',
112106
'is_external': False,
113107
'is_modified': False,
@@ -124,8 +118,6 @@
124118
'parent_need': '',
125119
'parent_needs': list([
126120
]),
127-
'parent_needs_back': list([
128-
]),
129121
'parts': dict({
130122
}),
131123
'post_template': None,

‎tests/__snapshots__/test_export_id.ambr

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,6 @@
119119
'blocks': list([
120120
'REQ_003',
121121
]),
122-
'blocks_back': list([
123-
'REQ_005',
124-
]),
125122
'closed_at': '',
126123
'completion': '',
127124
'constraints': list([
@@ -143,8 +140,6 @@
143140
'has_forbidden_dead_links': '',
144141
'hidden': '',
145142
'id': 'REQ_001',
146-
'id_complete': 'REQ_001',
147-
'id_parent': 'REQ_001',
148143
'id_prefix': '',
149144
'is_external': False,
150145
'is_modified': False,
@@ -164,8 +159,6 @@
164159
'parent_need': '',
165160
'parent_needs': list([
166161
]),
167-
'parent_needs_back': list([
168-
]),
169162
'parts': dict({
170163
}),
171164
'post_template': None,
@@ -188,10 +181,6 @@
188181
'template': None,
189182
'tests': list([
190183
]),
191-
'tests_back': list([
192-
'TEST_001',
193-
'TEST_002',
194-
]),
195184
'title': 'My requirement',
196185
'type': 'story',
197186
'type_name': 'User Story',
@@ -206,8 +195,6 @@
206195
'avatar': '',
207196
'blocks': list([
208197
]),
209-
'blocks_back': list([
210-
]),
211198
'closed_at': '',
212199
'completion': '',
213200
'constraints': list([
@@ -229,8 +216,6 @@
229216
'has_forbidden_dead_links': '',
230217
'hidden': '',
231218
'id': 'REQ_002',
232-
'id_complete': 'REQ_002',
233-
'id_parent': 'REQ_002',
234219
'id_prefix': '',
235220
'is_external': False,
236221
'is_modified': False,
@@ -247,8 +232,6 @@
247232
'parent_need': '',
248233
'parent_needs': list([
249234
]),
250-
'parent_needs_back': list([
251-
]),
252235
'parts': dict({
253236
}),
254237
'post_template': None,
@@ -271,8 +254,6 @@
271254
'template': None,
272255
'tests': list([
273256
]),
274-
'tests_back': list([
275-
]),
276257
'title': 'My requirement 2',
277258
'type': 'story',
278259
'type_name': 'User Story',
@@ -287,9 +268,6 @@
287268
'avatar': '',
288269
'blocks': list([
289270
]),
290-
'blocks_back': list([
291-
'REQ_001',
292-
]),
293271
'closed_at': '',
294272
'completion': '',
295273
'constraints': list([
@@ -311,8 +289,6 @@
311289
'has_forbidden_dead_links': '',
312290
'hidden': '',
313291
'id': 'REQ_003',
314-
'id_complete': 'REQ_003',
315-
'id_parent': 'REQ_003',
316292
'id_prefix': '',
317293
'is_external': False,
318294
'is_modified': False,
@@ -329,8 +305,6 @@
329305
'parent_need': '',
330306
'parent_needs': list([
331307
]),
332-
'parent_needs_back': list([
333-
]),
334308
'parts': dict({
335309
}),
336310
'post_template': None,
@@ -353,9 +327,6 @@
353327
'template': None,
354328
'tests': list([
355329
]),
356-
'tests_back': list([
357-
'TEST_001',
358-
]),
359330
'title': 'My requirement 3',
360331
'type': 'story',
361332
'type_name': 'User Story',
@@ -370,8 +341,6 @@
370341
'avatar': '',
371342
'blocks': list([
372343
]),
373-
'blocks_back': list([
374-
]),
375344
'closed_at': '',
376345
'completion': '',
377346
'constraints': list([
@@ -393,8 +362,6 @@
393362
'has_forbidden_dead_links': '',
394363
'hidden': '',
395364
'id': 'REQ_004',
396-
'id_complete': 'REQ_004',
397-
'id_parent': 'REQ_004',
398365
'id_prefix': '',
399366
'is_external': False,
400367
'is_modified': False,
@@ -411,8 +378,6 @@
411378
'parent_need': '',
412379
'parent_needs': list([
413380
]),
414-
'parent_needs_back': list([
415-
]),
416381
'parts': dict({
417382
}),
418383
'post_template': None,
@@ -435,8 +400,6 @@
435400
'template': None,
436401
'tests': list([
437402
]),
438-
'tests_back': list([
439-
]),
440403
'title': 'My requirement 4',
441404
'type': 'story',
442405
'type_name': 'User Story',
@@ -452,8 +415,6 @@
452415
'blocks': list([
453416
'REQ_001',
454417
]),
455-
'blocks_back': list([
456-
]),
457418
'closed_at': '',
458419
'completion': '',
459420
'constraints': list([
@@ -479,8 +440,6 @@
479440
'has_forbidden_dead_links': '',
480441
'hidden': '',
481442
'id': 'REQ_005',
482-
'id_complete': 'REQ_005',
483-
'id_parent': 'REQ_005',
484443
'id_prefix': '',
485444
'is_external': False,
486445
'is_modified': False,
@@ -499,8 +458,6 @@
499458
'parent_need': '',
500459
'parent_needs': list([
501460
]),
502-
'parent_needs_back': list([
503-
]),
504461
'parts': dict({
505462
'1': dict({
506463
'content': ' awesome part',
@@ -552,9 +509,6 @@
552509
'template': None,
553510
'tests': list([
554511
]),
555-
'tests_back': list([
556-
'TEST_003',
557-
]),
558512
'title': 'Req 5',
559513
'type': 'story',
560514
'type_name': 'User Story',
@@ -569,8 +523,6 @@
569523
'avatar': '',
570524
'blocks': list([
571525
]),
572-
'blocks_back': list([
573-
]),
574526
'closed_at': '',
575527
'completion': '',
576528
'constraints': list([
@@ -592,8 +544,6 @@
592544
'has_forbidden_dead_links': '',
593545
'hidden': '',
594546
'id': 'TEST_001',
595-
'id_complete': 'TEST_001',
596-
'id_parent': 'TEST_001',
597547
'id_prefix': '',
598548
'is_external': False,
599549
'is_modified': False,
@@ -610,8 +560,6 @@
610560
'parent_need': '',
611561
'parent_needs': list([
612562
]),
613-
'parent_needs_back': list([
614-
]),
615563
'parts': dict({
616564
}),
617565
'post_template': None,
@@ -636,8 +584,6 @@
636584
'REQ_001',
637585
'REQ_003',
638586
]),
639-
'tests_back': list([
640-
]),
641587
'title': 'Test of requirements',
642588
'type': 'test',
643589
'type_name': 'Test Case',
@@ -652,8 +598,6 @@
652598
'avatar': '',
653599
'blocks': list([
654600
]),
655-
'blocks_back': list([
656-
]),
657601
'closed_at': '',
658602
'completion': '',
659603
'constraints': list([
@@ -675,8 +619,6 @@
675619
'has_forbidden_dead_links': '',
676620
'hidden': '',
677621
'id': 'TEST_002',
678-
'id_complete': 'TEST_002',
679-
'id_parent': 'TEST_002',
680622
'id_prefix': '',
681623
'is_external': False,
682624
'is_modified': False,
@@ -694,8 +636,6 @@
694636
'parent_need': '',
695637
'parent_needs': list([
696638
]),
697-
'parent_needs_back': list([
698-
]),
699639
'parts': dict({
700640
}),
701641
'post_template': None,
@@ -719,8 +659,6 @@
719659
'tests': list([
720660
'REQ_001',
721661
]),
722-
'tests_back': list([
723-
]),
724662
'title': 'Test of requirements2',
725663
'type': 'test',
726664
'type_name': 'Test Case',
@@ -735,8 +673,6 @@
735673
'avatar': '',
736674
'blocks': list([
737675
]),
738-
'blocks_back': list([
739-
]),
740676
'closed_at': '',
741677
'completion': '',
742678
'constraints': list([
@@ -758,8 +694,6 @@
758694
'has_forbidden_dead_links': '',
759695
'hidden': '',
760696
'id': 'TEST_003',
761-
'id_complete': 'TEST_003',
762-
'id_parent': 'TEST_003',
763697
'id_prefix': '',
764698
'is_external': False,
765699
'is_modified': False,
@@ -777,8 +711,6 @@
777711
'parent_need': '',
778712
'parent_needs': list([
779713
]),
780-
'parent_needs_back': list([
781-
]),
782714
'parts': dict({
783715
}),
784716
'post_template': None,
@@ -803,8 +735,6 @@
803735
'REQ_005.1',
804736
'REQ_005.cool',
805737
]),
806-
'tests_back': list([
807-
]),
808738
'title': 'Test of requirements 5',
809739
'type': 'test',
810740
'type_name': 'Test Case',

0 commit comments

Comments
 (0)