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.
- catocli/Utils/clidriver.py +20 -9
- catocli/Utils/cliutils.py +45 -17
- catocli/Utils/csv_formatter.py +652 -0
- catocli/__init__.py +2 -2
- catocli/clisettings.json +35 -0
- catocli/parsers/custom/export_rules/__init__.py +0 -4
- catocli/parsers/custom/export_sites/__init__.py +17 -5
- catocli/parsers/custom/export_sites/export_sites.py +826 -53
- catocli/parsers/custom/import_sites_to_tf/__init__.py +44 -16
- catocli/parsers/custom/import_sites_to_tf/import_sites_to_tf.py +859 -442
- catocli/parsers/customParserApiClient.py +444 -38
- catocli/parsers/custom_private/__init__.py +18 -0
- catocli/parsers/mutation_accountManagement/__init__.py +21 -0
- catocli/parsers/mutation_accountManagement_disableAccount/README.md +15 -0
- catocli/parsers/mutation_admin/__init__.py +12 -0
- catocli/parsers/mutation_container/__init__.py +18 -0
- catocli/parsers/mutation_enterpriseDirectory/__init__.py +8 -0
- catocli/parsers/mutation_groups/__init__.py +6 -0
- catocli/parsers/mutation_hardware/__init__.py +2 -0
- catocli/parsers/mutation_licensing/__init__.py +24 -0
- catocli/parsers/mutation_licensing_updateCommercialLicense/README.md +19 -0
- catocli/parsers/mutation_policy/__init__.py +861 -483
- catocli/parsers/mutation_policy_antiMalwareFileHash_addRule/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_addSection/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_createPolicyRevision/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_discardPolicyRevision/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_moveRule/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_moveSection/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_publishPolicyRevision/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_removeRule/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_removeSection/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_updatePolicy/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_updateRule/README.md +20 -0
- catocli/parsers/mutation_policy_antiMalwareFileHash_updateSection/README.md +20 -0
- catocli/parsers/mutation_sandbox/__init__.py +4 -0
- catocli/parsers/mutation_site/__init__.py +72 -0
- catocli/parsers/mutation_sites/__init__.py +72 -0
- catocli/parsers/mutation_xdr/__init__.py +6 -0
- catocli/parsers/query_accountBySubdomain/__init__.py +2 -0
- catocli/parsers/query_accountManagement/__init__.py +2 -0
- catocli/parsers/query_accountMetrics/__init__.py +6 -0
- catocli/parsers/query_accountRoles/__init__.py +2 -0
- catocli/parsers/query_accountSnapshot/__init__.py +2 -0
- catocli/parsers/query_admin/__init__.py +2 -0
- catocli/parsers/query_admins/__init__.py +2 -0
- catocli/parsers/query_appStats/__init__.py +6 -0
- catocli/parsers/query_appStatsTimeSeries/README.md +3 -0
- catocli/parsers/query_appStatsTimeSeries/__init__.py +6 -0
- catocli/parsers/query_auditFeed/__init__.py +2 -0
- catocli/parsers/query_catalogs/__init__.py +2 -0
- catocli/parsers/query_container/__init__.py +2 -0
- catocli/parsers/query_devices/README.md +1 -1
- catocli/parsers/query_devices/__init__.py +2 -0
- catocli/parsers/query_enterpriseDirectory/__init__.py +2 -0
- catocli/parsers/query_entityLookup/__init__.py +2 -0
- catocli/parsers/query_events/__init__.py +2 -0
- catocli/parsers/query_eventsFeed/README.md +1 -1
- catocli/parsers/query_eventsFeed/__init__.py +2 -0
- catocli/parsers/query_eventsTimeSeries/__init__.py +2 -0
- catocli/parsers/query_groups/__init__.py +6 -0
- catocli/parsers/query_hardware/README.md +1 -1
- catocli/parsers/query_hardware/__init__.py +2 -0
- catocli/parsers/query_hardwareManagement/__init__.py +2 -0
- catocli/parsers/query_licensing/__init__.py +2 -0
- catocli/parsers/query_policy/__init__.py +85 -48
- catocli/parsers/query_policy_antiMalwareFileHash_policy/README.md +19 -0
- catocli/parsers/query_popLocations/__init__.py +2 -0
- catocli/parsers/query_sandbox/__init__.py +2 -0
- catocli/parsers/query_servicePrincipalAdmin/__init__.py +2 -0
- catocli/parsers/query_site/__init__.py +33 -0
- catocli/parsers/query_siteLocation/__init__.py +2 -0
- catocli/parsers/query_site_siteGeneralDetails/README.md +19 -0
- catocli/parsers/query_socketPortMetrics/__init__.py +2 -0
- catocli/parsers/query_socketPortMetricsTimeSeries/__init__.py +6 -0
- catocli/parsers/query_subDomains/__init__.py +2 -0
- catocli/parsers/query_xdr/__init__.py +4 -0
- catocli/parsers/raw/__init__.py +3 -1
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/METADATA +1 -1
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/RECORD +107 -72
- models/mutation.accountManagement.disableAccount.json +545 -0
- models/mutation.licensing.updateCommercialLicense.json +931 -0
- models/mutation.policy.antiMalwareFileHash.addRule.json +2068 -0
- models/mutation.policy.antiMalwareFileHash.addSection.json +1350 -0
- models/mutation.policy.antiMalwareFileHash.createPolicyRevision.json +1822 -0
- models/mutation.policy.antiMalwareFileHash.discardPolicyRevision.json +1758 -0
- models/mutation.policy.antiMalwareFileHash.moveRule.json +1552 -0
- models/mutation.policy.antiMalwareFileHash.moveSection.json +1251 -0
- models/mutation.policy.antiMalwareFileHash.publishPolicyRevision.json +1813 -0
- models/mutation.policy.antiMalwareFileHash.removeRule.json +1204 -0
- models/mutation.policy.antiMalwareFileHash.removeSection.json +954 -0
- models/mutation.policy.antiMalwareFileHash.updatePolicy.json +1834 -0
- models/mutation.policy.antiMalwareFileHash.updateRule.json +1757 -0
- models/mutation.policy.antiMalwareFileHash.updateSection.json +1105 -0
- models/mutation.site.updateSiteGeneralDetails.json +3 -3
- models/mutation.sites.updateSiteGeneralDetails.json +3 -3
- models/query.devices.json +448 -62
- models/query.events.json +216 -0
- models/query.eventsFeed.json +48 -0
- models/query.eventsTimeSeries.json +144 -0
- models/query.hardware.json +224 -0
- models/query.policy.antiMalwareFileHash.policy.json +1583 -0
- models/query.site.siteGeneralDetails.json +899 -0
- schema/catolib.py +51 -4
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/WHEEL +0 -0
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/entry_points.txt +0 -0
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/licenses/LICENSE +0 -0
- {catocli-2.1.3.dist-info → catocli-2.1.6.dist-info}/top_level.txt +0 -0
catocli/Utils/clidriver.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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():
|