catocli 3.0.18__py3-none-any.whl → 3.0.22__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.

Potentially problematic release.


This version of catocli might be problematic. Click here for more details.

Files changed (184) hide show
  1. catocli/Utils/clidriver.py +16 -8
  2. catocli/Utils/formatter_account_metrics.py +544 -0
  3. catocli/Utils/formatter_app_stats.py +184 -0
  4. catocli/Utils/formatter_app_stats_timeseries.py +377 -0
  5. catocli/Utils/formatter_events_timeseries.py +459 -0
  6. catocli/Utils/formatter_socket_port_metrics.py +189 -0
  7. catocli/Utils/formatter_socket_port_metrics_timeseries.py +339 -0
  8. catocli/Utils/formatter_utils.py +251 -0
  9. catocli/__init__.py +1 -1
  10. catocli/clisettings.json +37 -5
  11. catocli/parsers/customParserApiClient.py +206 -65
  12. catocli/parsers/mutation_policy/__init__.py +405 -405
  13. catocli/parsers/mutation_site/__init__.py +15 -15
  14. catocli/parsers/mutation_sites/__init__.py +15 -15
  15. catocli/parsers/query_accountMetrics/README.md +90 -0
  16. catocli/parsers/query_accountMetrics/__init__.py +6 -0
  17. catocli/parsers/query_appStats/README.md +2 -2
  18. catocli/parsers/query_appStats/__init__.py +4 -2
  19. catocli/parsers/query_appStatsTimeSeries/__init__.py +4 -2
  20. catocli/parsers/query_eventsTimeSeries/README.md +280 -0
  21. catocli/parsers/query_eventsTimeSeries/__init__.py +6 -0
  22. catocli/parsers/query_policy/__init__.py +42 -42
  23. catocli/parsers/query_socketPortMetrics/README.md +44 -0
  24. catocli/parsers/query_socketPortMetrics/__init__.py +6 -0
  25. catocli/parsers/query_socketPortMetricsTimeSeries/README.md +83 -0
  26. catocli/parsers/query_socketPortMetricsTimeSeries/__init__.py +4 -2
  27. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/METADATA +1 -1
  28. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/RECORD +179 -177
  29. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/top_level.txt +0 -1
  30. models/mutation.policy.antiMalwareFileHash.addRule.json +20 -0
  31. models/mutation.policy.antiMalwareFileHash.addSection.json +103 -0
  32. models/mutation.policy.antiMalwareFileHash.createPolicyRevision.json +123 -0
  33. models/mutation.policy.antiMalwareFileHash.discardPolicyRevision.json +123 -0
  34. models/mutation.policy.antiMalwareFileHash.moveRule.json +20 -0
  35. models/mutation.policy.antiMalwareFileHash.moveSection.json +103 -0
  36. models/mutation.policy.antiMalwareFileHash.publishPolicyRevision.json +123 -0
  37. models/mutation.policy.antiMalwareFileHash.removeRule.json +20 -0
  38. models/mutation.policy.antiMalwareFileHash.removeSection.json +103 -0
  39. models/mutation.policy.antiMalwareFileHash.updatePolicy.json +123 -0
  40. models/mutation.policy.antiMalwareFileHash.updateRule.json +20 -0
  41. models/mutation.policy.antiMalwareFileHash.updateSection.json +103 -0
  42. models/mutation.policy.appTenantRestriction.addRule.json +20 -0
  43. models/mutation.policy.appTenantRestriction.addSection.json +103 -0
  44. models/mutation.policy.appTenantRestriction.createPolicyRevision.json +123 -0
  45. models/mutation.policy.appTenantRestriction.discardPolicyRevision.json +123 -0
  46. models/mutation.policy.appTenantRestriction.moveRule.json +20 -0
  47. models/mutation.policy.appTenantRestriction.moveSection.json +103 -0
  48. models/mutation.policy.appTenantRestriction.publishPolicyRevision.json +123 -0
  49. models/mutation.policy.appTenantRestriction.removeRule.json +20 -0
  50. models/mutation.policy.appTenantRestriction.removeSection.json +103 -0
  51. models/mutation.policy.appTenantRestriction.updatePolicy.json +123 -0
  52. models/mutation.policy.appTenantRestriction.updateRule.json +20 -0
  53. models/mutation.policy.appTenantRestriction.updateSection.json +103 -0
  54. models/mutation.policy.applicationControl.addRule.json +20 -0
  55. models/mutation.policy.applicationControl.addSection.json +103 -0
  56. models/mutation.policy.applicationControl.createPolicyRevision.json +123 -0
  57. models/mutation.policy.applicationControl.discardPolicyRevision.json +123 -0
  58. models/mutation.policy.applicationControl.moveRule.json +20 -0
  59. models/mutation.policy.applicationControl.moveSection.json +103 -0
  60. models/mutation.policy.applicationControl.publishPolicyRevision.json +123 -0
  61. models/mutation.policy.applicationControl.removeRule.json +20 -0
  62. models/mutation.policy.applicationControl.removeSection.json +103 -0
  63. models/mutation.policy.applicationControl.updatePolicy.json +123 -0
  64. models/mutation.policy.applicationControl.updateRule.json +20 -0
  65. models/mutation.policy.applicationControl.updateSection.json +103 -0
  66. models/mutation.policy.dynamicIpAllocation.addRule.json +20 -0
  67. models/mutation.policy.dynamicIpAllocation.addSection.json +103 -0
  68. models/mutation.policy.dynamicIpAllocation.createPolicyRevision.json +123 -0
  69. models/mutation.policy.dynamicIpAllocation.discardPolicyRevision.json +123 -0
  70. models/mutation.policy.dynamicIpAllocation.moveRule.json +20 -0
  71. models/mutation.policy.dynamicIpAllocation.moveSection.json +103 -0
  72. models/mutation.policy.dynamicIpAllocation.publishPolicyRevision.json +123 -0
  73. models/mutation.policy.dynamicIpAllocation.removeRule.json +20 -0
  74. models/mutation.policy.dynamicIpAllocation.removeSection.json +103 -0
  75. models/mutation.policy.dynamicIpAllocation.updatePolicy.json +123 -0
  76. models/mutation.policy.dynamicIpAllocation.updateRule.json +20 -0
  77. models/mutation.policy.dynamicIpAllocation.updateSection.json +103 -0
  78. models/mutation.policy.internetFirewall.addRule.json +20 -0
  79. models/mutation.policy.internetFirewall.addSection.json +103 -0
  80. models/mutation.policy.internetFirewall.createPolicyRevision.json +123 -0
  81. models/mutation.policy.internetFirewall.discardPolicyRevision.json +123 -0
  82. models/mutation.policy.internetFirewall.moveRule.json +20 -0
  83. models/mutation.policy.internetFirewall.moveSection.json +103 -0
  84. models/mutation.policy.internetFirewall.publishPolicyRevision.json +123 -0
  85. models/mutation.policy.internetFirewall.removeRule.json +20 -0
  86. models/mutation.policy.internetFirewall.removeSection.json +103 -0
  87. models/mutation.policy.internetFirewall.updatePolicy.json +123 -0
  88. models/mutation.policy.internetFirewall.updateRule.json +20 -0
  89. models/mutation.policy.internetFirewall.updateSection.json +103 -0
  90. models/mutation.policy.remotePortFwd.addRule.json +20 -0
  91. models/mutation.policy.remotePortFwd.addSection.json +103 -0
  92. models/mutation.policy.remotePortFwd.createPolicyRevision.json +123 -0
  93. models/mutation.policy.remotePortFwd.discardPolicyRevision.json +123 -0
  94. models/mutation.policy.remotePortFwd.moveRule.json +20 -0
  95. models/mutation.policy.remotePortFwd.moveSection.json +103 -0
  96. models/mutation.policy.remotePortFwd.publishPolicyRevision.json +123 -0
  97. models/mutation.policy.remotePortFwd.removeRule.json +20 -0
  98. models/mutation.policy.remotePortFwd.removeSection.json +103 -0
  99. models/mutation.policy.remotePortFwd.updatePolicy.json +123 -0
  100. models/mutation.policy.remotePortFwd.updateRule.json +20 -0
  101. models/mutation.policy.remotePortFwd.updateSection.json +103 -0
  102. models/mutation.policy.socketLan.addRule.json +40 -0
  103. models/mutation.policy.socketLan.addSection.json +103 -0
  104. models/mutation.policy.socketLan.createPolicyRevision.json +143 -0
  105. models/mutation.policy.socketLan.discardPolicyRevision.json +143 -0
  106. models/mutation.policy.socketLan.moveRule.json +40 -0
  107. models/mutation.policy.socketLan.moveSection.json +103 -0
  108. models/mutation.policy.socketLan.publishPolicyRevision.json +143 -0
  109. models/mutation.policy.socketLan.removeRule.json +40 -0
  110. models/mutation.policy.socketLan.removeSection.json +103 -0
  111. models/mutation.policy.socketLan.updatePolicy.json +143 -0
  112. models/mutation.policy.socketLan.updateRule.json +40 -0
  113. models/mutation.policy.socketLan.updateSection.json +103 -0
  114. models/mutation.policy.terminalServer.addRule.json +20 -0
  115. models/mutation.policy.terminalServer.addSection.json +103 -0
  116. models/mutation.policy.terminalServer.createPolicyRevision.json +123 -0
  117. models/mutation.policy.terminalServer.discardPolicyRevision.json +123 -0
  118. models/mutation.policy.terminalServer.moveRule.json +20 -0
  119. models/mutation.policy.terminalServer.moveSection.json +103 -0
  120. models/mutation.policy.terminalServer.publishPolicyRevision.json +123 -0
  121. models/mutation.policy.terminalServer.removeRule.json +20 -0
  122. models/mutation.policy.terminalServer.removeSection.json +103 -0
  123. models/mutation.policy.terminalServer.updatePolicy.json +123 -0
  124. models/mutation.policy.terminalServer.updateRule.json +20 -0
  125. models/mutation.policy.terminalServer.updateSection.json +103 -0
  126. models/mutation.policy.tlsInspect.addRule.json +20 -0
  127. models/mutation.policy.tlsInspect.addSection.json +103 -0
  128. models/mutation.policy.tlsInspect.createPolicyRevision.json +123 -0
  129. models/mutation.policy.tlsInspect.discardPolicyRevision.json +123 -0
  130. models/mutation.policy.tlsInspect.moveRule.json +20 -0
  131. models/mutation.policy.tlsInspect.moveSection.json +103 -0
  132. models/mutation.policy.tlsInspect.publishPolicyRevision.json +123 -0
  133. models/mutation.policy.tlsInspect.removeRule.json +20 -0
  134. models/mutation.policy.tlsInspect.removeSection.json +103 -0
  135. models/mutation.policy.tlsInspect.updatePolicy.json +123 -0
  136. models/mutation.policy.tlsInspect.updateRule.json +20 -0
  137. models/mutation.policy.tlsInspect.updateSection.json +103 -0
  138. models/mutation.policy.wanFirewall.addRule.json +20 -0
  139. models/mutation.policy.wanFirewall.addSection.json +103 -0
  140. models/mutation.policy.wanFirewall.createPolicyRevision.json +123 -0
  141. models/mutation.policy.wanFirewall.discardPolicyRevision.json +123 -0
  142. models/mutation.policy.wanFirewall.moveRule.json +20 -0
  143. models/mutation.policy.wanFirewall.moveSection.json +103 -0
  144. models/mutation.policy.wanFirewall.publishPolicyRevision.json +123 -0
  145. models/mutation.policy.wanFirewall.removeRule.json +20 -0
  146. models/mutation.policy.wanFirewall.removeSection.json +103 -0
  147. models/mutation.policy.wanFirewall.updatePolicy.json +123 -0
  148. models/mutation.policy.wanFirewall.updateRule.json +20 -0
  149. models/mutation.policy.wanFirewall.updateSection.json +103 -0
  150. models/mutation.policy.wanNetwork.addRule.json +20 -0
  151. models/mutation.policy.wanNetwork.addSection.json +103 -0
  152. models/mutation.policy.wanNetwork.createPolicyRevision.json +123 -0
  153. models/mutation.policy.wanNetwork.discardPolicyRevision.json +123 -0
  154. models/mutation.policy.wanNetwork.moveRule.json +20 -0
  155. models/mutation.policy.wanNetwork.moveSection.json +103 -0
  156. models/mutation.policy.wanNetwork.publishPolicyRevision.json +123 -0
  157. models/mutation.policy.wanNetwork.removeRule.json +20 -0
  158. models/mutation.policy.wanNetwork.removeSection.json +103 -0
  159. models/mutation.policy.wanNetwork.updatePolicy.json +123 -0
  160. models/mutation.policy.wanNetwork.updateRule.json +20 -0
  161. models/mutation.policy.wanNetwork.updateSection.json +103 -0
  162. models/mutation.xdr.analystFeedback.json +822 -87
  163. models/query.policy.antiMalwareFileHash.policy.json +123 -0
  164. models/query.policy.appTenantRestriction.policy.json +123 -0
  165. models/query.policy.applicationControl.policy.json +123 -0
  166. models/query.policy.dynamicIpAllocation.policy.json +123 -0
  167. models/query.policy.internetFirewall.policy.json +123 -0
  168. models/query.policy.remotePortFwd.policy.json +123 -0
  169. models/query.policy.socketLan.policy.json +143 -0
  170. models/query.policy.terminalServer.policy.json +123 -0
  171. models/query.policy.tlsInspect.policy.json +123 -0
  172. models/query.policy.wanFirewall.policy.json +123 -0
  173. models/query.policy.wanNetwork.policy.json +123 -0
  174. models/query.xdr.stories.json +822 -87
  175. models/query.xdr.story.json +822 -87
  176. schema/catolib.py +25 -8
  177. catocli/Utils/csv_formatter.py +0 -663
  178. scripts/catolib.py +0 -62
  179. scripts/export_if_rules_to_json.py +0 -188
  180. scripts/export_wf_rules_to_json.py +0 -111
  181. scripts/import_wf_rules_to_tfstate.py +0 -331
  182. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/WHEEL +0 -0
  183. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/entry_points.txt +0 -0
  184. {catocli-3.0.18.dist-info → catocli-3.0.22.dist-info}/licenses/LICENSE +0 -0
