Skip to content

Commit cd5327c

Browse files
authored
✨ Add is_import need field (#1429)
This field records whether a need originated from a `needimport` source, similar to `is_external`
1 parent 1148e2b commit cd5327c

15 files changed

+221
-0
lines changed

sphinx_needs/api/need.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def generate_need(
6565
template: None | str = None,
6666
pre_template: str | None = None,
6767
post_template: str | None = None,
68+
is_import: bool = False,
6869
is_external: bool = False,
6970
external_url: str | None = None,
7071
external_css: str = "external_link",
@@ -223,6 +224,7 @@ def generate_need(
223224
"is_need": True,
224225
"id_parent": need_id,
225226
"id_complete": need_id,
227+
"is_import": is_import or False,
226228
"is_external": is_external or False,
227229
"external_url": external_url if is_external else None,
228230
"external_css": external_css or "external_link",
@@ -304,6 +306,7 @@ def add_need(
304306
template: None | str = None,
305307
pre_template: str | None = None,
306308
post_template: str | None = None,
309+
is_import: bool = False,
307310
is_external: bool = False,
308311
external_url: str | None = None,
309312
external_css: str = "external_link",
@@ -401,6 +404,7 @@ def add_need(
401404
template=template,
402405
pre_template=pre_template,
403406
post_template=post_template,
407+
is_import=is_import,
404408
is_external=is_external,
405409
external_url=external_url,
406410
external_css=external_css,

sphinx_needs/data.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ class CoreFieldParameters(TypedDict):
167167
"default": {},
168168
},
169169
},
170+
"is_import": {
171+
"description": "If true, the need was derived from an import.",
172+
"schema": {"type": "boolean", "default": False},
173+
"exclude_external": True,
174+
"exclude_import": True,
175+
},
170176
"is_external": {
171177
"description": "If true, no node is created and need is referencing external url.",
172178
"schema": {"type": "boolean", "default": False},
@@ -409,6 +415,9 @@ class NeedsInfoType(TypedDict, total=False):
409415
arch: Required[dict[str, str]]
410416
"""Mapping of uml key to uml content."""
411417

418+
is_import: Required[bool]
419+
"""If true, the need was derived from an import."""
420+
412421
# external reference information
413422
is_external: Required[bool]
414423
"""If true, no node is created and need is referencing external url."""

sphinx_needs/directives/needimport.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ def run(self) -> Sequence[nodes.Node]:
265265
need_params["docname"] = self.docname
266266
need_params["lineno"] = self.lineno
267267

268+
need_params["is_import"] = True
269+
268270
try:
269271
nodes = add_need(self.env.app, self.state, **need_params) # type: ignore[call-arg]
270272
except InvalidNeedException as err:

tests/__snapshots__/test_basic_doc.ambr

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
'id': 'ST_001',
2929
'id_prefix': '',
3030
'is_external': False,
31+
'is_import': False,
3132
'is_modified': False,
3233
'is_need': True,
3334
'is_part': False,
@@ -96,6 +97,7 @@
9697
'id': 'US_38823',
9798
'id_prefix': '',
9899
'is_external': False,
100+
'is_import': False,
99101
'is_modified': False,
100102
'is_need': True,
101103
'is_part': False,
@@ -283,6 +285,12 @@
283285
'field_type': 'core',
284286
'type': 'boolean',
285287
}),
288+
'is_import': dict({
289+
'default': False,
290+
'description': 'If true, the need was derived from an import.',
291+
'field_type': 'core',
292+
'type': 'boolean',
293+
}),
286294
'is_modified': dict({
287295
'default': False,
288296
'description': 'Whether the need was modified by needextend.',

tests/__snapshots__/test_dynamic_functions.ambr

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,12 @@
285285
'field_type': 'core',
286286
'type': 'boolean',
287287
}),
288+
'is_import': dict({
289+
'default': False,
290+
'description': 'If true, the need was derived from an import.',
291+
'field_type': 'core',
292+
'type': 'boolean',
293+
}),
288294
'is_modified': dict({
289295
'default': False,
290296
'description': 'Whether the need was modified by needextend.',

tests/__snapshots__/test_external.ambr

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
'docname': 'index',
2323
'external_css': 'external_link',
2424
'id': 'IMP_REQ_01',
25+
'is_import': True,
2526
'layout': '',
2627
'lineno': 4,
2728
'section_name': 'Title',
@@ -175,6 +176,12 @@
175176
'field_type': 'core',
176177
'type': 'boolean',
177178
}),
179+
'is_import': dict({
180+
'default': False,
181+
'description': 'If true, the need was derived from an import.',
182+
'field_type': 'core',
183+
'type': 'boolean',
184+
}),
178185
'is_modified': dict({
179186
'default': False,
180187
'description': 'Whether the need was modified by needextend.',
@@ -725,6 +732,12 @@
725732
'field_type': 'core',
726733
'type': 'boolean',
727734
}),
735+
'is_import': dict({
736+
'default': False,
737+
'description': 'If true, the need was derived from an import.',
738+
'field_type': 'core',
739+
'type': 'boolean',
740+
}),
728741
'is_modified': dict({
729742
'default': False,
730743
'description': 'Whether the need was modified by needextend.',

tests/__snapshots__/test_extra_options.ambr

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@
206206
'field_type': 'core',
207207
'type': 'boolean',
208208
}),
209+
'is_import': dict({
210+
'default': False,
211+
'description': 'If true, the need was derived from an import.',
212+
'field_type': 'core',
213+
'type': 'boolean',
214+
}),
209215
'is_modified': dict({
210216
'default': False,
211217
'description': 'Whether the need was modified by needextend.',

tests/__snapshots__/test_list2need.ambr

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
'id_parent': 'NEED-002',
5353
'id_prefix': '',
5454
'is_external': False,
55+
'is_import': False,
5556
'is_modified': False,
5657
'is_need': True,
5758
'is_part': False,
@@ -138,6 +139,7 @@
138139
'id_parent': 'NEED-003',
139140
'id_prefix': '',
140141
'is_external': False,
142+
'is_import': False,
141143
'is_modified': False,
142144
'is_need': True,
143145
'is_part': False,
@@ -223,6 +225,7 @@
223225
'id_parent': 'NEED-1',
224226
'id_prefix': '',
225227
'is_external': False,
228+
'is_import': False,
226229
'is_modified': False,
227230
'is_need': True,
228231
'is_part': False,
@@ -308,6 +311,7 @@
308311
'id_parent': 'NEED-2',
309312
'id_prefix': '',
310313
'is_external': False,
314+
'is_import': False,
311315
'is_modified': False,
312316
'is_need': True,
313317
'is_part': False,
@@ -396,6 +400,7 @@
396400
'id_parent': 'NEED-3',
397401
'id_prefix': '',
398402
'is_external': False,
403+
'is_import': False,
399404
'is_modified': False,
400405
'is_need': True,
401406
'is_part': False,
@@ -484,6 +489,7 @@
484489
'id_parent': 'NEED-4',
485490
'id_prefix': '',
486491
'is_external': False,
492+
'is_import': False,
487493
'is_modified': False,
488494
'is_need': True,
489495
'is_part': False,
@@ -570,6 +576,7 @@
570576
'id_parent': 'NEED-A',
571577
'id_prefix': '',
572578
'is_external': False,
579+
'is_import': False,
573580
'is_modified': False,
574581
'is_need': True,
575582
'is_part': False,
@@ -655,6 +662,7 @@
655662
'id_parent': 'NEED-B',
656663
'id_prefix': '',
657664
'is_external': False,
665+
'is_import': False,
658666
'is_modified': False,
659667
'is_need': True,
660668
'is_part': False,
@@ -740,6 +748,7 @@
740748
'id_parent': 'NEED-C',
741749
'id_prefix': '',
742750
'is_external': False,
751+
'is_import': False,
743752
'is_modified': False,
744753
'is_need': True,
745754
'is_part': False,
@@ -825,6 +834,7 @@
825834
'id_parent': 'NEED-W',
826835
'id_prefix': '',
827836
'is_external': False,
837+
'is_import': False,
828838
'is_modified': False,
829839
'is_need': True,
830840
'is_part': False,
@@ -913,6 +923,7 @@
913923
'id_parent': 'NEED-X',
914924
'id_prefix': '',
915925
'is_external': False,
926+
'is_import': False,
916927
'is_modified': False,
917928
'is_need': True,
918929
'is_part': False,
@@ -1003,6 +1014,7 @@
10031014
'id_parent': 'NEED-Y',
10041015
'id_prefix': '',
10051016
'is_external': False,
1017+
'is_import': False,
10061018
'is_modified': False,
10071019
'is_need': True,
10081020
'is_part': False,
@@ -1093,6 +1105,7 @@
10931105
'id_parent': 'NEED-Z',
10941106
'id_prefix': '',
10951107
'is_external': False,
1108+
'is_import': False,
10961109
'is_modified': False,
10971110
'is_need': True,
10981111
'is_part': False,
@@ -1191,6 +1204,7 @@
11911204
'id_parent': 'SP_69FFD',
11921205
'id_prefix': '',
11931206
'is_external': False,
1207+
'is_import': False,
11941208
'is_modified': False,
11951209
'is_need': True,
11961210
'is_part': False,
@@ -1280,6 +1294,7 @@
12801294
'id_parent': 'TC_EA5AF',
12811295
'id_prefix': '',
12821296
'is_external': False,
1297+
'is_import': False,
12831298
'is_modified': False,
12841299
'is_need': True,
12851300
'is_part': False,
@@ -1365,6 +1380,7 @@
13651380
'id_parent': 'US_F1B63',
13661381
'id_prefix': '',
13671382
'is_external': False,
1383+
'is_import': False,
13681384
'is_modified': False,
13691385
'is_need': True,
13701386
'is_part': False,

tests/__snapshots__/test_need_constraints.ambr

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
'id': 'SECURITY_REQ',
2929
'id_prefix': '',
3030
'is_external': False,
31+
'is_import': False,
3132
'is_modified': False,
3233
'is_need': True,
3334
'is_part': False,
@@ -102,6 +103,7 @@
102103
'id': 'SP_109F4',
103104
'id_prefix': '',
104105
'is_external': False,
106+
'is_import': False,
105107
'is_modified': False,
106108
'is_need': True,
107109
'is_part': False,
@@ -177,6 +179,7 @@
177179
'id': 'SP_3EBFA',
178180
'id_prefix': '',
179181
'is_external': False,
182+
'is_import': False,
180183
'is_modified': False,
181184
'is_need': True,
182185
'is_part': False,
@@ -250,6 +253,7 @@
250253
'id': 'SP_CA3FB',
251254
'id_prefix': '',
252255
'is_external': False,
256+
'is_import': False,
253257
'is_modified': False,
254258
'is_need': True,
255259
'is_part': False,
@@ -318,6 +322,7 @@
318322
'id': 'SP_TOO_001',
319323
'id_prefix': '',
320324
'is_external': False,
325+
'is_import': False,
321326
'is_modified': False,
322327
'is_need': True,
323328
'is_part': False,
@@ -393,6 +398,7 @@
393398
'id': 'SP_TOO_002',
394399
'id_prefix': '',
395400
'is_external': False,
401+
'is_import': False,
396402
'is_modified': False,
397403
'is_need': True,
398404
'is_part': False,
@@ -468,6 +474,7 @@
468474
'id': 'TEST_STYLE',
469475
'id_prefix': '',
470476
'is_external': False,
477+
'is_import': False,
471478
'is_modified': False,
472479
'is_need': True,
473480
'is_part': False,
@@ -540,6 +547,7 @@
540547
'id': 'TEST_STYLE2',
541548
'id_prefix': '',
542549
'is_external': False,
550+
'is_import': False,
543551
'is_modified': False,
544552
'is_need': True,
545553
'is_part': False,
@@ -727,6 +735,12 @@
727735
'field_type': 'core',
728736
'type': 'boolean',
729737
}),
738+
'is_import': dict({
739+
'default': False,
740+
'description': 'If true, the need was derived from an import.',
741+
'field_type': 'core',
742+
'type': 'boolean',
743+
}),
730744
'is_modified': dict({
731745
'default': False,
732746
'description': 'Whether the need was modified by needextend.',

0 commit comments

Comments
 (0)