praetorian-cli 2.2.16__tar.gz → 2.2.17__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.
Files changed (110) hide show
  1. {praetorian_cli-2.2.16/praetorian_cli.egg-info → praetorian_cli-2.2.17}/PKG-INFO +1 -1
  2. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/chariot.py +1 -9
  3. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/preseeds.py +19 -8
  4. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/seeds.py +24 -4
  5. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_preseed.py +10 -0
  6. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_seed.py +10 -0
  7. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17/praetorian_cli.egg-info}/PKG-INFO +1 -1
  8. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/setup.cfg +1 -1
  9. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/LICENSE +0 -0
  10. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/MANIFEST.in +0 -0
  11. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/README.md +0 -0
  12. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/__init__.py +0 -0
  13. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/__init__.py +0 -0
  14. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/add.py +0 -0
  15. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/aegis.py +0 -0
  16. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/agent.py +0 -0
  17. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/chariot.py +0 -0
  18. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/cli_decorators.py +0 -0
  19. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/configure.py +0 -0
  20. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/delete.py +0 -0
  21. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/enrich.py +0 -0
  22. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/get.py +0 -0
  23. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/imports.py +0 -0
  24. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/link.py +0 -0
  25. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/list.py +0 -0
  26. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/script.py +0 -0
  27. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/search.py +0 -0
  28. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/ssh_utils.py +0 -0
  29. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/test.py +0 -0
  30. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/unlink.py +0 -0
  31. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/update.py +0 -0
  32. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/handlers/utils.py +0 -0
  33. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/main.py +0 -0
  34. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/scripts/__init__.py +0 -0
  35. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/scripts/commands/__init__.py +0 -0
  36. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/scripts/commands/nmap-example.py +0 -0
  37. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/scripts/utils.py +0 -0
  38. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/__init__.py +0 -0
  39. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/__init__.py +0 -0
  40. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/accounts.py +0 -0
  41. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/aegis.py +0 -0
  42. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/agents.py +0 -0
  43. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/assets.py +0 -0
  44. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/attributes.py +0 -0
  45. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/capabilities.py +0 -0
  46. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/configurations.py +0 -0
  47. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/credentials.py +0 -0
  48. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/definitions.py +0 -0
  49. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/files.py +0 -0
  50. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/integrations.py +0 -0
  51. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/jobs.py +0 -0
  52. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/keys.py +0 -0
  53. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/risks.py +0 -0
  54. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/scanners.py +0 -0
  55. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/schema.py +0 -0
  56. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/search.py +0 -0
  57. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/settings.py +0 -0
  58. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/statistics.py +0 -0
  59. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/webhook.py +0 -0
  60. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/entities/webpage.py +0 -0
  61. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/keychain.py +0 -0
  62. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/mcp_server.py +0 -0
  63. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/model/__init__.py +0 -0
  64. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/model/aegis.py +0 -0
  65. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/model/globals.py +0 -0
  66. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/model/query.py +0 -0
  67. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/model/utils.py +0 -0
  68. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/__init__.py +0 -0
  69. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/pytest.ini +0 -0
  70. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_account.py +0 -0
  71. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_agent.py +0 -0
  72. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_asset.py +0 -0
  73. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_attribute.py +0 -0
  74. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_capabilities.py +0 -0
  75. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_configuration.py +0 -0
  76. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_conversation.py +0 -0
  77. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_definition.py +0 -0
  78. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_extend.py +0 -0
  79. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_file.py +0 -0
  80. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_job.py +0 -0
  81. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_key.py +0 -0
  82. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_mcp.py +0 -0
  83. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_risk.py +0 -0
  84. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_search.py +0 -0
  85. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_setting.py +0 -0
  86. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_webhook.py +0 -0
  87. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_webpage.py +0 -0
  88. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/test_z_cli.py +0 -0
  89. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/ui_mocks.py +0 -0
  90. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/sdk/test/utils.py +0 -0
  91. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/__init__.py +0 -0
  92. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/__init__.py +0 -0
  93. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/__init__.py +0 -0
  94. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/help.py +0 -0
  95. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/info.py +0 -0
  96. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/job.py +0 -0
  97. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/list.py +0 -0
  98. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/set.py +0 -0
  99. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/commands/ssh.py +0 -0
  100. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/constants.py +0 -0
  101. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/menu.py +0 -0
  102. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/aegis/utils.py +0 -0
  103. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/conversation/__init__.py +0 -0
  104. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli/ui/conversation/textual_chat.py +0 -0
  105. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli.egg-info/SOURCES.txt +0 -0
  106. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli.egg-info/dependency_links.txt +0 -0
  107. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli.egg-info/entry_points.txt +0 -0
  108. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli.egg-info/requires.txt +0 -0
  109. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/praetorian_cli.egg-info/top_level.txt +0 -0
  110. {praetorian_cli-2.2.16 → praetorian_cli-2.2.17}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praetorian-cli