schema/catolib.py CHANGED
@@ -728,8 +728,16 @@ def main(args=None):
728
728
  # Print CSV output directly without JSON formatting
729
729
  print(response[0]["__csv_output__"], end='')
730
730
  else:
731
- # Standard JSON output
732
- print(json.dumps(response[0], sort_keys=True, indent=4))
731
+ # Handle different response formats more robustly
732
+ if isinstance(response, list) and len(response) > 0:
733
+ # Standard format: [data, status, headers]
734
+ print(json.dumps(response[0], sort_keys=True, indent=4))
735
+ elif isinstance(response, dict):
736
+ # Direct dict response
737
+ print(json.dumps(response, sort_keys=True, indent=4))
738
+ else:
739
+ # Fallback: print as-is
740
+ print(json.dumps(response, sort_keys=True, indent=4))
733
741
  except KeyboardInterrupt:
734
742
  print('Operation cancelled by user (Ctrl+C).')
735
743
  exit(130) # Standard exit code for SIGINT
@@ -752,9 +760,10 @@ def writeOperationParsers(catoApiSchema):
752
760
  """Write operation parsers - thread-safe implementation"""
753
761
  parserMapping = {"query":{},"mutation":{}}
754
762
 
755
- # Load settings to get CSV-supported operations
763
+ # Load settings to get format-supported operations
756
764
  settings = loadJSON("../catocli/clisettings.json")
