pyegeria 5.4.2.3__py3-none-any.whl → 5.4.3.1__py3-none-any.whl

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.
Files changed (27) hide show
  1. commands/cat/debug_log.2025-08-30_21-15-48_528443.log.zip +0 -0
  2. commands/cat/debug_log.log +9410 -1431
  3. commands/cat/dr_egeria_command_help.py +110 -7
  4. md_processing/__init__.py +6 -11
  5. md_processing/data/commands.json +150 -6
  6. md_processing/dr_egeria.py +7 -6
  7. md_processing/dr_egeria_inbox/glossary_test1.md +18 -3
  8. md_processing/dr_egeria_inbox/product.md +11 -11
  9. md_processing/dr_egeria_outbox/friday/processed-2025-08-31 20:57-glossary_test1.md +400 -0
  10. md_processing/dr_egeria_outbox/monday/processed-2025-09-01 09:26-product.md +210 -0
  11. md_processing/md_commands/glossary_commands.py +84 -459
  12. md_processing/md_commands/product_manager_commands.py +10 -7
  13. md_processing/md_commands/project_commands.py +2 -2
  14. md_processing/md_processing_utils/common_md_proc_utils.py +9 -6
  15. md_processing/md_processing_utils/common_md_utils.py +15 -13
  16. md_processing/md_processing_utils/extraction_utils.py +12 -3
  17. md_processing/md_processing_utils/md_processing_constants.py +5 -4
  18. pyegeria/__init__.py +2 -1
  19. pyegeria/config.py +292 -190
  20. pyegeria/glossary_manager.py +2 -2
  21. pyegeria/load_config.py +36 -0
  22. pyegeria-5.4.3.1.dist-info/METADATA +163 -0
  23. {pyegeria-5.4.2.3.dist-info → pyegeria-5.4.3.1.dist-info}/RECORD +26 -22
  24. pyegeria-5.4.2.3.dist-info/METADATA +0 -78
  25. {pyegeria-5.4.2.3.dist-info → pyegeria-5.4.3.1.dist-info}/LICENSE +0 -0
  26. {pyegeria-5.4.2.3.dist-info → pyegeria-5.4.3.1.dist-info}/WHEEL +0 -0
  27. {pyegeria-5.4.2.3.dist-info → pyegeria-5.4.3.1.dist-info}/entry_points.txt +0 -0
@@ -17,6 +17,12 @@ from rich.markdown import Markdown
17
17
  from rich.prompt import Prompt
18
18
  from rich.table import Table
19
19
  from rich.text import Text
20
+ from typing import List, Dict, Any
21
+ from html import escape
22
+ try:
23
+ from markdown_it import MarkdownIt
24
+ except Exception:
25
+ MarkdownIt = None
20
26
 
21
27
  from pyegeria import (
22
28
  EgeriaTech,
@@ -48,6 +54,40 @@ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "../../")
48
54
  EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "md_processing/dr_egeria_inbox")
49
55
  EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "md_processing/dr_egeria_outbox")
50
56
 
57
+ def _get_console_width_from_config(default_width: int = EGERIA_WIDTH) -> int:
58
+ try:
59
+ from pyegeria.config import settings
60
+ return int(getattr(settings.Environment, "console_width", default_width) or default_width)
61
+ except Exception:
62
+ return default_width
63
+
64
+ def _get_outbox_dir() -> str:
65
+ root = os.environ.get("EGERIA_ROOT_PATH", EGERIA_ROOT_PATH)
66
+ out = os.environ.get("EGERIA_OUTBOX_PATH", EGERIA_OUTBOX_PATH)
67
+ return os.path.join(root, out)
68
+
69
+ def _md_to_html(md_text: str) -> str:
70
+ if not md_text:
71
+ return ""
72
+ if MarkdownIt is None:
73
+ return f"<pre>{escape(md_text)}</pre>"
74
+ try:
75
+ return MarkdownIt().render(md_text)
76
+ except Exception:
77
+ return f"<pre>{escape(md_text)}</pre>"
78
+
79
+ def _build_html_table(columns: List[str], rows: List[List[str]]) -> str:
80
+ ths = ''.join(f'<th>{escape(c)}</th>' for c in columns)
81
+ body_rows = []
82
+ for r in rows:
83
+ tds = []
84
+ for cell in r:
85
+ if isinstance(cell, str) and cell.lstrip().startswith('<table'):
86
+ tds.append(f"<td>{cell}</td>")
87
+ else:
88
+ tds.append(f"<td>{escape(cell or '')}</td>")
89
+ body_rows.append('<tr>' + ''.join(tds) + '</tr>')
90
+ return '<table>\n<thead><tr>' + ths + '</tr></thead>\n<tbody>\n' + "\n".join(body_rows) + '\n</tbody>\n</table>'
51
91
 
