praetorian-cli 2.4.7__tar.gz → 2.4.8__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 (154) hide show
  1. {praetorian_cli-2.4.7/praetorian_cli.egg-info → praetorian_cli-2.4.8}/PKG-INFO +1 -1
  2. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/add.py +28 -6
  3. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/chariot.py +9 -8
  4. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/files.py +4 -2
  5. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8/praetorian_cli.egg-info}/PKG-INFO +1 -1
  6. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/setup.cfg +1 -1
  7. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/LICENSE +0 -0
  8. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/MANIFEST.in +0 -0
  9. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/README.md +0 -0
  10. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/__init__.py +0 -0
  11. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/__init__.py +0 -0
  12. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/access.py +0 -0
  13. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/aegis.py +0 -0
  14. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/agent.py +0 -0
  15. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/chariot.py +0 -0
  16. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/cli_decorators.py +0 -0
  17. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/configure.py +0 -0
  18. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/critfinder.py +0 -0
  19. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/delete.py +0 -0
  20. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/engagement.py +0 -0
  21. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/enrich.py +0 -0
  22. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/export.py +0 -0
  23. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/find.py +0 -0
  24. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/get.py +0 -0
  25. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/imports.py +0 -0
  26. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/link.py +0 -0
  27. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/list.py +0 -0
  28. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/query.py +0 -0
  29. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/report.py +0 -0
  30. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/run.py +0 -0
  31. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/script.py +0 -0
  32. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/search.py +0 -0
  33. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/ssh_utils.py +0 -0
  34. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/test.py +0 -0
  35. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/unlink.py +0 -0
  36. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/update.py +0 -0
  37. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/handlers/utils.py +0 -0
  38. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/main.py +0 -0
  39. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/runners/__init__.py +0 -0
  40. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/runners/local.py +0 -0
  41. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/scripts/__init__.py +0 -0
  42. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/scripts/commands/__init__.py +0 -0
  43. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/scripts/commands/nmap-example.py +0 -0
  44. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/scripts/utils.py +0 -0
  45. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/__init__.py +0 -0
  46. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/__init__.py +0 -0
  47. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/account_discovery.py +0 -0
  48. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/accounts.py +0 -0
  49. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/ad.py +0 -0
  50. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/aegis.py +0 -0
  51. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/agents.py +0 -0
  52. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/assets.py +0 -0
  53. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/attributes.py +0 -0
  54. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/capabilities.py +0 -0
  55. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/configurations.py +0 -0
  56. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/conversations.py +0 -0
  57. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/credentials.py +0 -0
  58. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/definitions.py +0 -0
  59. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/integrations.py +0 -0
  60. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/jobs.py +0 -0
  61. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/keys.py +0 -0
  62. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/preseeds.py +0 -0
  63. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/reports.py +0 -0
  64. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/risks.py +0 -0
  65. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/scanners.py +0 -0
  66. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/schedules.py +0 -0
  67. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/schema.py +0 -0
  68. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/search.py +0 -0
  69. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/seeds.py +0 -0
  70. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/settings.py +0 -0
  71. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/statistics.py +0 -0
  72. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/webhook.py +0 -0
  73. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/entities/webpage.py +0 -0
  74. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/guard.py +0 -0
  75. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/keychain.py +0 -0
  76. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/mcp_server.py +0 -0
  77. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/model/__init__.py +0 -0
  78. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/model/aegis.py +0 -0
  79. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/model/globals.py +0 -0
  80. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/model/query.py +0 -0
  81. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/model/utils.py +0 -0
  82. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/__init__.py +0 -0
  83. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/pytest.ini +0 -0
  84. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_access_aws.py +0 -0
  85. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_account.py +0 -0
  86. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_agent.py +0 -0
  87. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_asset.py +0 -0
  88. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_attribute.py +0 -0
  89. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_bulk.py +0 -0
  90. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_capabilities.py +0 -0
  91. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_configuration.py +0 -0
  92. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_conversation.py +0 -0
  93. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_credential_process.py +0 -0
  94. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_credentials.py +0 -0
  95. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_definition.py +0 -0
  96. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_export_cli.py +0 -0
  97. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_extend.py +0 -0
  98. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_file.py +0 -0
  99. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_job.py +0 -0
  100. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_key.py +0 -0
  101. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_local_runner.py +0 -0
  102. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_mcp.py +0 -0
  103. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_my_by_raw_query.py +0 -0
  104. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_preseed.py +0 -0
  105. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_report.py +0 -0
  106. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_risk.py +0 -0
  107. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_run_cli.py +0 -0
  108. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_search.py +0 -0
  109. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_seed.py +0 -0
  110. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_setting.py +0 -0
  111. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_webhook.py +0 -0
  112. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_webpage.py +0 -0
  113. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/test_z_cli.py +0 -0
  114. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/ui_mocks.py +0 -0
  115. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/sdk/test/utils.py +0 -0
  116. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/__init__.py +0 -0
  117. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/__init__.py +0 -0
  118. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/account_selector.py +0 -0
  119. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/__init__.py +0 -0
  120. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/cp.py +0 -0
  121. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/help.py +0 -0
  122. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/info.py +0 -0
  123. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/job.py +0 -0
  124. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/job_helpers.py +0 -0
  125. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/list.py +0 -0
  126. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/proxy.py +0 -0
  127. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/schedule.py +0 -0
  128. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/schedule_helpers.py +0 -0
  129. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/set.py +0 -0
  130. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/commands/ssh.py +0 -0
  131. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/constants.py +0 -0
  132. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/menu.py +0 -0
  133. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/theme.py +0 -0
  134. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/aegis/utils.py +0 -0
  135. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/__init__.py +0 -0
  136. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/__init__.py +0 -0
  137. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/accounts.py +0 -0
  138. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/context.py +0 -0
  139. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/data.py +0 -0
  140. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/marcus.py +0 -0
  141. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/reporting.py +0 -0
  142. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/search.py +0 -0
  143. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/commands/tools.py +0 -0
  144. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/console.py +0 -0
  145. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/context.py +0 -0
  146. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/console/renderer.py +0 -0
  147. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/conversation/__init__.py +0 -0
  148. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli/ui/conversation/textual_chat.py +0 -0
  149. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli.egg-info/SOURCES.txt +0 -0
  150. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli.egg-info/dependency_links.txt +0 -0
  151. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli.egg-info/entry_points.txt +0 -0
  152. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli.egg-info/requires.txt +0 -0
  153. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/praetorian_cli.egg-info/top_level.txt +0 -0
  154. {praetorian_cli-2.4.7 → praetorian_cli-2.4.8}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praetorian-cli