757
765
  csv_supported_operations = settings.get("queryOperationCsvOutput", {})
766
+ format_overrides = settings.get("queryOperationDefaultFormatOverrides", {})
758
767
 
759
768
  ## Write the raw query parser ##
760
769
  cliDriverStr =f"""
@@ -825,9 +834,11 @@ def {parserName}_parse({operationType}_subparsers):
825
834
  usage=get_help("{operationType}_{operationName}"), formatter_class=CustomSubparserHelpFormatter)
826
835
  """
827
836
  if "path" in parser:
828
- # Check if this operation supports CSV output
837
+ # Check if this operation supports format overrides (CSV, etc.)
829
838
  operation_path = parserName.replace("_", ".")
830
- supports_csv = operation_path in csv_supported_operations
839
+ supports_csv = (operation_path in csv_supported_operations or
840
+ (operation_path in format_overrides and
841
+ format_overrides[operation_path].get("enabled", False)))
831
842
 
832
843
  cliDriverStr += f"""
833
844
  {parserName}_parser.add_argument('json', nargs='?', default='{{}}', help='Variables in JSON format (defaults to empty object if not provided).')
@@ -840,11 +851,17 @@ def {parserName}_parse({operationType}_subparsers):
840
851
  {parserName}_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
841
852
  {parserName}_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
842
853
  """
