catocli 2.0.4__py3-none-any.whl → 2.0.5__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 (290) hide show
  1. build/lib/catocli/Utils/clidriver.py +268 -0
  2. build/lib/catocli/Utils/profile_manager.py +188 -0
  3. build/lib/catocli/Utils/version_checker.py +192 -0
  4. build/lib/catocli/__init__.py +2 -0
  5. build/lib/catocli/__main__.py +12 -0
  6. build/lib/catocli/parsers/configure/__init__.py +115 -0
  7. build/lib/catocli/parsers/configure/configure.py +307 -0
  8. build/lib/catocli/parsers/custom/__init__.py +57 -0
  9. build/lib/catocli/parsers/custom/customLib.py +561 -0
  10. build/lib/catocli/parsers/custom/export_rules/__init__.py +42 -0
  11. build/lib/catocli/parsers/custom/export_rules/export_rules.py +234 -0
  12. build/lib/catocli/parsers/custom/export_sites/__init__.py +21 -0
  13. build/lib/catocli/parsers/custom/export_sites/export_sites.py +372 -0
  14. build/lib/catocli/parsers/custom/import_rules_to_tf/__init__.py +58 -0
  15. build/lib/catocli/parsers/custom/import_rules_to_tf/import_rules_to_tf.py +451 -0
  16. build/lib/catocli/parsers/custom/import_sites_to_tf/__init__.py +45 -0
  17. build/lib/catocli/parsers/custom/import_sites_to_tf/import_sites_to_tf.py +891 -0
  18. build/lib/catocli/parsers/mutation_accountManagement/__init__.py +48 -0
  19. build/lib/catocli/parsers/mutation_admin/__init__.py +48 -0
  20. build/lib/catocli/parsers/mutation_container/__init__.py +138 -0
  21. build/lib/catocli/parsers/mutation_hardware/__init__.py +22 -0
  22. build/lib/catocli/parsers/mutation_policy/__init__.py +1305 -0
  23. build/lib/catocli/parsers/mutation_sandbox/__init__.py +35 -0
  24. build/lib/catocli/parsers/mutation_site/__init__.py +373 -0
  25. build/lib/catocli/parsers/mutation_sites/__init__.py +373 -0
  26. build/lib/catocli/parsers/mutation_xdr/__init__.py +48 -0
  27. build/lib/catocli/parsers/parserApiClient.py +513 -0
  28. build/lib/catocli/parsers/query_accountBySubdomain/__init__.py +16 -0
  29. build/lib/catocli/parsers/query_accountManagement/__init__.py +16 -0
  30. build/lib/catocli/parsers/query_accountMetrics/__init__.py +16 -0
  31. build/lib/catocli/parsers/query_accountRoles/__init__.py +16 -0
  32. build/lib/catocli/parsers/query_accountSnapshot/__init__.py +16 -0
  33. build/lib/catocli/parsers/query_admin/__init__.py +16 -0
  34. build/lib/catocli/parsers/query_admins/__init__.py +16 -0
  35. build/lib/catocli/parsers/query_appStats/__init__.py +16 -0
  36. build/lib/catocli/parsers/query_appStatsTimeSeries/__init__.py +16 -0
  37. build/lib/catocli/parsers/query_auditFeed/__init__.py +16 -0
  38. build/lib/catocli/parsers/query_catalogs/__init__.py +16 -0
  39. build/lib/catocli/parsers/query_container/__init__.py +16 -0
  40. build/lib/catocli/parsers/query_devices/__init__.py +16 -0
  41. build/lib/catocli/parsers/query_entityLookup/__init__.py +16 -0
  42. build/lib/catocli/parsers/query_events/__init__.py +16 -0
  43. build/lib/catocli/parsers/query_eventsFeed/__init__.py +16 -0
  44. build/lib/catocli/parsers/query_eventsTimeSeries/__init__.py +16 -0
  45. build/lib/catocli/parsers/query_hardware/__init__.py +16 -0
  46. build/lib/catocli/parsers/query_hardwareManagement/__init__.py +16 -0
  47. build/lib/catocli/parsers/query_licensing/__init__.py +16 -0
  48. build/lib/catocli/parsers/query_policy/__init__.py +161 -0
  49. build/lib/catocli/parsers/query_sandbox/__init__.py +16 -0
  50. build/lib/catocli/parsers/query_site/__init__.py +100 -0
  51. build/lib/catocli/parsers/query_siteLocation/__init__.py +13 -0
  52. build/lib/catocli/parsers/query_subDomains/__init__.py +16 -0
  53. build/lib/catocli/parsers/query_xdr/__init__.py +35 -0
  54. build/lib/catocli/parsers/raw/__init__.py +12 -0
  55. build/lib/graphql_client/__init__.py +11 -0
  56. build/lib/graphql_client/api/__init__.py +3 -0
  57. build/lib/graphql_client/api/call_api.py +84 -0
  58. build/lib/graphql_client/api_client.py +192 -0
  59. build/lib/graphql_client/api_client_types.py +409 -0
  60. build/lib/graphql_client/configuration.py +232 -0
  61. build/lib/graphql_client/models/__init__.py +13 -0
  62. build/lib/graphql_client/models/no_schema.py +71 -0
  63. build/lib/schema/catolib.py +1141 -0
  64. build/lib/schema/importSchema.py +60 -0
  65. build/lib/schema/remove_policyid.py +89 -0
  66. build/lib/schema/remove_policyid_mutations.py +89 -0
  67. build/lib/scripts/catolib.py +62 -0
  68. build/lib/scripts/export_if_rules_to_json.py +188 -0
  69. build/lib/scripts/export_wf_rules_to_json.py +111 -0
  70. build/lib/scripts/import_wf_rules_to_tfstate.py +331 -0
  71. build/lib/vendor/certifi/__init__.py +4 -0
  72. build/lib/vendor/certifi/__main__.py +12 -0
  73. build/lib/vendor/certifi/core.py +114 -0
  74. build/lib/vendor/certifi/py.typed +0 -0
  75. build/lib/vendor/six.py +998 -0
  76. build/lib/vendor/urllib3/__init__.py +211 -0
  77. build/lib/vendor/urllib3/_base_connection.py +172 -0
  78. build/lib/vendor/urllib3/_collections.py +483 -0
  79. build/lib/vendor/urllib3/_request_methods.py +278 -0
  80. build/lib/vendor/urllib3/_version.py +16 -0
  81. build/lib/vendor/urllib3/connection.py +1033 -0
  82. build/lib/vendor/urllib3/connectionpool.py +1182 -0
  83. build/lib/vendor/urllib3/contrib/__init__.py +0 -0
  84. build/lib/vendor/urllib3/contrib/emscripten/__init__.py +18 -0
  85. build/lib/vendor/urllib3/contrib/emscripten/connection.py +254 -0
  86. build/lib/vendor/urllib3/contrib/emscripten/fetch.py +418 -0
  87. build/lib/vendor/urllib3/contrib/emscripten/request.py +22 -0
  88. build/lib/vendor/urllib3/contrib/emscripten/response.py +285 -0
  89. build/lib/vendor/urllib3/contrib/pyopenssl.py +552 -0
  90. build/lib/vendor/urllib3/contrib/socks.py +228 -0
  91. build/lib/vendor/urllib3/exceptions.py +321 -0
  92. build/lib/vendor/urllib3/fields.py +341 -0
  93. build/lib/vendor/urllib3/filepost.py +89 -0
  94. build/lib/vendor/urllib3/http2/__init__.py +53 -0
  95. build/lib/vendor/urllib3/http2/connection.py +356 -0
  96. build/lib/vendor/urllib3/http2/probe.py +87 -0
  97. build/lib/vendor/urllib3/poolmanager.py +637 -0
  98. build/lib/vendor/urllib3/py.typed +2 -0
  99. build/lib/vendor/urllib3/response.py +1265 -0
  100. build/lib/vendor/urllib3/util/__init__.py +42 -0
  101. build/lib/vendor/urllib3/util/connection.py +137 -0
  102. build/lib/vendor/urllib3/util/proxy.py +43 -0
  103. build/lib/vendor/urllib3/util/request.py +256 -0
  104. build/lib/vendor/urllib3/util/response.py +101 -0
  105. build/lib/vendor/urllib3/util/retry.py +533 -0
  106. build/lib/vendor/urllib3/util/ssl_.py +513 -0
  107. build/lib/vendor/urllib3/util/ssl_match_hostname.py +159 -0
  108. build/lib/vendor/urllib3/util/ssltransport.py +276 -0
  109. build/lib/vendor/urllib3/util/timeout.py +275 -0
  110. build/lib/vendor/urllib3/util/url.py +471 -0
  111. build/lib/vendor/urllib3/util/util.py +42 -0
  112. build/lib/vendor/urllib3/util/wait.py +124 -0
  113. catocli/Utils/clidriver.py +1 -4
  114. catocli/__init__.py +1 -1
  115. catocli/parsers/custom/export_sites/export_sites.py +2 -2
  116. catocli/parsers/mutation_container/__init__.py +116 -0
  117. catocli/parsers/mutation_container_fqdn/README.md +7 -0
  118. catocli/parsers/mutation_container_fqdn_addValues/README.md +17 -0
  119. catocli/parsers/mutation_container_fqdn_createFromFile/README.md +17 -0
  120. catocli/parsers/mutation_container_fqdn_removeValues/README.md +17 -0
  121. catocli/parsers/mutation_container_fqdn_updateFromFile/README.md +17 -0
  122. catocli/parsers/mutation_container_ipAddressRange/README.md +7 -0
  123. catocli/parsers/mutation_container_ipAddressRange_addValues/README.md +17 -0
  124. catocli/parsers/mutation_container_ipAddressRange_createFromFile/README.md +17 -0
  125. catocli/parsers/mutation_container_ipAddressRange_removeValues/README.md +17 -0
  126. catocli/parsers/mutation_container_ipAddressRange_updateFromFile/README.md +17 -0
  127. catocli/parsers/mutation_policy_internetFirewall_addRule/README.md +1 -1
  128. catocli/parsers/mutation_policy_internetFirewall_updateRule/README.md +1 -1
  129. catocli/parsers/mutation_policy_wanFirewall_addRule/README.md +1 -1
  130. catocli/parsers/mutation_policy_wanFirewall_updateRule/README.md +1 -1
  131. catocli/parsers/parserApiClient.py +25 -11
  132. catocli/parsers/query_policy/README.md +0 -17
  133. catocli/parsers/query_policy/__init__.py +153 -8
  134. catocli/parsers/query_policy_appTenantRestriction/README.md +7 -0
  135. catocli/parsers/query_policy_appTenantRestriction_policy/README.md +17 -0
  136. catocli/parsers/query_policy_dynamicIpAllocation/README.md +7 -0
  137. catocli/parsers/query_policy_dynamicIpAllocation_policy/README.md +17 -0
  138. catocli/parsers/query_policy_internetFirewall/README.md +7 -0
  139. catocli/parsers/query_policy_internetFirewall_policy/README.md +17 -0
  140. catocli/parsers/query_policy_remotePortFwd/README.md +7 -0
  141. catocli/parsers/query_policy_remotePortFwd_policy/README.md +17 -0
  142. catocli/parsers/query_policy_socketLan/README.md +7 -0
  143. catocli/parsers/query_policy_socketLan_policy/README.md +17 -0
  144. catocli/parsers/query_policy_terminalServer/README.md +7 -0
  145. catocli/parsers/query_policy_terminalServer_policy/README.md +17 -0
  146. catocli/parsers/query_policy_wanFirewall/README.md +7 -0
  147. catocli/parsers/query_policy_wanFirewall_policy/README.md +17 -0
  148. catocli/parsers/query_policy_wanNetwork/README.md +7 -0
  149. catocli/parsers/query_policy_wanNetwork_policy/README.md +17 -0
  150. catocli/parsers/query_site/README.md +0 -16
  151. catocli/parsers/query_site/__init__.py +92 -8
  152. catocli/parsers/query_site_availableVersionList/README.md +17 -0
  153. catocli/parsers/query_site_bgpPeer/README.md +17 -0
  154. catocli/parsers/query_site_bgpPeerList/README.md +17 -0
  155. catocli/parsers/query_site_cloudInterconnectConnectionConnectivity/README.md +17 -0
  156. catocli/parsers/query_site_cloudInterconnectPhysicalConnection/README.md +17 -0
  157. catocli/parsers/query_site_cloudInterconnectPhysicalConnectionId/README.md +17 -0
  158. catocli/parsers/query_site_siteBgpStatus/README.md +17 -0
  159. catocli/parsers/raw/README.md +0 -14
  160. catocli/parsers/raw/__init__.py +0 -2
  161. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/METADATA +1 -1
  162. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/RECORD +290 -120
  163. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/top_level.txt +1 -0
  164. graphql_client/api/call_api.py +4 -3
  165. models/mutation.container.fqdn.addValues.json +866 -0
  166. models/mutation.container.fqdn.createFromFile.json +819 -0
  167. models/mutation.container.fqdn.removeValues.json +866 -0
  168. models/mutation.container.fqdn.updateFromFile.json +1045 -0
  169. models/mutation.container.ipAddressRange.addValues.json +1020 -0
  170. models/mutation.container.ipAddressRange.createFromFile.json +819 -0
  171. models/mutation.container.ipAddressRange.removeValues.json +1020 -0
  172. models/mutation.container.ipAddressRange.updateFromFile.json +1045 -0
  173. models/mutation.policy.appTenantRestriction.addRule.json +8 -8
  174. models/mutation.policy.appTenantRestriction.addSection.json +1 -1
  175. models/mutation.policy.appTenantRestriction.createPolicyRevision.json +2 -2
  176. models/mutation.policy.appTenantRestriction.discardPolicyRevision.json +2 -2
  177. models/mutation.policy.appTenantRestriction.moveRule.json +2 -2
  178. models/mutation.policy.appTenantRestriction.moveSection.json +1 -1
  179. models/mutation.policy.appTenantRestriction.publishPolicyRevision.json +2 -2
  180. models/mutation.policy.appTenantRestriction.removeRule.json +2 -2
  181. models/mutation.policy.appTenantRestriction.removeSection.json +1 -1
  182. models/mutation.policy.appTenantRestriction.updatePolicy.json +2 -2
  183. models/mutation.policy.appTenantRestriction.updateRule.json +8 -8
  184. models/mutation.policy.appTenantRestriction.updateSection.json +1 -1
  185. models/mutation.policy.dynamicIpAllocation.addRule.json +1 -1
  186. models/mutation.policy.dynamicIpAllocation.addSection.json +1 -1
  187. models/mutation.policy.dynamicIpAllocation.createPolicyRevision.json +1 -1
  188. models/mutation.policy.dynamicIpAllocation.discardPolicyRevision.json +1 -1
  189. models/mutation.policy.dynamicIpAllocation.moveRule.json +1 -1
  190. models/mutation.policy.dynamicIpAllocation.moveSection.json +1 -1
  191. models/mutation.policy.dynamicIpAllocation.publishPolicyRevision.json +1 -1
  192. models/mutation.policy.dynamicIpAllocation.removeRule.json +1 -1
  193. models/mutation.policy.dynamicIpAllocation.removeSection.json +1 -1
  194. models/mutation.policy.dynamicIpAllocation.updatePolicy.json +1 -1
  195. models/mutation.policy.dynamicIpAllocation.updateRule.json +1 -1
  196. models/mutation.policy.dynamicIpAllocation.updateSection.json +1 -1
  197. models/mutation.policy.internetFirewall.addRule.json +502 -55
  198. models/mutation.policy.internetFirewall.addSection.json +1 -1
  199. models/mutation.policy.internetFirewall.createPolicyRevision.json +127 -10
  200. models/mutation.policy.internetFirewall.discardPolicyRevision.json +127 -10
  201. models/mutation.policy.internetFirewall.moveRule.json +127 -10
  202. models/mutation.policy.internetFirewall.moveSection.json +1 -1
  203. models/mutation.policy.internetFirewall.publishPolicyRevision.json +127 -10
  204. models/mutation.policy.internetFirewall.removeRule.json +127 -10
  205. models/mutation.policy.internetFirewall.removeSection.json +1 -1
  206. models/mutation.policy.internetFirewall.updatePolicy.json +127 -10
  207. models/mutation.policy.internetFirewall.updateRule.json +493 -55
  208. models/mutation.policy.internetFirewall.updateSection.json +1 -1
  209. models/mutation.policy.remotePortFwd.addRule.json +5 -5
  210. models/mutation.policy.remotePortFwd.addSection.json +1 -1
  211. models/mutation.policy.remotePortFwd.createPolicyRevision.json +2 -2
  212. models/mutation.policy.remotePortFwd.discardPolicyRevision.json +2 -2
  213. models/mutation.policy.remotePortFwd.moveRule.json +2 -2
  214. models/mutation.policy.remotePortFwd.moveSection.json +1 -1
  215. models/mutation.policy.remotePortFwd.publishPolicyRevision.json +2 -2
  216. models/mutation.policy.remotePortFwd.removeRule.json +2 -2
  217. models/mutation.policy.remotePortFwd.removeSection.json +1 -1
  218. models/mutation.policy.remotePortFwd.updatePolicy.json +2 -2
  219. models/mutation.policy.remotePortFwd.updateRule.json +5 -5
  220. models/mutation.policy.remotePortFwd.updateSection.json +1 -1
  221. models/mutation.policy.socketLan.addRule.json +16 -16
  222. models/mutation.policy.socketLan.addSection.json +1 -1
  223. models/mutation.policy.socketLan.createPolicyRevision.json +4 -4
  224. models/mutation.policy.socketLan.discardPolicyRevision.json +4 -4
  225. models/mutation.policy.socketLan.moveRule.json +4 -4
  226. models/mutation.policy.socketLan.moveSection.json +1 -1
  227. models/mutation.policy.socketLan.publishPolicyRevision.json +4 -4
  228. models/mutation.policy.socketLan.removeRule.json +4 -4
  229. models/mutation.policy.socketLan.removeSection.json +1 -1
  230. models/mutation.policy.socketLan.updatePolicy.json +4 -4
  231. models/mutation.policy.socketLan.updateRule.json +16 -16
  232. models/mutation.policy.socketLan.updateSection.json +1 -1
  233. models/mutation.policy.terminalServer.addRule.json +1 -1
  234. models/mutation.policy.terminalServer.addSection.json +1 -1
  235. models/mutation.policy.terminalServer.createPolicyRevision.json +1 -1
  236. models/mutation.policy.terminalServer.discardPolicyRevision.json +1 -1
  237. models/mutation.policy.terminalServer.moveRule.json +1 -1
  238. models/mutation.policy.terminalServer.moveSection.json +1 -1
  239. models/mutation.policy.terminalServer.publishPolicyRevision.json +1 -1
  240. models/mutation.policy.terminalServer.removeRule.json +1 -1
  241. models/mutation.policy.terminalServer.removeSection.json +1 -1
  242. models/mutation.policy.terminalServer.updatePolicy.json +1 -1
  243. models/mutation.policy.terminalServer.updateRule.json +1 -1
  244. models/mutation.policy.terminalServer.updateSection.json +1 -1
  245. models/mutation.policy.wanFirewall.addRule.json +500 -53
  246. models/mutation.policy.wanFirewall.addSection.json +1 -1
  247. models/mutation.policy.wanFirewall.createPolicyRevision.json +128 -11
  248. models/mutation.policy.wanFirewall.discardPolicyRevision.json +128 -11
  249. models/mutation.policy.wanFirewall.moveRule.json +128 -11
  250. models/mutation.policy.wanFirewall.moveSection.json +1 -1
  251. models/mutation.policy.wanFirewall.publishPolicyRevision.json +128 -11
  252. models/mutation.policy.wanFirewall.removeRule.json +128 -11
  253. models/mutation.policy.wanFirewall.removeSection.json +1 -1
  254. models/mutation.policy.wanFirewall.updatePolicy.json +128 -11
  255. models/mutation.policy.wanFirewall.updateRule.json +491 -53
  256. models/mutation.policy.wanFirewall.updateSection.json +1 -1
  257. models/mutation.policy.wanNetwork.addRule.json +13 -13
  258. models/mutation.policy.wanNetwork.addSection.json +1 -1
  259. models/mutation.policy.wanNetwork.createPolicyRevision.json +1 -1
  260. models/mutation.policy.wanNetwork.discardPolicyRevision.json +1 -1
  261. models/mutation.policy.wanNetwork.moveRule.json +1 -1
  262. models/mutation.policy.wanNetwork.moveSection.json +1 -1
  263. models/mutation.policy.wanNetwork.publishPolicyRevision.json +1 -1
  264. models/mutation.policy.wanNetwork.removeRule.json +1 -1
  265. models/mutation.policy.wanNetwork.removeSection.json +1 -1
  266. models/mutation.policy.wanNetwork.updatePolicy.json +1 -1
  267. models/mutation.policy.wanNetwork.updateRule.json +13 -13
  268. models/mutation.policy.wanNetwork.updateSection.json +1 -1
  269. models/query.policy.appTenantRestriction.policy.json +3086 -0
  270. models/query.policy.dynamicIpAllocation.policy.json +1934 -0
  271. models/query.policy.internetFirewall.policy.json +7833 -0
  272. models/query.policy.json +233 -0
  273. models/query.policy.remotePortFwd.policy.json +2387 -0
  274. models/query.policy.socketLan.policy.json +7140 -0
  275. models/query.policy.terminalServer.policy.json +1632 -0
  276. models/query.policy.wanFirewall.policy.json +9212 -0
  277. models/query.policy.wanNetwork.policy.json +8010 -0
  278. models/query.site.availableVersionList.json +365 -0
  279. models/query.site.bgpPeer.json +1917 -0
  280. models/query.site.bgpPeerList.json +2076 -0
  281. models/query.site.cloudInterconnectConnectionConnectivity.json +298 -0
  282. models/query.site.cloudInterconnectPhysicalConnection.json +728 -0
  283. models/query.site.cloudInterconnectPhysicalConnectionId.json +660 -0
  284. models/query.site.siteBgpStatus.json +869 -0
  285. schema/catolib.py +13 -6
  286. schema/remove_policyid.py +89 -0
  287. schema/remove_policyid_mutations.py +89 -0
  288. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/LICENSE +0 -0
  289. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/WHEEL +0 -0
  290. {catocli-2.0.4.dist-info → catocli-2.0.5.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,513 @@
1
+ import codecs
2
+ import json
3
+ import os
4
+ import sys
5
+ from graphql_client import ApiClient, CallApi
6
+ from graphql_client.api_client import ApiException
7
+ import logging
8
+ import pprint
9
+ import uuid
10
+ from urllib3.filepost import encode_multipart_formdata
11
+
12
+ def createRequest(args, configuration):
13
+ params = vars(args)
14
+ instance = CallApi(ApiClient(configuration))
15
+ operationName = params["operation_name"]
16
+ operation = loadJSON("models/"+operationName+".json")
17
+ variablesObj = {}
18
+ if params["json"] and not params["t"]:
19
+ try:
20
+ variablesObj = json.loads(params["json"])
21
+ except ValueError as e:
22
+ print("ERROR: Query argument must be valid json in quotes. ",e,'\n\nExample: \'{"yourKey":"yourValue"}\'')
23
+ exit()
24
+ elif not params["t"] and params["json"] is None:
25
+ # Default to empty object if no json provided and not using -t flag
26
+ variablesObj = {}
27
+ if "accountId" in operation["args"]:
28
+ variablesObj["accountId"] = configuration.accountID
29
+ else:
30
+ variablesObj["accountID"] = configuration.accountID
31
+ if params["t"]==True:
32
+ # Skip validation when using -t flag
33
+ isOk = True
34
+ else:
35
+ isOk, invalidVars, message = validateArgs(variablesObj,operation)
36
+ if isOk==True:
37
+ body = generateGraphqlPayload(variablesObj,operation,operationName)
38
+ if params["t"]==True:
39
+ # Load query from queryPayloads file
40
+ try:
41
+ queryPayloadFile = "queryPayloads/" + operationName + ".json"
42
+ queryPayload = loadJSON(queryPayloadFile)
43
+ if queryPayload and "query" in queryPayload:
44
+ print(queryPayload["query"])
45
+ else:
46
+ print("ERROR: Query not found in " + queryPayloadFile)
47
+ except Exception as e:
48
+ print("ERROR: Could not load query from " + queryPayloadFile + ": " + str(e))
49
+ return None
50
+ else:
51
+ try:
52
+ return instance.call_api(body,params)
53
+ except ApiException as e:
54
+ return e
55
+ else:
56
+ print("ERROR: "+message,", ".join(invalidVars))
57
+ try:
58
+ queryPayloadFile = "queryPayloads/" + operationName + ".json"
59
+ queryPayload = loadJSON(queryPayloadFile)
60
+ print("\nExample: catocli "+operationName.replace(".", " "), json.dumps(queryPayload['variables']))
61
+ except Exception as e:
62
+ print("ERROR: Could not load query from " + queryPayloadFile + ": " + str(e))
63
+
64
+ def querySiteLocation(args, configuration):
65
+ params = vars(args)
66
+ operationName = params["operation_name"]
67
+ operation = loadJSON("models/"+operationName+".json")
68
+ try:
69
+ variablesObj = json.loads(params["json"])
70
+ except ValueError as e:
71
+ print("ERROR: Query argument must be valid json in quotes. ",e,'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'')
72
+ exit()
73
+ if not variablesObj.get("filters"):
74
+ print("ERROR: Missing argument, must include filters array. ",e,'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'')
75
+ exit()
76
+ if not isinstance(variablesObj.get("filters"), list):
77
+ print("ERROR: Invalid argument, must include filters array. ",e,'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'')
78
+ exit()
79
+ requiredFields = ["search","field","operation"]
80
+ for filter in variablesObj["filters"]:
81
+ if not isinstance(filter, dict):
82
+ print("ERROR: Invalid filter '"+str(filter)+"', filters must be valid json and include 'search', 'field', and 'operation'. ",'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'',type(filter))
83
+ exit()
84
+ for param in filter:
85
+ if param not in requiredFields:
86
+ print("ERROR: Invalid field '"+param+"', filters must include 'search', 'field', and 'operation'. ",'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'')
87
+ exit()
88
+ for filter in variablesObj["filters"]:
89
+ for param in filter:
90
+ val = filter.get(param)
91
+ if param=="search" and (not isinstance(val, str) or len(val)<3):
92
+ print("ERROR: Invalid search '"+val+"', must be a string value and at least 3 characters in lengh. ",'\n\nExample: \'{"filters":[{"search": "Your city here","field":"city","opeation":"exact"}}\'')
93
+ exit()
94
+ if param=="field" and (not isinstance(val, str) or val not in [ 'countryName', 'stateName', 'city']):
95
+ print("ERROR: Invalid field '"+val+"', must be one of the following: 'countryName', 'stateName', or 'city'.",'\n\nExample: \'{"search":"your query here","field":"city"}\'')
96
+ exit()
97
+ if param=="operation" and (not isinstance(val, str) or val not in [ 'startsWith', 'endsWith', 'exact', 'contains' ]):
98
+ print("ERROR: Invalid operation '"+val+"', must be one of the following: 'startsWith', 'endsWith', 'exact', 'contains'.",'\n\nExample: \'{"search": "Your search here","field":"city","operation":"exact"}\'')
99
+ exit()
100
+ response = {"data":[]}
101
+ for key, siteObj in operation.items():
102
+ isOk = True
103
+ for filter in variablesObj["filters"]:
104
+ search = filter.get("search")
105
+ field = filter.get("field")
106
+ operation = filter.get("operation")
107
+ if field in siteObj:
108
+ if operation=="startsWith" and not siteObj[field].startswith(search):
109
+ isOk = False
110
+ break
111
+ elif operation=="endsWith" and not siteObj[field].endswith(search):
112
+ isOk = False
113
+ break
114
+ elif operation=="exact" and not siteObj[field]==search:
115
+ isOk = False
116
+ break
117
+ elif operation=="contains" and not search in siteObj[field]:
118
+ isOk = False
119
+ break
120
+ else:
121
+ isOk = False
122
+ break
123
+ if isOk==False:
124
+ break
125
+ if isOk==True:
126
+ response["data"].append(siteObj)
127
+ if params["p"]==True:
128
+ responseStr = json.dumps(response,indent=2,sort_keys=True,ensure_ascii=False).encode('utf8')
129
+ print(responseStr.decode())
130
+ else:
131
+ responseStr = json.dumps(response,ensure_ascii=False).encode('utf8')
132
+ print(responseStr.decode())
133
+
134
+ def createRawRequest(args, configuration):
135
+ params = vars(args)
136
+ # Handle endpoint override
137
+ if hasattr(args, 'endpoint') and args.endpoint:
138
+ configuration.host = args.endpoint
139
+
140
+ # Check if binary/multipart mode is enabled
141
+ if hasattr(args, 'binary') and args.binary:
142
+ return createRawBinaryRequest(args, configuration)
143
+
144
+ instance = CallApi(ApiClient(configuration))
145
+ isOk = False
146
+ try:
147
+ body = json.loads(params["json"])
148
+ isOk = True
149
+ except ValueError as e:
150
+ print("ERROR: Argument must be valid json. ",e)
151
+ isOk=False
152
+ except Exception as e:
153
+ isOk=False
154
+ print("ERROR: ",e)
155
+ if isOk==True:
156
+ if params["t"]==True:
157
+ if params["p"]==True:
158
+ print(json.dumps(body,indent=2,sort_keys=True).replace("\\n", "\n").replace("\\t", "\t"))
159
+ else:
160
+ print(json.dumps(body).replace("\\n", " ").replace("\\t", " ").replace(" "," ").replace(" "," "))
161
+ return None
162
+ else:
163
+ try:
164
+ return instance.call_api(body,params)
165
+ except ApiException as e:
166
+ print(e)
167
+ exit()
168
+
169
+ def generateGraphqlPayload(variablesObj,operation,operationName):
170
+ indent = " "
171
+ queryStr = ""
172
+ variableStr = ""
173
+ for varName in variablesObj:
174
+ if (varName in operation["operationArgs"]):
175
+ variableStr += operation["operationArgs"][varName]["requestStr"]
176
+ operationAry = operationName.split(".")
177
+ operationType = operationAry.pop(0)
178
+ queryStr = operationType + " "
179
+ queryStr += renderCamelCase(".".join(operationAry))
180
+ queryStr += " ( " + variableStr + ") {\n"
181
+ queryStr += indent + operation["name"] + " ( "
182
+ for argName in operation["args"]:
183
+ arg = operation["args"][argName]
184
+ if arg["varName"] in variablesObj:
185
+ queryStr += arg["responseStr"]
186
+ queryStr += ") {\n" + renderArgsAndFields("", variablesObj, operation, operation["type"]["definition"], " ") + " }"
187
+ queryStr += indent + "\n}";
188
+ body = {
189
+ "query":queryStr,
190
+ "variables":variablesObj,
191
+ "operationName":renderCamelCase(".".join(operationAry)),
192
+ }
193
+ return body
194
+
195
+ def get_help(path):
196
+ matchCmd = "catocli "+path.replace("_"," ")
197
+ import os
198
+ pwd = os.path.dirname(__file__)
199
+ doc = path+"/README.md"
200
+ abs_path = os.path.join(pwd, doc)
201
+ new_line = "\nEXAMPLES:\n"
202
+ lines = open(abs_path, "r").readlines()
203
+ for line in lines:
204
+ if f"{matchCmd}" in line:
205
+ clean_line = line.replace("<br /><br />", "").replace("`","")
206
+ new_line += f"{clean_line}\n"
207
+ # matchArg = path.replace("_",".")
208
+ # for line in lines:
209
+ # if f"`{matchArg}" in line:
210
+ # clean_line = line.replace("<br /><br />", "").replace("`","")
211
+ # new_line += f"{clean_line}\n"
212
+ return new_line
213
+
214
+ def validateArgs(variablesObj,operation):
215
+ isOk = True
216
+ invalidVars = []
217
+ message = "Arguments are missing or have invalid values: "
218
+ for varName in variablesObj:
219
+ if varName not in operation["operationArgs"]:
220
+ isOk = False
221
+ invalidVars.append('"'+varName+'"')
222
+ message = "Invalid argument names. Looking for: "+", ".join(list(operation["operationArgs"].keys()))
223
+
224
+ if isOk==True:
225
+ for varName in operation["operationArgs"]:
226
+ if operation["operationArgs"][varName]["required"] and varName not in variablesObj:
227
+ isOk = False
228
+ invalidVars.append('"'+varName+'"')
229
+ else:
230
+ if varName in variablesObj:
231
+ value = variablesObj[varName]
232
+ if operation["operationArgs"][varName]["required"] and value=="":
233
+ isOk = False
234
+ invalidVars.append('"'+varName+'":"'+str(value)+'"')
235
+ return isOk, invalidVars, message
236
+
237
+ def loadJSON(file):
238
+ CONFIG = {}
239
+ module_dir_ary = os.path.dirname(__file__).split("/")
240
+ del module_dir_ary[-1]
241
+ del module_dir_ary[-1]
242
+ module_dir = "/".join(module_dir_ary)
243
+ try:
244
+ with open(module_dir+'/'+file, 'r') as data:
245
+ CONFIG = json.load(data)
246
+ return CONFIG
247
+ except:
248
+ logging.warning("File \""+module_dir+'/'+file+"\" not found.")
249
+ exit()
250
+
251
+ def renderCamelCase(pathStr):
252
+ str = ""
253
+ pathAry = pathStr.split(".")
254
+ for i, path in enumerate(pathAry):
255
+ if i == 0:
256
+ str += path[0].lower() + path[1:]
257
+ else:
258
+ str += path[0].upper() + path[1:]
259
+ return str
260
+
261
+ def renderArgsAndFields(responseArgStr, variablesObj, curOperation, definition, indent):
262
+ for fieldName in definition['fields']:
263
+ field = definition['fields'][fieldName]
264
+ field_name = field['alias'] if 'alias' in field else field['name']
265
+
266
+ # Check if field has arguments and whether they are present in variables
267
+ should_include_field = True
268
+ argsPresent = False
269
+ argStr = ""
270
+
271
+ if field.get("args") and not isinstance(field['args'], list):
272
+ if (len(list(field['args'].keys()))>0):
273
+ # Field has arguments - only include if arguments are present in variables
274
+ argStr = " ( "
275
+ for argName in field['args']:
276
+ arg = field['args'][argName]
277
+ if arg["varName"] in variablesObj:
278
+ argStr += arg['responseStr'] + " "
279
+ argsPresent = True
280
+ argStr += ") "
281
+ # Only include fields with arguments if the arguments are present
282
+ should_include_field = argsPresent
283
+
284
+ # Only process field if we should include it
285
+ if should_include_field:
286
+ responseArgStr += indent + field_name
287
+ if argsPresent:
288
+ responseArgStr += argStr
289
+
290
+ if should_include_field and field.get("type") and field['type'].get('definition') and field['type']['definition']['fields'] is not None:
291
+ responseArgStr += " {\n"
292
+ for subfieldIndex in field['type']['definition']['fields']:
293
+ subfield = field['type']['definition']['fields'][subfieldIndex]
294
+ subfield_name = subfield['alias'] if 'alias' in subfield else subfield['name']
295
+ responseArgStr += indent + " " + subfield_name
296
+ if subfield.get("args") and len(list(subfield["args"].keys()))>0:
297
+ argsPresent = False
298
+ subArgStr = " ( "
299
+ for argName in subfield['args']:
300
+ arg = subfield['args'][argName]
301
+ if arg["varName"] in variablesObj:
302
+ argsPresent = True
303
+ subArgStr += arg['responseStr'] + " "
304
+ subArgStr += " )"
305
+ if argsPresent==True:
306
+ responseArgStr += subArgStr
307
+ if subfield.get("type") and subfield['type'].get("definition") and (subfield['type']['definition'].get("fields") or subfield['type']['definition'].get('inputFields')):
308
+ responseArgStr += " {\n"
309
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, subfield['type']['definition'], indent + " ")
310
+ if subfield['type']['definition'].get('possibleTypes'):
311
+ for possibleTypeName in subfield['type']['definition']['possibleTypes']:
312
+ possibleType = subfield['type']['definition']['possibleTypes'][possibleTypeName]
313
+ responseArgStr += indent + " ... on " + possibleType['name'] + " {\n"
314
+ if possibleType.get('fields') or possibleType.get('inputFields'):
315
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, possibleType, indent + " ")
316
+ responseArgStr += indent + " }\n"
317
+ responseArgStr += indent + " }"
318
+ elif subfield.get('type') and subfield['type'].get('definition') and subfield['type']['definition'].get('possibleTypes'):
319
+ responseArgStr += " {\n"
320
+ responseArgStr += indent + " __typename\n"
321
+ for possibleTypeName in subfield['type']['definition']['possibleTypes']:
322
+ possibleType = subfield['type']['definition']['possibleTypes'][possibleTypeName]
323
+ responseArgStr += indent + " ... on " + possibleType['name'] + " {\n"
324
+ if possibleType.get('fields') or possibleType.get('inputFields'):
325
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, possibleType, indent + " ")
326
+ responseArgStr += indent + " }\n"
327
+ responseArgStr += indent + " }\n"
328
+ responseArgStr += "\n"
329
+ if field['type']['definition'].get('possibleTypes'):
330
+ for possibleTypeName in field['type']['definition']['possibleTypes']:
331
+ possibleType = field['type']['definition']['possibleTypes'][possibleTypeName]
332
+ responseArgStr += indent + " ... on " + possibleType['name'] + " {\n"
333
+ if possibleType.get('fields') or possibleType.get('inputFields'):
334
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, possibleType, indent + " ")
335
+ responseArgStr += indent + " }\n"
336
+ responseArgStr += indent + "}\n"
337
+ if should_include_field and field.get('type') and field['type'].get('definition') and field['type']['definition'].get('inputFields'):
338
+ responseArgStr += " {\n"
339
+ for subfieldName in field['type']['definition'].get('inputFields'):
340
+ subfield = field['type']['definition']['inputFields'][subfieldName]
341
+ subfield_name = subfield['alias'] if 'alias' in subfield else subfield['name']
342
+ responseArgStr += indent + " " + subfield_name
343
+ if subfield.get('type') and subfield['type'].get('definition') and (subfield['type']['definition'].get('fields') or subfield['type']['definition'].get('inputFields')):
344
+ responseArgStr += " {\n"
345
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, subfield['type']['definition'], indent + " ")
346
+ responseArgStr += indent + " }\n"
347
+ if field['type']['definition'].get('possibleTypes'):
348
+ for possibleTypeName in field['type']['definition']['possibleTypes']:
349
+ possibleType = field['type']['definition']['possibleTypes'][possibleTypeName]
350
+ responseArgStr += indent + "... on " + possibleType['name'] + " {\n"
351
+ if possibleType.get('fields') or possibleType.get('inputFields'):
352
+ responseArgStr = renderArgsAndFields(responseArgStr, variablesObj, curOperation, possibleType, indent + " ")
353
+ responseArgStr += indent + " }\n"
354
+ responseArgStr += indent + "}\n"
355
+ if should_include_field:
356
+ responseArgStr += "\n"
357
+ return responseArgStr
358
+
359
+ def createRawBinaryRequest(args, configuration):
360
+ """Handle multipart/form-data requests for file uploads and binary content"""
361
+ params = vars(args)
362
+
363
+
364
+ # Parse the JSON body
365
+ try:
366
+ body = json.loads(params["json"])
367
+ except ValueError as e:
368
+ print("ERROR: JSON argument must be valid json. ", e)
369
+ return
370
+ except Exception as e:
371
+ print("ERROR: ", e)
372
+ return
373
+
374
+ # Build form data
375
+ form_fields = {}
376
+ files = []
377
+
378
+ # Add the operations field containing the GraphQL payload
379
+ form_fields['operations'] = json.dumps(body)
380
+
381
+ # Handle file mappings if files are specified
382
+ if hasattr(args, 'files') and args.files:
383
+ # Build the map object for file uploads
384
+ file_map = {}
385
+ for i, (field_name, file_path) in enumerate(args.files):
386
+ file_index = str(i + 1)
387
+ file_map[file_index] = [field_name]
388
+
389
+ # Read file content
390
+ try:
391
+ with open(file_path, 'rb') as f:
392
+ file_content = f.read()
393
+ files.append((file_index, (os.path.basename(file_path), file_content, 'application/octet-stream')))
394
+ except IOError as e:
395
+ print(f"ERROR: Could not read file {file_path}: {e}")
396
+ return
397
+
398
+ # Add the map field
399
+ form_fields['map'] = json.dumps(file_map)
400
+
401
+ # Test mode - just print the request structure
402
+ if params.get("t") == True:
403
+ print("Multipart form data request:")
404
+ if params.get("p") == True:
405
+ print(f"Operations: {json.dumps(json.loads(form_fields.get('operations')), indent=2)}")
406
+ else:
407
+ print(f"Operations: {form_fields.get('operations')}")
408
+ if 'map' in form_fields:
409
+ print(f"Map: {form_fields.get('map')}")
410
+ if files:
411
+ print(f"Files: {[f[0] + ': ' + f[1][0] for f in files]}")
412
+ return None
413
+
414
+ # Perform the multipart request
415
+ try:
416
+ return sendMultipartRequest(configuration, form_fields, files, params)
417
+ except Exception as e:
418
+ # Safely handle exception string conversion
419
+ try:
420
+ error_str = str(e)
421
+ except Exception:
422
+ error_str = f"Exception of type {type(e).__name__}"
423
+
424
+ if params.get("v") == True:
425
+ import traceback
426
+ print(f"ERROR: Failed to send multipart request: {error_str}")
427
+ traceback.print_exc()
428
+ else:
429
+ print(f"ERROR: Failed to send multipart request: {error_str}")
430
+ return None
431
+
432
+ def sendMultipartRequest(configuration, form_fields, files, params):
433
+ """Send a multipart/form-data request directly using urllib3"""
434
+ import urllib3
435
+
436
+ # Create pool manager
437
+ pool_manager = urllib3.PoolManager(
438
+ cert_reqs='CERT_NONE' if not getattr(configuration, 'verify_ssl', False) else 'CERT_REQUIRED'
439
+ )
440
+
441
+ # Prepare form data
442
+ fields = []
443
+ for key, value in form_fields.items():
444
+ fields.append((key, value))
445
+
446
+ for file_key, (filename, content, content_type) in files:
447
+ fields.append((file_key, (filename, content, content_type)))
448
+
449
+ # Encode multipart data
450
+ body_data, content_type = encode_multipart_formdata(fields)
451
+
452
+ # Prepare headers
453
+ headers = {
454
+ 'Content-Type': content_type,
455
+ 'User-Agent': f"Cato-CLI-v{getattr(configuration, 'version', 'unknown')}"
456
+ }
457
+
458
+ # Add API key if not using headers file or custom headers
459
+ using_custom_headers = hasattr(configuration, 'custom_headers') and configuration.custom_headers
460
+ if not using_custom_headers and hasattr(configuration, 'api_key') and hasattr(configuration, 'api_key') and configuration.api_key and 'x-api-key' in configuration.api_key:
461
+ headers['x-api-key'] = configuration.api_key['x-api-key']
462
+
463
+ # Add custom headers
464
+ if using_custom_headers:
465
+ headers.update(configuration.custom_headers)
466
+
467
+ # Verbose output
468
+ if params.get("v") == True:
469
+ print(f"Host: {getattr(configuration, 'host', 'unknown')}")
470
+ masked_headers = headers.copy()
471
+ if 'x-api-key' in masked_headers:
472
+ masked_headers['x-api-key'] = '***MASKED***'
473
+ print(f"Request Headers: {json.dumps(masked_headers, indent=4, sort_keys=True)}")
474
+ print(f"Content-Type: {content_type}")
475
+ print(f"Form fields: {list(form_fields.keys())}")
476
+ print(f"Files: {[f[0] for f in files]}\n")
477
+
478
+ try:
479
+ # Make the request
480
+ resp = pool_manager.request(
481
+ 'POST',
482
+ getattr(configuration, 'host', 'https://api.catonetworks.com/api/v1/graphql'),
483
+ body=body_data,
484
+ headers=headers
485
+ )
486
+
487
+ # Parse response
488
+ if resp.status < 200 or resp.status >= 300:
489
+ reason = resp.reason if resp.reason is not None else "Unknown Error"
490
+ error_msg = f"HTTP {resp.status}: {reason}"
491
+ if resp.data:
492
+ try:
493
+ error_msg += f"\n{resp.data.decode('utf-8')}"
494
+ except Exception:
495
+ error_msg += f"\n{resp.data}"
496
+ print(f"ERROR: {error_msg}")
497
+ return None
498
+
499
+ try:
500
+ response_data = json.loads(resp.data.decode('utf-8'))
501
+ except json.JSONDecodeError:
502
+ response_data = resp.data.decode('utf-8')
503
+
504
+ return [response_data]
505
+
506
+ except Exception as e:
507
+ # Safely handle exception string conversion
508
+ try:
509
+ error_str = str(e)
510
+ except Exception:
511
+ error_str = f"Exception of type {type(e).__name__}"
512
+ print(f"ERROR: Network/request error: {error_str}")
513
+ return None
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_accountBySubdomain_parse(query_subparsers):
5
+ query_accountBySubdomain_parser = query_subparsers.add_parser('accountBySubdomain',
6
+ help='accountBySubdomain() query operation',
7
+ usage=get_help("query_accountBySubdomain"))
8
+
9
+ query_accountBySubdomain_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_accountBySubdomain_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_accountBySubdomain_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_accountBySubdomain_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_accountBySubdomain_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_accountBySubdomain_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_accountBySubdomain_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_accountBySubdomain_parser.set_defaults(func=createRequest,operation_name='query.accountBySubdomain')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_accountManagement_parse(query_subparsers):
5
+ query_accountManagement_parser = query_subparsers.add_parser('accountManagement',
6
+ help='accountManagement() query operation',
7
+ usage=get_help("query_accountManagement"))
8
+
9
+ query_accountManagement_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_accountManagement_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_accountManagement_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_accountManagement_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_accountManagement_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_accountManagement_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_accountManagement_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_accountManagement_parser.set_defaults(func=createRequest,operation_name='query.accountManagement')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_accountMetrics_parse(query_subparsers):
5
+ query_accountMetrics_parser = query_subparsers.add_parser('accountMetrics',
6
+ help='accountMetrics() query operation',
7
+ usage=get_help("query_accountMetrics"))
8
+
9
+ query_accountMetrics_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_accountMetrics_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_accountMetrics_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_accountMetrics_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_accountMetrics_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_accountMetrics_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_accountMetrics_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_accountMetrics_parser.set_defaults(func=createRequest,operation_name='query.accountMetrics')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_accountRoles_parse(query_subparsers):
5
+ query_accountRoles_parser = query_subparsers.add_parser('accountRoles',
6
+ help='accountRoles() query operation',
7
+ usage=get_help("query_accountRoles"))
8
+
9
+ query_accountRoles_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_accountRoles_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_accountRoles_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_accountRoles_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_accountRoles_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_accountRoles_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_accountRoles_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_accountRoles_parser.set_defaults(func=createRequest,operation_name='query.accountRoles')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_accountSnapshot_parse(query_subparsers):
5
+ query_accountSnapshot_parser = query_subparsers.add_parser('accountSnapshot',
6
+ help='accountSnapshot() query operation',
7
+ usage=get_help("query_accountSnapshot"))
8
+
9
+ query_accountSnapshot_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_accountSnapshot_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_accountSnapshot_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_accountSnapshot_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_accountSnapshot_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_accountSnapshot_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_accountSnapshot_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_accountSnapshot_parser.set_defaults(func=createRequest,operation_name='query.accountSnapshot')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_admin_parse(query_subparsers):
5
+ query_admin_parser = query_subparsers.add_parser('admin',
6
+ help='admin() query operation',
7
+ usage=get_help("query_admin"))
8
+
9
+ query_admin_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_admin_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_admin_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_admin_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_admin_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_admin_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_admin_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_admin_parser.set_defaults(func=createRequest,operation_name='query.admin')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_admins_parse(query_subparsers):
5
+ query_admins_parser = query_subparsers.add_parser('admins',
6
+ help='admins() query operation',
7
+ usage=get_help("query_admins"))
8
+
9
+ query_admins_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_admins_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_admins_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_admins_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_admins_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_admins_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_admins_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_admins_parser.set_defaults(func=createRequest,operation_name='query.admins')
@@ -0,0 +1,16 @@
1
+
2
+ from ..parserApiClient import createRequest, get_help
3
+
4
+ def query_appStats_parse(query_subparsers):
5
+ query_appStats_parser = query_subparsers.add_parser('appStats',
6
+ help='appStats() query operation',
7
+ usage=get_help("query_appStats"))
8
+
9
+ query_appStats_parser.add_argument('json', nargs='?', default='{}', help='Variables in JSON format (defaults to empty object if not provided).')
10
+ query_appStats_parser.add_argument('-accountID', help='Override the CATO_ACCOUNT_ID environment variable with this value.')
11
+ query_appStats_parser.add_argument('-t', const=True, default=False, nargs='?', help='Print GraphQL query without sending API call')
12
+ query_appStats_parser.add_argument('-v', const=True, default=False, nargs='?', help='Verbose output')
13
+ query_appStats_parser.add_argument('-p', const=True, default=False, nargs='?', help='Pretty print')
14
+ query_appStats_parser.add_argument('-H', '--header', action='append', dest='headers', help='Add custom headers in "Key: Value" format. Can be used multiple times.')
15
+ query_appStats_parser.add_argument('--headers-file', dest='headers_file', help='Load headers from a file. Each line should contain a header in "Key: Value" format.')
16
+ query_appStats_parser.set_defaults(func=createRequest,operation_name='query.appStats')