3
- Version: 2.4.7
3
+ Version: 2.4.8
4
4
  Summary: For interacting with the Guard API
5
5
  Home-page: https://github.com/praetorian-inc/praetorian-cli
6
6
  Author: Praetorian
@@ -61,16 +61,16 @@ def asset(sdk, identifier, group, asset_type, status, surface, resource_type):
61
61
  @add.command()
62
62
  @cli_handler
63
63
  @click.argument('path')
64
- @click.option('-n', '--name', help='The file name in Guard. Default: the full path of the uploaded file')
65
- def file(sdk, path, name):
64
+ @click.option('-n', '--name', help='Destination path in Guard storage. Without this flag, the file is placed automatically')
65
+ @click.option('--public', 'is_public', is_flag=True, default=False, help='Share file with the customer (Praetorian users only)')
66
+ def file(sdk, path, name, is_public):
66
67
  """ Upload a file
67
68
 
68
69
  This commands takes the path to a local file and uploads it to the
69
70
  Guard file system. The Guard file system is where the platform
70
71
  stores proofs of exploit, risk definitions, and other supporting data.
71
72
 
72
- User files reside in the "home/" folder. Those files appear in the app
73
- at https://guard.praetorian.com/app/files
73
+ User files appear in the app at https://guard.praetorian.com/app/files
74
74
 
75
75
  \b
76
76
  Arguments:
@@ -79,10 +79,32 @@ def file(sdk, path, name):
79
79
  \b
80
80
  Example usages:
81
81
  - guard add file ./file.txt
82
- - guard add file ./file.txt --name "home/file.txt"
82
+ - guard add file ./file.txt --public
83
+ - guard add file ./file.txt --name "custom/path/file.txt"
83
84
  """
84
85
  try:
85
- sdk.files.add(path, name)
86
+ expanded = os.path.expanduser(path)
87
+ filename = os.path.basename(expanded)
88
+ praetorian = False
89
+
90
+ if name:
91
+ # if name is provided, use it as the destination path regardless of whether
92
+ # the path follows the Guard file system filepath conventions. If it does not
93
+ # follow the conventions, it will still be uploaded but it will not be
94
+ # displayed in the Guard app UI.
95
+ dest_path = name
96
+ elif sdk.is_praetorian_user():
97
+ if is_public:
98
+ dest_path = f'home/shared-with/{filename}'
99
+ else:
100
+ dest_path = f'home/internal/{filename}'
101
+ praetorian = True
102
+ else:
103
+ dest_path = f'home/shared-by/{filename}'
104
+
105
+ sdk.files.add(expanded, dest_path, praetorian=praetorian)
106
+ size = os.path.getsize(expanded)
107
+ click.echo(f'Uploaded {expanded} -> {dest_path} ({size} bytes)')
86
108
  except Exception as e:
87
109
  error(f'Unable to upload file {path}. Error: {e}')
88
110
 
@@ -222,21 +222,22 @@ class Chariot:
222
222
  process_failure(resp)
223
223
  return resp.json()
224
224
 
225
- def upload(self, local_filepath: str, chariot_filepath: str = None) -> dict:
225
+ def upload(self, local_filepath: str, chariot_filepath: str = None, praetorian: bool = False) -> dict:
226
226
  if not chariot_filepath:
227
227
  chariot_filepath = local_filepath
228
228
  with open(local_filepath, 'rb') as content:
229
- resp = self._upload(chariot_filepath, content)
229
+ resp = self._upload(chariot_filepath, content, praetorian=praetorian)
230
230
  return resp
231
231
 
232
- def _upload(self, chariot_filepath: str, content: str) -> dict:
233
- # Encrypted files have _encrypted/ prefix in the path. Encrypted files do not use presigned URLs.
234
- # Instead, they use the /encrypted-file endpoint that directly gets and puts content.
232
+ def _upload(self, chariot_filepath: str, content: str, praetorian: bool = False) -> dict:
235
233
  if is_encrypted_partition(chariot_filepath):
236
234
  return self.chariot_request('PUT', self.url('/encrypted-file'), params=dict(name=chariot_filepath), data=content)
237
235
 
238
- # Regular files use presigned URLs
239
- presigned_url = self.chariot_request('PUT', self.url('/file'), params=dict(name=chariot_filepath))
236
+ params = dict(name=chariot_filepath)
237
+ if praetorian:
238
+ params['praetorian'] = 'true'
239
+
240
+ presigned_url = self.chariot_request('PUT', self.url('/file'), params=params)
240
241
  process_failure(presigned_url)
241
242
  resp = requests.put(presigned_url.json()['url'], data=content, timeout=DEFAULT_HTTP_TIMEOUT)
242
243
  process_failure(resp)
@@ -288,7 +289,7 @@ class Chariot:
288
289
  return self.keychain.base_url() + path
289
290
 
290
291
  def is_praetorian_user(self) -> bool:
291
- return self.keychain.username().endswith('@praetorian.com')
292
+ return (self.keychain.username() or '').endswith('@praetorian.com')
292
293
 
293
294
  def start_mcp_server(self, allowable_tools=None):
294
295
  """ Start MCP server exposing SDK methods as tools
@@ -8,7 +8,7 @@ class Files:
8
8
  def __init__(self, api):
9
9
  self.api = api
10
10
 
11
- def add(self, local_filepath, chariot_filepath=None):
11
+ def add(self, local_filepath, chariot_filepath=None, praetorian=False):
12
12
  """
13
13
  Upload a file to Chariot storage.
14
14
 
@@ -16,10 +16,12 @@ class Files:
16
16
  :type local_filepath: str
17
17
  :param chariot_filepath: Optional destination path in Chariot storage. If None, uses the local filename
18
18
  :type chariot_filepath: str or None
19
+ :param praetorian: If True, upload to the scoped partition (requires praetorian user)
20
+ :type praetorian: bool
19
21
  :return: The uploaded file entity
20
22
  :rtype: dict
21
23
  """
22
- return self.api.upload(local_filepath, chariot_filepath)
24
+ return self.api.upload(local_filepath, chariot_filepath, praetorian=praetorian)
23
25
 
24
26
  def save(self, chariot_filepath, download_directory=os.getcwd()):
25
27
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praetorian-cli
3
- Version: 2.4.7
3
+ Version: 2.4.8
4
4
  Summary: For interacting with the Guard 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.4.7
3
+ version = 2.4.8
4
4
  author = Praetorian
5
5
  author_email = support@praetorian.com
6
6
  description = For interacting with the Guard API
File without changes
File without changes