843
- # Add -f flag for CSV-supported operations
854
+ # Add format flags for operations with format overrides
844
855
  if supports_csv:
856
+ # Generate appropriate default CSV filename from operation name
857
+ # Use the full operation name instead of stripping parts to ensure clarity
858
+ default_csv_name = f"{operationName.lower()}.csv"
859
+
845
860
  cliDriverStr += f"""
846
- {parserName}_parser.add_argument('-f', '--format', choices=['json', 'csv'], default='json', help='Output format (default: json)')
847
- {parserName}_parser.add_argument('--csv-filename', dest='csv_filename', help='Override CSV file name (default: accountmetrics.csv)')
861
+
862
+ {parserName}_parser.add_argument('-f', '--format', choices=['json', 'csv'], help='Output format (default: formatted json, use -raw for original json)')
863
+ {parserName}_parser.add_argument('-raw', '--raw', dest='raw_output', action='store_true', help='Return raw/original JSON format (bypasses default formatting)')
864
+ {parserName}_parser.add_argument('--csv-filename', dest='csv_filename', help='Override CSV file name (default: {default_csv_name})')
848
865
  {parserName}_parser.add_argument('--append-timestamp', dest='append_timestamp', action='store_true', help='Append timestamp to the CSV file name')
849
866
  """
850
867