52
92
  def display_command_terms(
53
93
  search_string: str = "*",
@@ -60,6 +100,7 @@ def display_command_terms(
60
100
  jupyter: bool = EGERIA_JUPYTER,
61
101
  width: int = EGERIA_WIDTH,
62
102
  output_format: str = "TABLE",
103
+ mode: str = "terminal",
63
104
  ):
64
105
  """Display a table of glossary terms filtered by search_string and glossary, if specified. If no
65
106
  filters then all terms are displayed. If glossary_guid or name is specified, then only terms from that
@@ -113,7 +154,7 @@ def display_command_terms(
113
154
  elif output_format == "REPORT":
114
155
  action = "Report"
115
156
  if output_format != "TABLE":
116
- file_path = os.path.join(EGERIA_ROOT_PATH, EGERIA_OUTBOX_PATH)
157
+ file_path = _get_outbox_dir()
117
158
  file_name = f"Command-Help-{time.strftime('%Y-%m-%d-%H-%M-%S')}-{action}.md"
118
159
  full_file_path = os.path.join(file_path, file_name)
119
160
  os.makedirs(os.path.dirname(full_file_path), exist_ok=True)
@@ -159,11 +200,11 @@ def display_command_terms(
159
200
  page_size=500,
160
201
  )
161
202
 
162
- if type(terms) is str:
203
+ if isinstance(terms, str):
163
204
  print(f"No commands found - this was not the command you were looking for?! - {search_string} : {glossary_guid} ")
164
205
  sys.exit(0)
165
206
  sorted_terms = sorted(
166
- terms, key=lambda k: k["properties"].get("displayName","---")
207
+ terms, key=lambda k: (k.get("properties") or {}).get("displayName","---")
167
208
  )
168
209
  style = "bright_white on black"
169
210
  if type(terms) is str:
@@ -221,6 +262,62 @@ def display_command_terms(
221
262
  g_client.close_session()
222
263
  return table
223
264
 
265
+ # Shared fetch for md modes
266
+ if mode in ("md", "md-html"):
267
+ try:
268
+ terms = g_client.find_glossary_terms(search_string, page_size=500)
269
+ except Exception:
270
+ terms = []
271
+ if isinstance(terms, str) and terms == "NO_TERMS_FOUND":
272
+ print(f"\n==> No commands found for search string '{search_string}'")
273
+ return
274
+ # Build outputs
275
+ out_dir = _get_outbox_dir()
276
+ os.makedirs(out_dir, exist_ok=True)
277
+ stamp = time.strftime('%Y-%m-%d-%H-%M-%S')
278
+ if mode == "md":
279
+ # Simple sections per term
280
+ lines: List[str] = []
281
+ lines.append(f"# Dr.Egeria Commands (search: `{search_string}`)")
282
+ lines.append("")
283
+ sorted_terms = sorted(terms, key=lambda t: (t.get("properties") or {}).get("displayName", "---"))
284
+ for term in sorted_terms:
285
+ props = term.get("properties") or {}
286
+ name = props.get("displayName", "---") or "---"
287
+ desc = props.get("description", "") or ""
288
+ usage = props.get("usage", "") or ""
289
+ lines.append(f"## {name}")
290
+ lines.append("")
291
+ lines.append("### Description\n")
292
+ lines.append(desc if desc.strip() else "_No description_")
293
+ lines.append("")
294
+ if usage.strip():
295
+ lines.append("### Usage\n")
296
+ lines.append(usage)
297
+ lines.append("")
298
+ lines.append("---\n")
299
+ content = "\n".join(lines)
300
+ file_name = f"Command-Help-{stamp}-md.md"
301
+ else:
302
+ # md-html nested tables
303
+ columns = ["Command", "Description", "Usage"]
304
+ rows: List[List[str]] = []
305
+ sorted_terms = sorted(terms, key=lambda t: (t.get("properties") or {}).get("displayName", "---"))
306
+ for term in sorted_terms:
307
+ props = term.get("properties") or {}
308
+ name = props.get("displayName", "---") or "---"
309
+ desc = props.get("description", "") or ""
310
+ usage_md = props.get("usage", "") or ""
311
+ usage_html = _md_to_html(usage_md).strip()
312
+ rows.append([name, desc, usage_html])
313
+ content = f"# Dr.Egeria Commands (search: `{search_string}`)\n\n" + _build_html_table(columns, rows) + "\n"
314
+ file_name = f"Command-Help-{stamp}-md-html.md"
315
+ full_file_path = os.path.join(out_dir, file_name)
316
+ with open(full_file_path, 'w', encoding='utf-8') as f:
317
+ f.write(content)
318
+ print(f"\n==> Help written to {full_file_path}")
319
+ return
320
+
224
321
  try:
225
322
  with console.pager(styles=True):
226
323
  console.print(generate_table(search_string, glossary_guid))
@@ -241,6 +338,8 @@ def main():
241
338
  parser.add_argument("--userid", help="User Id")
242
339
  parser.add_argument("--password", help="User Password")
243
340
  parser.add_argument("--guid", help="GUID of glossary to search")
341
+ parser.add_argument("--mode", choices=["terminal","md","md-html"], default="terminal", help="Output mode: terminal (default) prints Rich table; md writes Markdown; md-html writes Markdown with HTML tables.")
342
+ parser.add_argument("--search", help="Search string for commands", default=None)
244
343
 
245
344
  args = parser.parse_args()
246
345
 
@@ -253,13 +352,17 @@ def main():
253
352
  guid = args.guid if args.guid is not None else EGERIA_HOME_GLOSSARY_GUID
254
353
 
255
354
  try:
256
- search_string = Prompt.ask("Enter the command you are searching for:", default="*")
355
+ search_default = args.search or "*"
356
+ search_string = args.search or Prompt.ask("Enter the command you are searching for:", default=search_default)
257
357
 
258
- output_format = Prompt.ask("What output format do you want?", choices=["TABLE", "LIST", "REPORT"], default="TABLE")
358
+ if args.mode == "terminal":
359
+ output_format = Prompt.ask("What output format do you want?", choices=["TABLE", "LIST", "REPORT"], default="TABLE")
360
+ else:
361
+ output_format = "TABLE"
259
362
 
260
363
  display_command_terms(
261
- search_string, guid, 'Egeria-Markdown', server, url,
262
- userid, user_pass, output_format= output_format
364
+ search_string, guid, 'Egeria-Markdown', server, url,
365
+ userid, user_pass, output_format=output_format, mode=args.mode
263
366
  )
264
367
 
265
368
  except KeyboardInterrupt:
md_processing/__init__.py CHANGED
@@ -34,15 +34,10 @@ from md_processing.md_commands.data_designer_commands import (process_data_field
34
34
  process_data_class_list_command,
35
35
  process_data_structure_upsert_command)
36
36
 
37
- from md_processing.md_commands.glossary_commands import (process_glossary_upsert_command, process_glossary_list_command,
38
- process_glossary_structure_command,
39
- process_category_upsert_command, update_category_parent,
40
- process_category_list_command, update_term_categories,
37
+ from md_processing.md_commands.glossary_commands import (process_glossary_upsert_command,
41
38
  process_term_upsert_command,
42
- process_create_term_term_relationship_command,
43
- process_term_list_command, process_term_details_command,
44
- process_term_history_command,
45
- process_term_revision_history_command)
39
+ process_link_term_term_relationship_command,
40
+ )
46
41
  from md_processing.md_commands.project_commands import (process_project_upsert_command, process_link_project_dependency_command,
47
42
  process_link_project_hierarchy_command)
48
43
  # Re-export all functions from the original md_processing_utils.py to maintain backward compatibility
@@ -53,9 +48,9 @@ from md_processing.md_processing_utils.common_md_utils import (render_markdown,
53
48
  is_present, find_key_with_value,
54
49
  process_provenance_command, set_delete_request_body,
55
50
  set_rel_request_body, set_filter_request_body,
56
- set_update_body, set_peer_gov_def_request_body,
57
- set_gov_prop_body, set_prop_body, set_create_body,
58
- GOVERNANCE_POLICIES, GOVERNANCE_CONTROLS, GOVERNANCE_DRIVERS
51
+ set_update_body, set_peer_gov_def_request_body, set_rel_prop_body,
52
+ set_gov_prop_body, set_element_prop_body, set_create_body,
53
+ GOVERNANCE_POLICIES, GOVERNANCE_CONTROLS, GOVERNANCE_DRIVERS
59
54
  )
60
55
  from md_processing.md_processing_utils.extraction_utils import (extract_command_plus, extract_command,
61
56
  extract_attribute, process_simple_attribute,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "Command Specifications": {
3
- "exported": "Aug 31, 2025 at 12:03:20PM",
3
+ "exported": "Sep 1, 2025 at 7:09:27AM",
4
4
  "Create Governance Driver": {
5
5
  "display_name": "Governance Driver",
6
6
  "qn_prefix": "GovDriver",
@@ -24270,7 +24270,7 @@
24270
24270
  "Create Collection": {
24271
24271
  "display_name": "Collection",
24272
24272
  "qn_prefix": "Collection",
24273
- "alternate_names": "Create Root Collection; Create Folder",
24273
+ "alternate_names": "Create Root Collection;Create Folder",
24274
24274
  "family": "Digital Product Manager",
24275
24275
  "description": "Create or update a generic collection. While it can be used to create specific kinds of collections, you cannot set the collection-specific properties - so use the appropriate Dr.Egeria command to set all of the properties.",
24276
24276
  "verb": "Create",
@@ -39945,10 +39945,10 @@
39945
39945
  "Journal Entry": "",
39946
39946
  "Attributes": [
39947
39947
  {
39948
- "Term 1": {
39948
+ "Term 1": {
39949
39949
  "variable_name": "term_1",
39950
39950
  "inUpdate": true,
39951
- "attr_labels": "Term Name 1",
39951
+ "attr_labels": "Term Name 1; Term1",
39952
39952
  "examples": "",
39953
39953
  "default_value": "",
39954
39954
  "valid_values": "",
@@ -39969,10 +39969,10 @@
39969
39969
  }
39970
39970
  },
39971
39971
  {
39972
- "Term 2": {
39972
+ "Term 2": {
39973
39973
  "variable_name": "term_2",
39974
39974
  "inUpdate": true,
39975
- "attr_labels": "Term Name 2",
39975
+ "attr_labels": "Term Name 2; Term2",
39976
39976
  "examples": "",
39977
39977
  "default_value": "",
39978
39978
  "valid_values": "",
@@ -40015,6 +40015,150 @@
40015
40015
  "level": "Basic",
40016
40016
  "Journal Entry": ""
40017
40017
  }
40018
+ },
40019
+ {
40020
+ "Description": {
40021
+ "variable_name": "description",
40022
+ "inUpdate": true,
40023
+ "attr_labels": "",
40024
+ "examples": "",
40025
+ "default_value": "",
40026
+ "valid_values": "",
40027
+ "existing_element": "",
40028
+ "description": "A description of the Relationship.",
40029
+ "qualified_name_pattern": "",
40030
+ "generated": false,
40031
+ "style": "Simple",
40032
+ "user_specified": true,
40033
+ "unique": false,
40034
+ "input_required": false,
40035
+ "isParent": false,
40036
+ "isAnchor": false,
40037
+ "min_cardinality": 0,
40038
+ "max_cardinality": 1,
40039
+ "level": "Basic",
40040
+ "Journal Entry": ""
40041
+ }
40042
+ },
40043
+ {
40044
+ "Expression": {
40045
+ "variable_name": "expression",
40046
+ "inUpdate": true,
40047
+ "attr_labels": "",
40048
+ "examples": "",
40049
+ "default_value": "",
40050
+ "valid_values": "",
40051
+ "existing_element": "",
40052
+ "description": "An expression describing the relationship.",
40053
+ "qualified_name_pattern": "",
40054
+ "generated": false,
40055
+ "style": "Simple",
40056
+ "user_specified": true,
40057
+ "unique": false,
40058
+ "input_required": false,
40059
+ "isParent": false,
40060
+ "isAnchor": false,
40061
+ "min_cardinality": 1,
40062
+ "max_cardinality": 1,
40063
+ "level": "Advance",
40064
+ "Journal Entry": ""
40065
+ }
40066
+ },
40067
+ {
40068
+ "Confidence": {
40069
+ "variable_name": "confidence",
40070
+ "inUpdate": true,
40071
+ "attr_labels": "",
40072
+ "examples": "",
40073
+ "default_value": "",
40074
+ "valid_values": "",
40075
+ "existing_element": "",
40076
+ "description": "Percent confidence in the relationship.",
40077
+ "qualified_name_pattern": "",
40078
+ "generated": false,
40079
+ "style": "Simple Int",
40080
+ "user_specified": true,
40081
+ "unique": false,
40082
+ "input_required": false,
40083
+ "isParent": false,
40084
+ "isAnchor": false,
40085
+ "min_cardinality": 0,
40086
+ "max_cardinality": 1,
40087
+ "level": "Advanced",
40088
+ "Journal Entry": ""
40089
+ }
40090
+ },
40091
+ {
40092
+ "Status": {
40093
+ "variable_name": "",
40094
+ "inUpdate": true,
40095
+ "attr_labels": "",
40096
+ "examples": "",
40097
+ "default_value": "",
40098
+ "valid_values": "",
40099
+ "existing_element": "",
40100
+ "description": "",
40101
+ "qualified_name_pattern": "",
40102
+ "generated": false,
40103
+ "style": "Simple",
40104
+ "user_specified": true,
40105
+ "unique": false,
40106
+ "input_required": false,
40107
+ "isParent": false,
40108
+ "isAnchor": false,
40109
+ "min_cardinality": 1,
40110
+ "max_cardinality": 1,
40111
+ "level": "Basic",
40112
+ "Journal Entry": ""
40113
+ }
40114
+ },
40115
+ {
40116
+ "Steward": {
40117
+ "variable_name": "steward",
40118
+ "inUpdate": true,
40119
+ "attr_labels": "",
40120
+ "examples": "",
40121
+ "default_value": "",
40122
+ "valid_values": "",
40123
+ "existing_element": "",
40124
+ "description": "Steward responsible.",
40125
+ "qualified_name_pattern": "",
40126
+ "generated": false,
40127
+ "style": "Simple",
40128
+ "user_specified": true,
40129
+ "unique": false,
40130
+ "input_required": false,
40131
+ "isParent": false,
40132
+ "isAnchor": false,
40133
+ "min_cardinality": 0,
40134
+ "max_cardinality": 1,
40135
+ "level": "Advance",
40136
+ "Journal Entry": ""
40137
+ }
40138
+ },
40139
+ {
40140
+ "Source": {
40141
+ "variable_name": "source",
40142
+ "inUpdate": true,
40143
+ "attr_labels": "",
40144
+ "examples": "",
40145
+ "default_value": "",
40146
+ "valid_values": "",
40147
+ "existing_element": "",
40148
+ "description": "Source of the relationship",
40149
+ "qualified_name_pattern": "",
40150
+ "generated": false,
40151
+ "style": "Simple",
40152
+ "user_specified": true,
40153
+ "unique": false,
40154
+ "input_required": false,
40155
+ "isParent": false,
40156
+ "isAnchor": false,
40157
+ "min_cardinality": 0,
40158
+ "max_cardinality": 1,
40159
+ "level": "Advance",
40160
+ "Journal Entry": ""
40161
+ }
40018
40162
  }
40019
40163
  ]
40020
40164
  },
@@ -20,13 +20,11 @@ from rich import print
20
20
  from rich.console import Console
21
21
 
22
22
  from md_processing import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
23
- process_category_upsert_command, process_provenance_command, get_current_datetime_string,
23
+ process_provenance_command, get_current_datetime_string,
24
24
  process_project_upsert_command, command_list, process_blueprint_upsert_command,
25
25
  process_solution_component_upsert_command, process_component_link_unlink_command,
26
- process_term_list_command,
27
- process_category_list_command, process_glossary_list_command, process_term_history_command,
28
- process_glossary_structure_command, process_term_revision_history_command,
29
- process_create_term_term_relationship_command, process_term_details_command,
26
+
27
+ process_link_term_term_relationship_command,
30
28
  process_information_supply_chain_upsert_command,
31
29
  process_information_supply_chain_link_unlink_command, process_sol_arch_list_command,
32
30
  process_digital_product_upsert_command, process_agreement_upsert_command,
@@ -123,7 +121,7 @@ def process_md_file(input_file: str, output_folder:str, directive: str, server:
123
121
  elif potential_command in ["Create Term", "Update Term"]:
124
122
  result = process_term_upsert_command(client, current_block, directive)
125
123
  elif potential_command in ["Create Term-Term Relationship", "Update Term-Term Relationship"]:
126
- result = process_create_term_term_relationship_command(client, current_block, directive)
124
+ result = process_link_term_term_relationship_command(client, current_block, directive)
127
125
  #
128
126
  elif potential_command in LIST_COMMANDS:
129
127
  result = process_output_command(client, current_block, directive)
@@ -132,6 +130,9 @@ def process_md_file(input_file: str, output_folder:str, directive: str, server:
132
130
  elif potential_command in ["List Glossaries", "List Terms", "List Glossary Terms", "View Glossaries"
133
131
  "View Terms", "View Glossary Terms"]:
134
132
  result = process_output_command(client, current_block, directive)
133
+ elif potential_command in ["Link Termss", "Detach Terms",
134
+ "Link Term-Term Relationship", "Detach Term-Term Relationship"]:
135
+ result = process_link_term_term_relationship_command(client, current_block, directive)
135
136
  elif potential_command in PROJECT_COMMANDS:
136
137
  result = process_project_upsert_command(client, current_block, directive)
137
138
  elif potential_command in ["Link Parent Project", "Attach Parent Project", "Detach Parent Project"]:
@@ -1,3 +1,18 @@
1
+ # Don't Link Term-Term Relationship
2
+ ## Term 1
3
+ Term::Calico::2
4
+
5
+ ## Term2
6
+ Term::Siamese::3
7
+
8
+ ## Relationship
9
+ Synonym
10
+
11
+ ## Description
12
+ I'm not sure why they are related
13
+
14
+ ____
15
+
1
16
  # Don't List Glossaries
2
17
  ## Output Format
3
18
  LIST
@@ -22,7 +37,7 @@ True
22
37
  ____
23
38
 
24
39
 
25
- # Create Glossary
40
+ # Don't Create Glossary
26
41
 
27
42
  ## Glossary Name
28
43
 
@@ -72,7 +87,7 @@ About Cats
72
87
  Dr.Egeria Test
73
88
  ____
74
89
 
75
- # Create Term
90
+ # Don't Update Term
76
91
 
77
92
  ## Glossary
78
93
 
@@ -120,7 +135,7 @@ Calico
120
135
  About Cats
121
136
  ___
122
137
 
123
- # Don't Update Term
138
+ # Don't Create Term
124
139
 
125
140
  ## Glossary Name
126
141
 
@@ -1,5 +1,5 @@
1
1
  ____
2
- # Don't Update Root Collection
2
+ # Don't Create Root Collection
3
3
  ## Name
4
4
  GeoSpatial Root
5
5
 
@@ -13,7 +13,7 @@ GeoSpatial
13
13
 
14
14
  ____
15
15
 
16
- # Don't Update Folder
16
+ # Don't Create Folder
17
17
  ## Name
18
18
  Digital Products MarketPlace
19
19
 
@@ -82,7 +82,7 @@ GeoSpatial
82
82
 
83
83
  ____
84
84
 
85
- # Don't Create Digital Product
85
+ # Don't Update Digital Product
86
86
  ## Name
87
87
  Sentinel-2a
88
88
 
@@ -127,12 +127,12 @@ A folder for digital product subscriptions.
127
127
  GeoSpatial
128
128
 
129
129
  ____
130
- # Don't Create Digital Subscription
130
+ # Don't Update Digital Subscription
131
131
  ## Name
132
132
  GeoSpatial Data Products Subscription
133
133
 
134
134
  # Qualified Name
135
- Subscription::GeoSpatial-Data-Products-Subscription
135
+ Subscription::GeoSpatial Data Products Subscription
136
136
 
137
137
  ## Description
138
138
  A general subscription agreement for GeoSpatial Data Products
@@ -145,7 +145,7 @@ Best Effort
145
145
  ____
146
146
 
147
147
  ____
148
- # Don't Create Agreement
148
+ # Don't Update Agreement
149
149
  ## Name
150
150
  A test agreement
151
151
 
@@ -162,7 +162,7 @@ ____
162
162
 
163
163
  # Don't Link Agreement->Item
164
164
  ## Agreement Name
165
- Subscription::GeoSpatial-Data-Products-Subscription
165
+ GeoSpatial Data Products Subscription
166
166
 
167
167
  ## Item Name
168
168
  DigitalProduct::Sentinel-2a
@@ -183,11 +183,11 @@ Sentinel-2a-Subscription
183
183
  { "Attribution" : "Required"}
184
184
  ____
185
185
 
186
- # Link Subscriber->Subscription
186
+ # Link Subscriber->Subscription
187
187
  ## Subscription
188
- Subscription::GeoSpatial-Data-Products-Subscription
188
+ Subscription::GeoSpatial Data Products Subscription
189
189
 
190
- ## Subscriber
190
+ ## Subscriber Id
191
191
  Agreement::A-test-agreement
192
192
 
193
193
  ___
@@ -198,7 +198,7 @@ LIST
198
198
 
199
199
  ___
200
200
 
201
- # Don't View Data Sharing Agreements
201
+ # Don't View Data Sharing Agreements
202
202
  ## Output Format
203
203
  REPORT
204
204
  ___