specware 1.3.24__tar.gz → 1.3.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specware
3
- Version: 1.3.24
3
+ Version: 1.3.26
4
4
  Summary: Provides utilities to specify software.
5
5
  Keywords: certification,documentation,markdown,qualification,requirements-management,traceability
6
6
  Author: The specware Authors
@@ -20,7 +20,7 @@ Classifier: Topic :: Software Development :: Quality Assurance
20
20
  Classifier: Topic :: Software Development :: Testing :: Acceptance
21
21
  Classifier: Topic :: Text Processing :: Markup
22
22
  Classifier: Typing :: Typed
23
- Requires-Dist: specitems>=1.7.11
23
+ Requires-Dist: specitems>=1.7.13
24
24
  Requires-Python: >=3.11
25
25
  Project-URL: Source Code, https://github.com/specthings/specware
26
26
  Project-URL: Bug Tracker, https://github.com/specthings/specware/issues
@@ -4,7 +4,7 @@
4
4
 
5
5
  [project]
6
6
  name = "specware"
7
- version = "1.3.24"
7
+ version = "1.3.26"
8
8
  description = "Provides utilities to specify software."
9
9
  authors = [
10
10
  {name = "The specware Authors", email = "specthings@embedded-brains.de"}
@@ -13,7 +13,7 @@ license = "BSD-2-Clause"
13
13
  readme = "README.md"
14
14
  requires-python = ">=3.11"
15
15
  dependencies = [
16
- "specitems >=1.7.11",
16
+ "specitems >=1.7.13",
17
17
  ]
18
18
  keywords = [
19
19
  "certification",
@@ -29,6 +29,7 @@ documentation files.
29
29
 
30
30
  import argparse
31
31
  import functools
32
+ import itertools
32
33
  import logging
33
34
  import os
34
35
  import sys
@@ -41,7 +42,7 @@ from specitems import (ClangFormatter, ContentContext, DocumentGlossaryConfig,
41
42
  check_license_items, create_config,
42
43
  create_content_context, generate_glossary,
43
44
  generate_specification_documentation, item_is_enabled,
44
- yield_tasks)
45
+ link_is_enabled, yield_tasks)
45
46
 
46
47
  from specware import (
47
48
  run_with_clang_formatter, open_tree, MarkdownInterfaceMapper,
@@ -188,17 +189,33 @@ def _split_targets(targets: list[str],
188
189
  return target_files, item_files
189
190
 
190
191
 
192
+ _PROXY_MEMBER_ROLES = ("proxy-member", "proxy-member-default")
193
+
194
+
195
+ def _add_uid(item_cache: ItemCache, uids: set[str], uid: str) -> None:
196
+ uids.add(uid)
197
+ proxy = item_cache.proxies.get(uid)
198
+ if proxy is not None:
199
+ # The members of a proxy provide the content which the export
200
+ # generates for the proxy.
201
+ uids.update(member.uid for member in proxy.children(
202
+ _PROXY_MEMBER_ROLES, is_link_enabled=link_is_enabled))
203
+
204
+
191
205
  def _resolve_item_files(item_cache: ItemCache,
192
206
  item_files: list[str]) -> Optional[set[str]]:
193
207
  """
194
208
  Resolve the specification item files to the UIDs of the corresponding
195
209
  items.
196
210
 
197
- Return None if a file is associated with no item. Several files may
198
- denote the same item, so the count of the UIDs tells nothing about the
211
+ A proxy item file resolves to the UID of the proxy and to the UIDs of its
212
+ members. Return None if a file is associated with no item. Several files
213
+ may denote the same item, so the count of the UIDs tells nothing about the
199
214
  success of the resolution.
200
215
  """
201
- uid_by_file = dict((item.file, item.uid) for item in item_cache.values())
216
+ # The item cache holds the proxy items apart from the other items.
217
+ uid_by_file = dict((item.file, item.uid) for item in itertools.chain(
218
+ item_cache.values(), item_cache.proxies.values()))
202
219
  uids: set[str] = set()
203
220
  unresolved: list[str] = []
204
221
  for item_file in item_files:
@@ -206,7 +223,7 @@ def _resolve_item_files(item_cache: ItemCache,
206
223
  if uid is None:
207
224
  unresolved.append(item_file)
208
225
  else:
209
- uids.add(uid)
226
+ _add_uid(item_cache, uids, uid)
210
227
  if not unresolved:
211
228
  return uids
212
229
  # The item files are absolute, however, they may denote a symbolic link or
@@ -223,7 +240,7 @@ def _resolve_item_files(item_cache: ItemCache,
223
240
  "'%s'", item_file)
224
241
  resolved = False
225
242
  else:
226
- uids.add(uid)
243
+ _add_uid(item_cache, uids, uid)
227
244
  return uids if resolved else None
228
245
 
229
246
 
File without changes