3
- Version: 2.2.16
3
+ Version: 2.2.17
4
4
  Summary: For interacting with the Chariot API
5
5
  Home-page: https://github.com/praetorian-inc/praetorian-cli
6
6
  Author: Praetorian
@@ -66,11 +66,9 @@ class Chariot:
66
66
 
67
67
  def chariot_request(self, method: str, url: str, headers: dict = {}, **kwargs) -> requests.Response:
68
68
  """
69
- Centralized wrapper around requests.request. Take care of proxy, beta flag, and
69
+ Centralized wrapper around requests.request. Takes care of proxy and
70
70
  supplies the authentication headers
71
71
  """
72
- self.add_beta_url_param(kwargs)
73
-
74
72
  if self.proxy:
75
73
  kwargs['proxies'] = {'http': self.proxy, 'https': self.proxy}
76
74
  kwargs['verify'] = False
@@ -78,12 +76,6 @@ class Chariot:
78
76
  return requests.request(method, url, headers=(headers | self.keychain.headers()), **kwargs)
79
77
 
80
78
 
81
- def add_beta_url_param(self, kwargs: dict):
82
- if 'params' in kwargs:
83
- kwargs['params']['beta'] = 'true'
84
- else:
85
- kwargs['params'] = {'beta': 'true'}
86
-
87
79
  def my(self, params: dict, pages=1) -> dict:
88
80
  final_resp = dict()
89
81
 
@@ -85,9 +85,9 @@ class Preseeds:
85
85
  """
86
86
  return self.api.search.by_exact_key(key, details)
87
87
 
88
- def update(self, key, status):
88
+ def update(self, key, status, comment=None):
89
89
  """Update the status of an existing preseed.
90
-
90
+
91
91
  Only the status field can be meaningfully updated for preseeds. This allows
92
92
  you to activate, freeze, or mark preseeds for deletion without recreating them.
93
93
  The preseed must exist before it can be updated.
@@ -101,24 +101,29 @@ class Preseeds:
101
101
  - 'FR' (FROZEN_REJECTED): Preseed is frozen and rejected
102
102
  - 'P' (PENDING): Preseed is pending activation
103
103
  :type status: str
104
+ :param comment: Optional comment to include with the update (stored in History field)
105
+ :type comment: str or None
104
106
  :return: The updated preseed object with new status
105
107
  :rtype: dict
106
108
  :raises: Prints error message if preseed with the specified key is not found
107
109
 
108
110
  **Example Usage:**
109
-
111
+
110
112
  .. code-block:: python
111
-
113
+
114
+ # Update status only
112
115
  sdk.preseeds.update(
113
116
  "#preseed#whois+company#Example Company#example company",
114
117
  "A"
115
118
  )
116
-
119
+
120
+ # Update status with comment
117
121
  sdk.preseeds.update(
118
122
  "#preseed#dns+subdomain#API Subdomain#api.example.com",
119
- "F"
123
+ "F",
124
+ comment="Temporarily frozen pending review"
120
125
  )
