catocli 2.1.3__py3-none-any.whl → 2.1.6__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 (107) hide show
  1. catocli/Utils/clidriver.py +20 -9
  2. catocli/Utils/cliutils.py +45 -17
  3. catocli/Utils/csv_formatter.py +652 -0
  4. catocli/__init__.py +2 -2
  5. catocli/clisettings.json +35 -0
  6. catocli/parsers/custom/export_rules/__init__.py +0 -4
  7. catocli/parsers/custom/export_sites/__init__.py +17 -5
  8. catocli/parsers/custom/export_sites/export_sites.py +826 -53
  9. catocli/parsers/custom/import_sites_to_tf/__init__.py +44 -16
  10. catocli/parsers/custom/import_sites_to_tf/import_sites_to_tf.py +859 -442
  11. catocli/parsers/customParserApiClient.py +444 -38
  12. catocli/parsers/custom_private/__init__.py +18 -0
  13. catocli/parsers/mutation_accountManagement/__init__.py +21 -0
  14. catocli/parsers/mutation_accountManagement_disableAccount/README.md +15 -0
  15. catocli/parsers/mutation_admin/__init__.py +12 -0
  16. catocli/parsers/mutation_container/__init__.py +18 -0
  17. catocli/parsers/mutation_enterpriseDirectory/__init__.py +8 -0
  18. catocli/parsers/mutation_groups/__init__.py +6 -0
  19. catocli/parsers/mutation_hardware/__init__.py +2 -0
  20. catocli/parsers/mutation_licensing/__init__.py +24 -0
  21. catocli/parsers/mutation_licensing_updateCommercialLicense/README.md +19 -0
  22. catocli/parsers/mutation_policy/__init__.py +861 -483
  23. catocli/parsers/mutation_policy_antiMalwareFileHash_addRule/README.md +20 -0
  24. catocli/parsers/mutation_policy_antiMalwareFileHash_addSection/README.md +20 -0
  25. catocli/parsers/mutation_policy_antiMalwareFileHash_createPolicyRevision/README.md +20 -0
  26. catocli/parsers/mutation_policy_antiMalwareFileHash_discardPolicyRevision/README.md +20 -0
  27. catocli/parsers/mutation_policy_antiMalwareFileHash_moveRule/README.md +20 -0
  28. catocli/parsers/mutation_policy_antiMalwareFileHash_moveSection/README.md +20 -0
  29. catocli/parsers/mutation_policy_antiMalwareFileHash_publishPolicyRevision/README.md +20 -0
  30. catocli/parsers/mutation_policy_antiMalwareFileHash_removeRule/README.md +20 -0
  31. catocli/parsers/mutation_policy_antiMalwareFileHash_removeSection/README.md +20 -0
  32. catocli/parsers/mutation_policy_antiMalwareFileHash_updatePolicy/README.md +20 -0
  33. catocli/parsers/mutation_policy_antiMalwareFileHash_updateRule/README.md +20 -0
  34. catocli/parsers/mutation_policy_antiMalwareFileHash_updateSection/README.md +20 -0
  35. catocli/parsers/mutation_sandbox/__init__.py +4 -0
  36. catocli/parsers/mutation_site/__init__.py +72 -0
  37. catocli/parsers/mutation_sites/__init__.py +72 -0
  38. catocli/parsers/mutation_xdr/__init__.py +6 -0
  39. catocli/parsers/query_accountBySubdomain/__init__.py +2 -0
  40. catocli/parsers/query_accountManagement/__init__.py +2 -0
  41. catocli/parsers/query_accountMetrics/__init__.py +6 -0
  42. catocli/parsers/query_accountRoles/__init__.py +2 -0
  43. catocli/parsers/query_accountSnapshot/__init__.py +2 -0
  44. catocli/parsers/query_admin/__init__.py +2 -0
  45. catocli/parsers/query_admins/__init__.py +2 -0
  46. catocli/parsers/query_appStats/__init__.py +6 -0
  47. catocli/parsers/query_appStatsTimeSeries/README.md +3 -0
  48. catocli/parsers/query_appStatsTimeSeries/__init__.py +6 -0
  49. catocli/parsers/query_auditFeed/__init__.py +2 -0
  50. catocli/parsers/query_catalogs/__init__.py +2 -0
  51. catocli/parsers/query_container/__init__.py +2 -0
  52. catocli/parsers/query_devices/README.md +1 -1
  53. catocli/parsers/query_devices/__init__.py +2 -0
  54. catocli/parsers/query_enterpriseDirectory/__init__.py +2 -0
  55. catocli/parsers/query_entityLookup/__init__.py +2 -0
  56. catocli/parsers/query_events/__init__.py +2 -0
  57. catocli/parsers/query_eventsFeed/README.md +1 -1
  58. catocli/parsers/query_eventsFeed/__init__.py +2 -0
  59. catocli/parsers/query_eventsTimeSeries/__init__.py +2 -0
  60. catocli/parsers/query_groups/__init__.py +6 -0
  61. catocli/parsers/query_hardware/README.md +1 -1
  62. catocli/parsers/query_hardware/__init__.py +2 -0
  63. catocli/parsers/query_hardwareManagement/__init__.py +2 -0
  64. catocli/parsers/query_licensing/__init__.py +2 -0
  65. catocli/parsers/query_policy/__init__.py +85 -48
  66. catocli/parsers/query_policy_antiMalwareFileHash_policy/README.md +19 -0
  67. catocli/parsers/query_popLocations/__init__.py +2 -0
  68. catocli/parsers/query_sandbox/__init__.py +2 -0
  69. catocli/parsers/query_servicePrincipalAdmin/__init__.py +2 -0
  70. catocli/parsers/query_site/__init__.py +33 -0
  71. catocli/parsers/query_siteLocation/__init__.py +2 -0
  72. catocli/parsers/query_site_siteGeneralDetails/README.md +19 -0
  73. catocli/parsers/query_socketPortMetrics/__init__.py +2 -0
  74. catocli/parsers/query_socketPortMetricsTimeSeries/__init__.py +6 -0
  75. catocli/parsers/query_subDomains/__init__.py +2 -0
  76. catocli/parsers/query_xdr/__init__.py +4 -0
  77. catocli/parsers/raw/__init__.py +3 -1
  78. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/METADATA +1 -1
  79. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/RECORD +107 -72
  80. models/mutation.accountManagement.disableAccount.json +545 -0
  81. models/mutation.licensing.updateCommercialLicense.json +931 -0
  82. models/mutation.policy.antiMalwareFileHash.addRule.json +2068 -0
  83. models/mutation.policy.antiMalwareFileHash.addSection.json +1350 -0
  84. models/mutation.policy.antiMalwareFileHash.createPolicyRevision.json +1822 -0
  85. models/mutation.policy.antiMalwareFileHash.discardPolicyRevision.json +1758 -0
  86. models/mutation.policy.antiMalwareFileHash.moveRule.json +1552 -0
  87. models/mutation.policy.antiMalwareFileHash.moveSection.json +1251 -0
  88. models/mutation.policy.antiMalwareFileHash.publishPolicyRevision.json +1813 -0
  89. models/mutation.policy.antiMalwareFileHash.removeRule.json +1204 -0
  90. models/mutation.policy.antiMalwareFileHash.removeSection.json +954 -0
  91. models/mutation.policy.antiMalwareFileHash.updatePolicy.json +1834 -0
  92. models/mutation.policy.antiMalwareFileHash.updateRule.json +1757 -0
  93. models/mutation.policy.antiMalwareFileHash.updateSection.json +1105 -0
  94. models/mutation.site.updateSiteGeneralDetails.json +3 -3
  95. models/mutation.sites.updateSiteGeneralDetails.json +3 -3
  96. models/query.devices.json +448 -62
  97. models/query.events.json +216 -0
  98. models/query.eventsFeed.json +48 -0
  99. models/query.eventsTimeSeries.json +144 -0
  100. models/query.hardware.json +224 -0
  101. models/query.policy.antiMalwareFileHash.policy.json +1583 -0
  102. models/query.site.siteGeneralDetails.json +899 -0
  103. schema/catolib.py +51 -4
  104. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/WHEEL +0 -0
  105. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/entry_points.txt +0 -0
  106. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/licenses/LICENSE +0 -0
  107. {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/top_level.txt +0 -0
@@ -47,21 +47,22 @@ from ..parsers.query_hardware import query_hardware_parse
47
47
  from ..parsers.query_enterpriseDirectory import query_enterpriseDirectory_parse
48
48
  from ..parsers.query_devices import query_devices_parse
49
49
  from ..parsers.query_catalogs import query_catalogs_parse
50
- from ..parsers.query_site import query_site_parse
51
50
  from ..parsers.query_xdr import query_xdr_parse
52
- from ..parsers.query_policy import query_policy_parse
51
+ from ..parsers.query_site import query_site_parse
53
52
  from ..parsers.query_groups import query_groups_parse
53
+ from ..parsers.query_policy import query_policy_parse
54
54
  from ..parsers.mutation_xdr import mutation_xdr_parse
55
55
  from ..parsers.mutation_site import mutation_site_parse
56
56
  from ..parsers.mutation_sites import mutation_sites_parse
57
+ from ..parsers.mutation_policy import mutation_policy_parse
57
58
  from ..parsers.mutation_container import mutation_container_parse
58
59
  from ..parsers.mutation_admin import mutation_admin_parse
59
- from ..parsers.mutation_policy import mutation_policy_parse
60
60
  from ..parsers.mutation_accountManagement import mutation_accountManagement_parse
61
61
  from ..parsers.mutation_sandbox import mutation_sandbox_parse
62
- from ..parsers.mutation_hardware import mutation_hardware_parse
62
+ from ..parsers.mutation_licensing import mutation_licensing_parse
63
63
  from ..parsers.mutation_groups import mutation_groups_parse
64
64
  from ..parsers.mutation_enterpriseDirectory import mutation_enterpriseDirectory_parse
65
+ from ..parsers.mutation_hardware import mutation_hardware_parse
65
66
 
66
67
  def show_version_info(args, configuration=None):
67
68
  print(f"catocli version {catocli.__version__}")
@@ -134,6 +135,8 @@ parser = argparse.ArgumentParser(prog='catocli', usage='%(prog)s <operationType>
134
135
  parser.add_argument('--version', action='version', version=catocli.__version__)
135
136
  parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
136
137
  parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
138
+ parser.add_argument('-n', '--stream-events', dest='stream_events', help='Send events over network to host:port TCP')
139
+ parser.add_argument('-z', '--sentinel', dest='sentinel', help='Send events to Sentinel customerid:sharedkey')
137
140
  subparsers = parser.add_subparsers()
138
141
 
139
142
  # Version command - enhanced with update checking
@@ -179,21 +182,22 @@ query_hardware_parser = query_hardware_parse(query_subparsers)
179
182
  query_enterpriseDirectory_parser = query_enterpriseDirectory_parse(query_subparsers)
180
183
  query_devices_parser = query_devices_parse(query_subparsers)
181
184
  query_catalogs_parser = query_catalogs_parse(query_subparsers)
182
- query_site_parser = query_site_parse(query_subparsers)
183
185
  query_xdr_parser = query_xdr_parse(query_subparsers)
184
- query_policy_parser = query_policy_parse(query_subparsers)
186
+ query_site_parser = query_site_parse(query_subparsers)
185
187
  query_groups_parser = query_groups_parse(query_subparsers)
188
+ query_policy_parser = query_policy_parse(query_subparsers)
186
189
  mutation_xdr_parser = mutation_xdr_parse(mutation_subparsers)
187
190
  mutation_site_parser = mutation_site_parse(mutation_subparsers)
188
191
  mutation_sites_parser = mutation_sites_parse(mutation_subparsers)
192
+ mutation_policy_parser = mutation_policy_parse(mutation_subparsers)
189
193
  mutation_container_parser = mutation_container_parse(mutation_subparsers)
190
194
  mutation_admin_parser = mutation_admin_parse(mutation_subparsers)
191
- mutation_policy_parser = mutation_policy_parse(mutation_subparsers)
192
195
  mutation_accountManagement_parser = mutation_accountManagement_parse(mutation_subparsers)
193
196
  mutation_sandbox_parser = mutation_sandbox_parse(mutation_subparsers)
194
- mutation_hardware_parser = mutation_hardware_parse(mutation_subparsers)
197
+ mutation_licensing_parser = mutation_licensing_parse(mutation_subparsers)
195
198
  mutation_groups_parser = mutation_groups_parse(mutation_subparsers)
196
199
  mutation_enterpriseDirectory_parser = mutation_enterpriseDirectory_parse(mutation_subparsers)
200
+ mutation_hardware_parser = mutation_hardware_parse(mutation_subparsers)
197
201
 
198
202
 
199
203
  def parse_headers(header_strings):
@@ -276,7 +280,14 @@ def main(args=None):
276
280
  print(response)
277
281
  else:
278
282
  if response!=None:
279
- print(json.dumps(response[0], sort_keys=True, indent=4))
283
+ # Check if this is CSV output
284
+ if (isinstance(response, list) and len(response) > 0 and
285
+ isinstance(response[0], dict) and "__csv_output__" in response[0]):
286
+ # Print CSV output directly without JSON formatting
287
+ print(response[0]["__csv_output__"], end='')
288
+ else:
289
+ # Standard JSON output
290
+ print(json.dumps(response[0], sort_keys=True, indent=4))
280
291
  except KeyboardInterrupt:
281
292
  print('Operation cancelled by user (Ctrl+C).')
282
293
  exit(130) # Standard exit code for SIGINT
catocli/Utils/cliutils.py CHANGED
@@ -39,15 +39,56 @@ def load_cli_settings():
39
39
  Load clisettings.json from multiple possible locations:
40
40
  1. Package resource (for installed packages)
41
41
  2. Repository location (for development)
42
+ 3. Adjacent file location (for development)
43
+ 4. Embedded defaults as final fallback
42
44
 
43
45
  Returns:
44
- dict: The loaded settings or default settings if loading fails
46
+ dict: The loaded settings or embedded default settings if all loading fails
45
47
  """
48
+ # Embedded default settings as final fallback
49
+ default_settings = {
50
+ "export_by_socket_type": {
51
+ "SOCKET_X1500": True,
52
+ "SOCKET_X1600": True,
53
+ "SOCKET_X1600_LTE": True,
54
+ "SOCKET_X1700": True
55
+ },
56
+ "default_socket_interface_map": {
57
+ "SOCKET_X1500": "LAN1",
58
+ "SOCKET_X1600": "INT_5",
59
+ "SOCKET_X1600_LTE": "INT_5",
60
+ "SOCKET_X1700": "INT_3"
61
+ },
62
+ "childOperationParent": {
63
+ "xdr": True,
64
+ "policy": True,
65
+ "groups": True,
66
+ "newGroups": True,
67
+ "site": True
68
+ },
69
+ "childOperationObjects": {
70
+ "ipAddressRange": True,
71
+ "fqdn": True,
72
+ "PolicyQueries": True,
73
+ "GroupsQueries": True,
74
+ "ContainerQueries": True,
75
+ "SiteQueries": True
76
+ },
77
+ "queryOperationCsvOutput": {
78
+ "query.appStats": "format_app_stats_to_csv",
79
+ "query.appStatsTimeSeries": "format_app_stats_timeseries_to_csv",
80
+ "query.accountMetrics": "format_account_metrics_to_csv",
81
+ "query.socketPortMetricsTimeSeries": "format_socket_port_metrics_timeseries_to_csv"
82
+ }
83
+ }
84
+
46
85
  settings_locations = [
47
86
  # Try package resource first (for installed packages)
48
87
  lambda: json.loads(get_package_resource('catocli', 'clisettings.json')),
49
88
  # Try repository location (for development)
50
- lambda: json.load(open(os.path.join(os.path.dirname(__file__), '../../clisettings.json'), 'r', encoding='utf-8'))
89
+ lambda: json.load(open(os.path.join(os.path.dirname(__file__), '../../clisettings.json'), 'r', encoding='utf-8')),
90
+ # Try adjacent file location (for development - new location)
91
+ lambda: json.load(open(os.path.join(os.path.dirname(__file__), '../clisettings.json'), 'r', encoding='utf-8'))
51
92
  ]
52
93
 
53
94
  for i, load_func in enumerate(settings_locations):
@@ -59,21 +100,8 @@ def load_cli_settings():
59
100
  # Continue to next location
60
101
  continue
61
102
 
62
- # If all locations fail, return default settings for socket export
63
- return {
64
- "export_by_socket_type": {
65
- "SOCKET_X1500": True,
66
- "SOCKET_X1600": True,
67
- "SOCKET_X1600_LTE": True,
68
- "SOCKET_X1700": True
69
- },
70
- "default_socket_interface_map": {
71
- "SOCKET_X1500": "LAN1",
72
- "SOCKET_X1600": "INT_5",
73
- "SOCKET_X1600_LTE": "INT_5",
74
- "SOCKET_X1700": "INT_3"
75
- }
76
- }
103
+ # If all locations fail, return embedded default settings
104
+ return default_settings
77
105
 
78
106
 
79
107
  def get_cli_settings_path():