121
-
126
+
122
127
  sdk.preseeds.update(
123
128
  "#preseed#whois+company#Old Company#old company",
124
129
  "D"
@@ -130,7 +135,13 @@ class Preseeds:
130
135
  """
131
136
  preseed = self.api.search.by_exact_key(key)
132
137
  if preseed:
133
- return self.api.update('preseed', dict(key=key, status=status))
138
+ update_payload = {'key': key, 'status': status}
139
+
140
+ # Include comment if provided
141
+ if comment is not None:
142
+ update_payload['comment'] = comment
143
+
144
+ return self.api.update('preseed', update_payload)
134
145
  else:
135
146
  error(f'Pre-seed {key} is not found.')
136
147
 
@@ -69,26 +69,46 @@ class Seeds:
69
69
  return None
70
70
  return results[0]
71
71
 
72
- def update(self, key, status=None):
72
+ def update(self, key, status=None, comment=None):
73
73
  """
74
74
  Update seed fields dynamically.
75
-
75
+
76
76
  :param key: Seed/Asset key (e.g., '#seed#domain#example.com' or '#asset#domain#example.com')
77
77
  :type key: str
78
78
  :param status: Status for backward compatibility (can be positional)
79
79
  :type status: str or None
80
+ :param comment: Optional comment to include with the update (stored in History field)
81
+ :type comment: str or None
80
82
  :param kwargs: Fields to update
81
83
  :return: The updated seed, or None if the seed was not found
82
84
  :rtype: dict or None
85
+
86
+ **Example Usage:**
87
+
88
+ .. code-block:: python
89
+
90
+ # Update status only
91
+ sdk.seeds.update("#asset#domain#example.com", "A")
92
+
93
+ # Update status with comment
94
+ sdk.seeds.update(
95
+ "#asset#domain#example.com",
96
+ "A",
97
+ comment="Activated after verification"
98
+ )
83
99
  """
84
-
100
+
85
101
  seed = self.get(key) # This already handles old key format conversion
86
102
  if seed:
87
103
  update_payload = {
88
104
  'key': key,
89
105
  'status': status
90
106
  }
91
-
107
+
108
+ # Include comment if provided
109
+ if comment is not None:
110
+ update_payload['comment'] = comment
111
+
92
112
  return self.api.upsert('seed', update_payload)
93
113
  else:
94
114
  error(f'Seed {key} not found.')
@@ -27,5 +27,15 @@ class TestPreseed:
27
27
  assert len(preseeds) > 0
28
28
  assert preseeds[0]['status'] == Preseed.FROZEN_REJECTED.value
29
29
 
30
+ def test_update_preseed_with_comment(self):
31
+ # Update preseed with comment parameter
32
+ self.sdk.preseeds.update(self.preseed_key, Preseed.ACTIVE.value, comment="Test comment for preseed update")
33
+ preseed = self.sdk.preseeds.get(self.preseed_key, details=True)
34
+ assert preseed['status'] == Preseed.ACTIVE.value
35
+ # Verify comment was stored in history
36
+ assert 'history' in preseed
37
+ assert len(preseed['history']) > 0
38
+ assert preseed['history'][0]['comment'] == "Test comment for preseed update"
39
+
30
40
  def teardown_class(self):
31
41
  clean_test_entities(self.sdk, self)
@@ -29,6 +29,16 @@ class TestSeed:
29
29
  self.sdk.seeds.update(self.seed_asset_key, Seed.ACTIVE.value)
30
30
  assert self.get_seed()['status'] == Seed.ACTIVE.value
31
31
 
32
+ def test_update_seed_with_comment(self):
33
+ # Update seed with comment parameter
34
+ self.sdk.seeds.update(self.seed_asset_key, Seed.FROZEN.value, comment="Test comment for seed update")
35
+ seed = self.get_seed()
36
+ assert seed['status'] == Seed.FROZEN.value
37
+ # Verify comment was stored in history
38
+ assert 'history' in seed
39
+ assert len(seed['history']) > 0
40
+ assert seed['history'][0]['comment'] == "Test comment for seed update"
41
+
32
42
  def test_delete_seed(self):
33
43
  self.sdk.seeds.delete(self.seed_asset_key)
34
44
  assert self.sdk.seeds.get(self.seed_asset_key)['status'] == Seed.DELETED.value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praetorian-cli
3
- Version: 2.2.16
3
+ Version: 2.2.17
4
4
  Summary: For interacting with the Chariot API
5
5
  Home-page: https://github.com/praetorian-inc/praetorian-cli
6
6
  Author: Praetorian
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = praetorian-cli
3
- version = 2.2.16
3
+ version = 2.2.17
4
4
  author = Praetorian
5
5
  author_email = support@praetorian.com
6
6
  description = For interacting with the Chariot API
File without changes