flowtask 5.8.4__cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.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.
Files changed (470) hide show
  1. flowtask/__init__.py +93 -0
  2. flowtask/__main__.py +38 -0
  3. flowtask/bots/__init__.py +6 -0
  4. flowtask/bots/check.py +93 -0
  5. flowtask/bots/codebot.py +51 -0
  6. flowtask/components/ASPX.py +148 -0
  7. flowtask/components/AddDataset.py +352 -0
  8. flowtask/components/Amazon.py +523 -0
  9. flowtask/components/AutoTask.py +314 -0
  10. flowtask/components/Azure.py +80 -0
  11. flowtask/components/AzureUsers.py +106 -0
  12. flowtask/components/BaseAction.py +91 -0
  13. flowtask/components/BaseLoop.py +198 -0
  14. flowtask/components/BestBuy.py +800 -0
  15. flowtask/components/CSVToGCS.py +120 -0
  16. flowtask/components/CompanyScraper/__init__.py +1 -0
  17. flowtask/components/CompanyScraper/parsers/__init__.py +6 -0
  18. flowtask/components/CompanyScraper/parsers/base.py +102 -0
  19. flowtask/components/CompanyScraper/parsers/explorium.py +192 -0
  20. flowtask/components/CompanyScraper/parsers/leadiq.py +206 -0
  21. flowtask/components/CompanyScraper/parsers/rocket.py +133 -0
  22. flowtask/components/CompanyScraper/parsers/siccode.py +109 -0
  23. flowtask/components/CompanyScraper/parsers/visualvisitor.py +130 -0
  24. flowtask/components/CompanyScraper/parsers/zoominfo.py +118 -0
  25. flowtask/components/CompanyScraper/scrapper.py +1054 -0
  26. flowtask/components/CopyTo.py +177 -0
  27. flowtask/components/CopyToBigQuery.py +243 -0
  28. flowtask/components/CopyToMongoDB.py +291 -0
  29. flowtask/components/CopyToPg.py +609 -0
  30. flowtask/components/CopyToRethink.py +207 -0
  31. flowtask/components/CreateGCSBucket.py +102 -0
  32. flowtask/components/CreateReport/CreateReport.py +228 -0
  33. flowtask/components/CreateReport/__init__.py +9 -0
  34. flowtask/components/CreateReport/charts/__init__.py +15 -0
  35. flowtask/components/CreateReport/charts/bar.py +51 -0
  36. flowtask/components/CreateReport/charts/base.py +66 -0
  37. flowtask/components/CreateReport/charts/pie.py +64 -0
  38. flowtask/components/CreateReport/utils.py +9 -0
  39. flowtask/components/CustomerSatisfaction.py +196 -0
  40. flowtask/components/DataInput.py +200 -0
  41. flowtask/components/DateList.py +255 -0
  42. flowtask/components/DbClient.py +163 -0
  43. flowtask/components/DialPad.py +146 -0
  44. flowtask/components/DocumentDBQuery.py +200 -0
  45. flowtask/components/DownloadFrom.py +371 -0
  46. flowtask/components/DownloadFromD2L.py +113 -0
  47. flowtask/components/DownloadFromFTP.py +181 -0
  48. flowtask/components/DownloadFromIMAP.py +315 -0
  49. flowtask/components/DownloadFromS3.py +198 -0
  50. flowtask/components/DownloadFromSFTP.py +265 -0
  51. flowtask/components/DownloadFromSharepoint.py +110 -0
  52. flowtask/components/DownloadFromSmartSheet.py +114 -0
  53. flowtask/components/DownloadS3File.py +229 -0
  54. flowtask/components/Dummy.py +59 -0
  55. flowtask/components/DuplicatePhoto.py +411 -0
  56. flowtask/components/EmployeeEvaluation.py +237 -0
  57. flowtask/components/ExecuteSQL.py +323 -0
  58. flowtask/components/ExtractHTML.py +178 -0
  59. flowtask/components/FileBase.py +178 -0
  60. flowtask/components/FileCopy.py +181 -0
  61. flowtask/components/FileDelete.py +82 -0
  62. flowtask/components/FileExists.py +146 -0
  63. flowtask/components/FileIteratorDelete.py +112 -0
  64. flowtask/components/FileList.py +194 -0
  65. flowtask/components/FileOpen.py +75 -0
  66. flowtask/components/FileRead.py +120 -0
  67. flowtask/components/FileRename.py +106 -0
  68. flowtask/components/FilterIf.py +284 -0
  69. flowtask/components/FilterRows/FilterRows.py +200 -0
  70. flowtask/components/FilterRows/__init__.py +10 -0
  71. flowtask/components/FilterRows/functions.py +4 -0
  72. flowtask/components/GCSToBigQuery.py +103 -0
  73. flowtask/components/GoogleA4.py +150 -0
  74. flowtask/components/GoogleGeoCoding.py +344 -0
  75. flowtask/components/GooglePlaces.py +315 -0
  76. flowtask/components/GoogleSearch.py +539 -0
  77. flowtask/components/HTTPClient.py +268 -0
  78. flowtask/components/ICIMS.py +146 -0
  79. flowtask/components/IF.py +179 -0
  80. flowtask/components/IcimsFolderCopy.py +173 -0
  81. flowtask/components/ImageFeatures/__init__.py +5 -0
  82. flowtask/components/ImageFeatures/process.py +233 -0
  83. flowtask/components/IteratorBase.py +251 -0
  84. flowtask/components/LangchainLoader/__init__.py +5 -0
  85. flowtask/components/LangchainLoader/loader.py +194 -0
  86. flowtask/components/LangchainLoader/loaders/__init__.py +22 -0
  87. flowtask/components/LangchainLoader/loaders/abstract.py +362 -0
  88. flowtask/components/LangchainLoader/loaders/basepdf.py +50 -0
  89. flowtask/components/LangchainLoader/loaders/docx.py +91 -0
  90. flowtask/components/LangchainLoader/loaders/html.py +119 -0
  91. flowtask/components/LangchainLoader/loaders/pdfblocks.py +146 -0
  92. flowtask/components/LangchainLoader/loaders/pdfmark.py +79 -0
  93. flowtask/components/LangchainLoader/loaders/pdftables.py +135 -0
  94. flowtask/components/LangchainLoader/loaders/qa.py +67 -0
  95. flowtask/components/LangchainLoader/loaders/txt.py +55 -0
  96. flowtask/components/LeadIQ.py +650 -0
  97. flowtask/components/Loop.py +253 -0
  98. flowtask/components/Lowes.py +334 -0
  99. flowtask/components/MS365Usage.py +156 -0
  100. flowtask/components/MSTeamsMessages.py +320 -0
  101. flowtask/components/MarketClustering.py +1051 -0
  102. flowtask/components/MergeFiles.py +362 -0
  103. flowtask/components/MilvusOutput.py +87 -0
  104. flowtask/components/NearByStores.py +175 -0
  105. flowtask/components/NetworkNinja/__init__.py +6 -0
  106. flowtask/components/NetworkNinja/models/__init__.py +52 -0
  107. flowtask/components/NetworkNinja/models/abstract.py +177 -0
  108. flowtask/components/NetworkNinja/models/account.py +39 -0
  109. flowtask/components/NetworkNinja/models/client.py +19 -0
  110. flowtask/components/NetworkNinja/models/district.py +14 -0
  111. flowtask/components/NetworkNinja/models/events.py +101 -0
  112. flowtask/components/NetworkNinja/models/forms.py +499 -0
  113. flowtask/components/NetworkNinja/models/market.py +16 -0
  114. flowtask/components/NetworkNinja/models/organization.py +34 -0
  115. flowtask/components/NetworkNinja/models/photos.py +125 -0
  116. flowtask/components/NetworkNinja/models/project.py +44 -0
  117. flowtask/components/NetworkNinja/models/region.py +28 -0
  118. flowtask/components/NetworkNinja/models/store.py +203 -0
  119. flowtask/components/NetworkNinja/models/user.py +151 -0
  120. flowtask/components/NetworkNinja/router.py +854 -0
  121. flowtask/components/Odoo.py +175 -0
  122. flowtask/components/OdooInjector.py +192 -0
  123. flowtask/components/OpenFromXML.py +126 -0
  124. flowtask/components/OpenWeather.py +41 -0
  125. flowtask/components/OpenWithBase.py +616 -0
  126. flowtask/components/OpenWithPandas.py +715 -0
  127. flowtask/components/PGPDecrypt.py +199 -0
  128. flowtask/components/PandasIterator.py +187 -0
  129. flowtask/components/PandasToFile.py +189 -0
  130. flowtask/components/Paradox.py +339 -0
  131. flowtask/components/ParamIterator.py +117 -0
  132. flowtask/components/ParseHTML.py +84 -0
  133. flowtask/components/PlacerStores.py +249 -0
  134. flowtask/components/Pokemon.py +507 -0
  135. flowtask/components/PositiveBot.py +62 -0
  136. flowtask/components/PowerPointSlide.py +400 -0
  137. flowtask/components/PrintMessage.py +127 -0
  138. flowtask/components/ProductCompetitors/__init__.py +5 -0
  139. flowtask/components/ProductCompetitors/parsers/__init__.py +7 -0
  140. flowtask/components/ProductCompetitors/parsers/base.py +72 -0
  141. flowtask/components/ProductCompetitors/parsers/bestbuy.py +86 -0
  142. flowtask/components/ProductCompetitors/parsers/lowes.py +103 -0
  143. flowtask/components/ProductCompetitors/scrapper.py +155 -0
  144. flowtask/components/ProductCompliant.py +169 -0
  145. flowtask/components/ProductInfo/__init__.py +1 -0
  146. flowtask/components/ProductInfo/parsers/__init__.py +5 -0
  147. flowtask/components/ProductInfo/parsers/base.py +83 -0
  148. flowtask/components/ProductInfo/parsers/brother.py +97 -0
  149. flowtask/components/ProductInfo/parsers/canon.py +167 -0
  150. flowtask/components/ProductInfo/parsers/epson.py +118 -0
  151. flowtask/components/ProductInfo/parsers/hp.py +131 -0
  152. flowtask/components/ProductInfo/parsers/samsung.py +97 -0
  153. flowtask/components/ProductInfo/scraper.py +319 -0
  154. flowtask/components/ProductPricing.py +118 -0
  155. flowtask/components/QS.py +261 -0
  156. flowtask/components/QSBase.py +201 -0
  157. flowtask/components/QueryIterator.py +273 -0
  158. flowtask/components/QueryToInsert.py +327 -0
  159. flowtask/components/QueryToPandas.py +432 -0
  160. flowtask/components/RESTClient.py +195 -0
  161. flowtask/components/RethinkDBQuery.py +189 -0
  162. flowtask/components/Rsync.py +74 -0
  163. flowtask/components/RunSSH.py +59 -0
  164. flowtask/components/RunShell.py +71 -0
  165. flowtask/components/SalesForce.py +20 -0
  166. flowtask/components/SaveImageBank/__init__.py +257 -0
  167. flowtask/components/SchedulingVisits.py +592 -0
  168. flowtask/components/ScrapPage.py +216 -0
  169. flowtask/components/ScrapSearch.py +79 -0
  170. flowtask/components/SendNotify.py +257 -0
  171. flowtask/components/SentimentAnalysis.py +694 -0
  172. flowtask/components/ServiceScrapper/__init__.py +5 -0
  173. flowtask/components/ServiceScrapper/parsers/__init__.py +1 -0
  174. flowtask/components/ServiceScrapper/parsers/base.py +94 -0
  175. flowtask/components/ServiceScrapper/parsers/costco.py +93 -0
  176. flowtask/components/ServiceScrapper/scrapper.py +199 -0
  177. flowtask/components/SetVariables.py +156 -0
  178. flowtask/components/SubTask.py +182 -0
  179. flowtask/components/SuiteCRM.py +48 -0
  180. flowtask/components/Switch.py +175 -0
  181. flowtask/components/TableBase.py +148 -0
  182. flowtask/components/TableDelete.py +312 -0
  183. flowtask/components/TableInput.py +143 -0
  184. flowtask/components/TableOutput/TableOutput.py +384 -0
  185. flowtask/components/TableOutput/__init__.py +3 -0
  186. flowtask/components/TableSchema.py +534 -0
  187. flowtask/components/Target.py +223 -0
  188. flowtask/components/ThumbnailGenerator.py +156 -0
  189. flowtask/components/ToPandas.py +67 -0
  190. flowtask/components/TransformRows/TransformRows.py +507 -0
  191. flowtask/components/TransformRows/__init__.py +9 -0
  192. flowtask/components/TransformRows/functions.py +559 -0
  193. flowtask/components/TransposeRows.py +176 -0
  194. flowtask/components/UPCDatabase.py +86 -0
  195. flowtask/components/UnGzip.py +171 -0
  196. flowtask/components/Uncompress.py +172 -0
  197. flowtask/components/UniqueRows.py +126 -0
  198. flowtask/components/Unzip.py +107 -0
  199. flowtask/components/UpdateOperationalVars.py +147 -0
  200. flowtask/components/UploadTo.py +299 -0
  201. flowtask/components/UploadToS3.py +136 -0
  202. flowtask/components/UploadToSFTP.py +160 -0
  203. flowtask/components/UploadToSharepoint.py +205 -0
  204. flowtask/components/UserFunc.py +122 -0
  205. flowtask/components/VivaTracker.py +140 -0
  206. flowtask/components/WSDLClient.py +123 -0
  207. flowtask/components/Wait.py +18 -0
  208. flowtask/components/Walmart.py +199 -0
  209. flowtask/components/Workplace.py +134 -0
  210. flowtask/components/XMLToPandas.py +267 -0
  211. flowtask/components/Zammad/__init__.py +41 -0
  212. flowtask/components/Zammad/models.py +0 -0
  213. flowtask/components/ZoomInfoScraper.py +409 -0
  214. flowtask/components/__init__.py +104 -0
  215. flowtask/components/abstract.py +18 -0
  216. flowtask/components/flow.py +530 -0
  217. flowtask/components/google.py +335 -0
  218. flowtask/components/group.py +221 -0
  219. flowtask/components/py.typed +0 -0
  220. flowtask/components/reviewscrap.py +132 -0
  221. flowtask/components/tAutoincrement.py +117 -0
  222. flowtask/components/tConcat.py +109 -0
  223. flowtask/components/tExplode.py +119 -0
  224. flowtask/components/tFilter.py +184 -0
  225. flowtask/components/tGroup.py +236 -0
  226. flowtask/components/tJoin.py +270 -0
  227. flowtask/components/tMap/__init__.py +9 -0
  228. flowtask/components/tMap/functions.py +54 -0
  229. flowtask/components/tMap/tMap.py +450 -0
  230. flowtask/components/tMelt.py +112 -0
  231. flowtask/components/tMerge.py +114 -0
  232. flowtask/components/tOrder.py +93 -0
  233. flowtask/components/tPandas.py +94 -0
  234. flowtask/components/tPivot.py +71 -0
  235. flowtask/components/tPluckCols.py +76 -0
  236. flowtask/components/tUnnest.py +82 -0
  237. flowtask/components/user.py +401 -0
  238. flowtask/conf.py +457 -0
  239. flowtask/download.py +102 -0
  240. flowtask/events/__init__.py +11 -0
  241. flowtask/events/events/__init__.py +20 -0
  242. flowtask/events/events/abstract.py +95 -0
  243. flowtask/events/events/alerts/__init__.py +362 -0
  244. flowtask/events/events/alerts/colfunctions.py +131 -0
  245. flowtask/events/events/alerts/functions.py +158 -0
  246. flowtask/events/events/dummy.py +12 -0
  247. flowtask/events/events/exec.py +124 -0
  248. flowtask/events/events/file/__init__.py +7 -0
  249. flowtask/events/events/file/base.py +51 -0
  250. flowtask/events/events/file/copy.py +23 -0
  251. flowtask/events/events/file/delete.py +16 -0
  252. flowtask/events/events/interfaces/__init__.py +9 -0
  253. flowtask/events/events/interfaces/client.py +67 -0
  254. flowtask/events/events/interfaces/credentials.py +28 -0
  255. flowtask/events/events/interfaces/notifications.py +58 -0
  256. flowtask/events/events/jira.py +122 -0
  257. flowtask/events/events/log.py +26 -0
  258. flowtask/events/events/logerr.py +52 -0
  259. flowtask/events/events/notify.py +59 -0
  260. flowtask/events/events/notify_event.py +160 -0
  261. flowtask/events/events/publish.py +54 -0
  262. flowtask/events/events/sendfile.py +104 -0
  263. flowtask/events/events/task.py +97 -0
  264. flowtask/events/events/teams.py +98 -0
  265. flowtask/events/events/webhook.py +58 -0
  266. flowtask/events/manager.py +287 -0
  267. flowtask/exceptions.c +39393 -0
  268. flowtask/exceptions.cpython-39-x86_64-linux-gnu.so +0 -0
  269. flowtask/extensions/__init__.py +3 -0
  270. flowtask/extensions/abstract.py +82 -0
  271. flowtask/extensions/logging/__init__.py +65 -0
  272. flowtask/hooks/__init__.py +9 -0
  273. flowtask/hooks/actions/__init__.py +22 -0
  274. flowtask/hooks/actions/abstract.py +66 -0
  275. flowtask/hooks/actions/dummy.py +23 -0
  276. flowtask/hooks/actions/jira.py +74 -0
  277. flowtask/hooks/actions/rest.py +320 -0
  278. flowtask/hooks/actions/sampledata.py +37 -0
  279. flowtask/hooks/actions/sensor.py +23 -0
  280. flowtask/hooks/actions/task.py +9 -0
  281. flowtask/hooks/actions/ticket.py +37 -0
  282. flowtask/hooks/actions/zammad.py +55 -0
  283. flowtask/hooks/hook.py +62 -0
  284. flowtask/hooks/models.py +17 -0
  285. flowtask/hooks/service.py +187 -0
  286. flowtask/hooks/step.py +91 -0
  287. flowtask/hooks/types/__init__.py +23 -0
  288. flowtask/hooks/types/base.py +129 -0
  289. flowtask/hooks/types/brokers/__init__.py +11 -0
  290. flowtask/hooks/types/brokers/base.py +54 -0
  291. flowtask/hooks/types/brokers/mqtt.py +35 -0
  292. flowtask/hooks/types/brokers/rabbitmq.py +82 -0
  293. flowtask/hooks/types/brokers/redis.py +83 -0
  294. flowtask/hooks/types/brokers/sqs.py +44 -0
  295. flowtask/hooks/types/fs.py +232 -0
  296. flowtask/hooks/types/http.py +49 -0
  297. flowtask/hooks/types/imap.py +200 -0
  298. flowtask/hooks/types/jira.py +279 -0
  299. flowtask/hooks/types/mail.py +205 -0
  300. flowtask/hooks/types/postgres.py +98 -0
  301. flowtask/hooks/types/responses/__init__.py +8 -0
  302. flowtask/hooks/types/responses/base.py +5 -0
  303. flowtask/hooks/types/sharepoint.py +288 -0
  304. flowtask/hooks/types/ssh.py +141 -0
  305. flowtask/hooks/types/tagged.py +59 -0
  306. flowtask/hooks/types/upload.py +85 -0
  307. flowtask/hooks/types/watch.py +71 -0
  308. flowtask/hooks/types/web.py +36 -0
  309. flowtask/interfaces/AzureClient.py +137 -0
  310. flowtask/interfaces/AzureGraph.py +839 -0
  311. flowtask/interfaces/Boto3Client.py +326 -0
  312. flowtask/interfaces/DropboxClient.py +173 -0
  313. flowtask/interfaces/ExcelHandler.py +94 -0
  314. flowtask/interfaces/FTPClient.py +131 -0
  315. flowtask/interfaces/GoogleCalendar.py +201 -0
  316. flowtask/interfaces/GoogleClient.py +133 -0
  317. flowtask/interfaces/GoogleDrive.py +127 -0
  318. flowtask/interfaces/GoogleGCS.py +89 -0
  319. flowtask/interfaces/GoogleGeocoding.py +93 -0
  320. flowtask/interfaces/GoogleLang.py +114 -0
  321. flowtask/interfaces/GooglePub.py +61 -0
  322. flowtask/interfaces/GoogleSheet.py +68 -0
  323. flowtask/interfaces/IMAPClient.py +137 -0
  324. flowtask/interfaces/O365Calendar.py +113 -0
  325. flowtask/interfaces/O365Client.py +220 -0
  326. flowtask/interfaces/OneDrive.py +284 -0
  327. flowtask/interfaces/Outlook.py +155 -0
  328. flowtask/interfaces/ParrotBot.py +130 -0
  329. flowtask/interfaces/SSHClient.py +378 -0
  330. flowtask/interfaces/Sharepoint.py +496 -0
  331. flowtask/interfaces/__init__.py +36 -0
  332. flowtask/interfaces/azureauth.py +119 -0
  333. flowtask/interfaces/cache.py +201 -0
  334. flowtask/interfaces/client.py +82 -0
  335. flowtask/interfaces/compress.py +525 -0
  336. flowtask/interfaces/credentials.py +124 -0
  337. flowtask/interfaces/d2l.py +239 -0
  338. flowtask/interfaces/databases/__init__.py +5 -0
  339. flowtask/interfaces/databases/db.py +223 -0
  340. flowtask/interfaces/databases/documentdb.py +55 -0
  341. flowtask/interfaces/databases/rethink.py +39 -0
  342. flowtask/interfaces/dataframes/__init__.py +11 -0
  343. flowtask/interfaces/dataframes/abstract.py +21 -0
  344. flowtask/interfaces/dataframes/arrow.py +71 -0
  345. flowtask/interfaces/dataframes/dt.py +69 -0
  346. flowtask/interfaces/dataframes/pandas.py +167 -0
  347. flowtask/interfaces/dataframes/polars.py +60 -0
  348. flowtask/interfaces/db.py +263 -0
  349. flowtask/interfaces/env.py +46 -0
  350. flowtask/interfaces/func.py +137 -0
  351. flowtask/interfaces/http.py +1780 -0
  352. flowtask/interfaces/locale.py +40 -0
  353. flowtask/interfaces/log.py +75 -0
  354. flowtask/interfaces/mask.py +143 -0
  355. flowtask/interfaces/notification.py +154 -0
  356. flowtask/interfaces/playwright.py +339 -0
  357. flowtask/interfaces/powerpoint.py +368 -0
  358. flowtask/interfaces/py.typed +0 -0
  359. flowtask/interfaces/qs.py +376 -0
  360. flowtask/interfaces/result.py +87 -0
  361. flowtask/interfaces/selenium_service.py +779 -0
  362. flowtask/interfaces/smartsheet.py +154 -0
  363. flowtask/interfaces/stat.py +39 -0
  364. flowtask/interfaces/task.py +96 -0
  365. flowtask/interfaces/template.py +118 -0
  366. flowtask/interfaces/vectorstores/__init__.py +1 -0
  367. flowtask/interfaces/vectorstores/abstract.py +133 -0
  368. flowtask/interfaces/vectorstores/milvus.py +669 -0
  369. flowtask/interfaces/zammad.py +107 -0
  370. flowtask/models.py +193 -0
  371. flowtask/parsers/__init__.py +15 -0
  372. flowtask/parsers/_yaml.c +11978 -0
  373. flowtask/parsers/_yaml.cpython-39-x86_64-linux-gnu.so +0 -0
  374. flowtask/parsers/argparser.py +235 -0
  375. flowtask/parsers/base.c +15155 -0
  376. flowtask/parsers/base.cpython-39-x86_64-linux-gnu.so +0 -0
  377. flowtask/parsers/json.c +11968 -0
  378. flowtask/parsers/json.cpython-39-x86_64-linux-gnu.so +0 -0
  379. flowtask/parsers/maps.py +49 -0
  380. flowtask/parsers/toml.c +11968 -0
  381. flowtask/parsers/toml.cpython-39-x86_64-linux-gnu.so +0 -0
  382. flowtask/plugins/__init__.py +16 -0
  383. flowtask/plugins/components/__init__.py +0 -0
  384. flowtask/plugins/handler/__init__.py +45 -0
  385. flowtask/plugins/importer.py +31 -0
  386. flowtask/plugins/sources/__init__.py +0 -0
  387. flowtask/runner.py +283 -0
  388. flowtask/scheduler/__init__.py +9 -0
  389. flowtask/scheduler/functions.py +493 -0
  390. flowtask/scheduler/handlers/__init__.py +8 -0
  391. flowtask/scheduler/handlers/manager.py +504 -0
  392. flowtask/scheduler/handlers/models.py +58 -0
  393. flowtask/scheduler/handlers/service.py +72 -0
  394. flowtask/scheduler/notifications.py +65 -0
  395. flowtask/scheduler/scheduler.py +993 -0
  396. flowtask/services/__init__.py +0 -0
  397. flowtask/services/bots/__init__.py +0 -0
  398. flowtask/services/bots/telegram.py +264 -0
  399. flowtask/services/files/__init__.py +11 -0
  400. flowtask/services/files/manager.py +522 -0
  401. flowtask/services/files/model.py +37 -0
  402. flowtask/services/files/service.py +767 -0
  403. flowtask/services/jira/__init__.py +3 -0
  404. flowtask/services/jira/jira_actions.py +191 -0
  405. flowtask/services/tasks/__init__.py +13 -0
  406. flowtask/services/tasks/launcher.py +213 -0
  407. flowtask/services/tasks/manager.py +323 -0
  408. flowtask/services/tasks/service.py +275 -0
  409. flowtask/services/tasks/task_manager.py +376 -0
  410. flowtask/services/tasks/tasks.py +155 -0
  411. flowtask/storages/__init__.py +16 -0
  412. flowtask/storages/exceptions.py +12 -0
  413. flowtask/storages/files/__init__.py +8 -0
  414. flowtask/storages/files/abstract.py +29 -0
  415. flowtask/storages/files/filesystem.py +66 -0
  416. flowtask/storages/tasks/__init__.py +19 -0
  417. flowtask/storages/tasks/abstract.py +26 -0
  418. flowtask/storages/tasks/database.py +33 -0
  419. flowtask/storages/tasks/filesystem.py +108 -0
  420. flowtask/storages/tasks/github.py +119 -0
  421. flowtask/storages/tasks/memory.py +45 -0
  422. flowtask/storages/tasks/row.py +25 -0
  423. flowtask/tasks/__init__.py +0 -0
  424. flowtask/tasks/abstract.py +526 -0
  425. flowtask/tasks/command.py +118 -0
  426. flowtask/tasks/pile.py +486 -0
  427. flowtask/tasks/py.typed +0 -0
  428. flowtask/tasks/task.py +778 -0
  429. flowtask/template/__init__.py +161 -0
  430. flowtask/tests.py +257 -0
  431. flowtask/types/__init__.py +8 -0
  432. flowtask/types/typedefs.c +11347 -0
  433. flowtask/types/typedefs.cpython-39-x86_64-linux-gnu.so +0 -0
  434. flowtask/utils/__init__.py +24 -0
  435. flowtask/utils/constants.py +117 -0
  436. flowtask/utils/encoders.py +21 -0
  437. flowtask/utils/executor.py +112 -0
  438. flowtask/utils/functions.cpp +14280 -0
  439. flowtask/utils/functions.cpython-39-x86_64-linux-gnu.so +0 -0
  440. flowtask/utils/json.cpp +13349 -0
  441. flowtask/utils/json.cpython-39-x86_64-linux-gnu.so +0 -0
  442. flowtask/utils/mail.py +63 -0
  443. flowtask/utils/parseqs.c +13324 -0
  444. flowtask/utils/parserqs.cpython-39-x86_64-linux-gnu.so +0 -0
  445. flowtask/utils/stats.py +308 -0
  446. flowtask/utils/transformations.py +74 -0
  447. flowtask/utils/uv.py +12 -0
  448. flowtask/utils/validators.py +97 -0
  449. flowtask/version.py +11 -0
  450. flowtask-5.8.4.dist-info/LICENSE +201 -0
  451. flowtask-5.8.4.dist-info/METADATA +209 -0
  452. flowtask-5.8.4.dist-info/RECORD +470 -0
  453. flowtask-5.8.4.dist-info/WHEEL +6 -0
  454. flowtask-5.8.4.dist-info/entry_points.txt +3 -0
  455. flowtask-5.8.4.dist-info/top_level.txt +2 -0
  456. plugins/components/CreateQR.py +39 -0
  457. plugins/components/TestComponent.py +28 -0
  458. plugins/components/Use1.py +13 -0
  459. plugins/components/Workplace.py +117 -0
  460. plugins/components/__init__.py +3 -0
  461. plugins/sources/__init__.py +0 -0
  462. plugins/sources/get_populartimes.py +78 -0
  463. plugins/sources/google.py +150 -0
  464. plugins/sources/hubspot.py +679 -0
  465. plugins/sources/icims.py +679 -0
  466. plugins/sources/mobileinsight.py +501 -0
  467. plugins/sources/newrelic.py +262 -0
  468. plugins/sources/uap.py +268 -0
  469. plugins/sources/venu.py +244 -0
  470. plugins/sources/vocinity.py +314 -0
@@ -0,0 +1,679 @@
1
+ from typing import Any
2
+ from urllib.parse import urlencode
3
+ from requests.exceptions import ReadTimeout
4
+ import aiohttp
5
+ from navconfig.logging import logging
6
+ from querysource.libs.json import json_encoder, json_decoder
7
+ from querysource.exceptions import DataNotFound, ConfigError, OutputError
8
+ from querysource.providers.sources import restSource
9
+
10
+
11
+ class icims(restSource):
12
+ """
13
+ ICIMS
14
+ Getting Data from ICIMS servers.
15
+ """
16
+
17
+ url: str = 'https://api.icims.com/'
18
+ original_url: str = 'https://api.icims.com/' # Keep original url
19
+ login_url = 'https://login.icims.com/oauth/token'
20
+ stream_url: str = 'https://data-transfer-assembler.production.env.icims.tools/datastream/v2/streams/{customer_id}/'
21
+ _token: str = None
22
+ _expiration: int = 1800
23
+ _token_type: str = 'Bearer'
24
+ _caching: bool = True
25
+ _saved_token: str = 'navigator_icims_token'
26
+ _legacy_call: bool = False
27
+ _is_test: bool = False
28
+ use_redis: bool = True
29
+
30
+ def __init__(
31
+ self,
32
+ definition: dict = None,
33
+ conditions: dict = None,
34
+ request: Any = None, **kwargs
35
+ ):
36
+ super(icims, self).__init__(definition, conditions, request, **kwargs)
37
+
38
+ args = self._args
39
+ self._conditions = conditions
40
+ self.customer_id = conditions.get('customer_id', None)
41
+
42
+ if not self.customer_id:
43
+ self.customer_id = self._env.get('ICIMS_CUSTOMER_ID')
44
+
45
+ try:
46
+ self.type = definition.params['type']
47
+ except (ValueError, AttributeError):
48
+ self.type = None
49
+
50
+ if 'type' in kwargs:
51
+ self.type = kwargs['type']
52
+ del kwargs['type']
53
+
54
+ if 'type' in conditions:
55
+ self.type = conditions['type']
56
+ del conditions['type']
57
+
58
+ # Credentials
59
+ # Username and password:
60
+ if 'api_username' in conditions:
61
+ self.api_username = conditions['api_username']
62
+ del conditions['api_username']
63
+ else:
64
+ self.api_username = self._env.get('ICIMS_API_USERNAME')
65
+ if not self.api_username:
66
+ try:
67
+ self.api_username = definition.params['api_username']
68
+ except (ValueError, AttributeError) as exc:
69
+ raise ValueError(
70
+ "ICIMS: Missing API Username"
71
+ ) from exc
72
+
73
+ if 'api_password' in conditions:
74
+ self.api_password = conditions['api_password']
75
+ del conditions['api_password']
76
+ else:
77
+ self.api_password = self._env.get('ICIMS_API_PASSWORD')
78
+ if not self.api_password:
79
+ try:
80
+ self.api_password = definition.params['api_password']
81
+ except (ValueError, AttributeError):
82
+ pass
83
+
84
+ if 'api_key' in conditions:
85
+ self.client_id = conditions['api_key']
86
+ del conditions['api_key']
87
+ else:
88
+ self.client_id = self._env.get('ICIMS_API_KEY')
89
+ if not self.client_id:
90
+ try:
91
+ self.client_id = definition.params['api_key']
92
+ except (ValueError, AttributeError) as exc:
93
+ raise ValueError(
94
+ "ICIMS: Missing API Key"
95
+ ) from exc
96
+
97
+ if 'api_secret' in conditions:
98
+ self.client_secret = conditions['api_secret']
99
+ del self._conditions['api_secret']
100
+ else:
101
+ self.client_secret = self._env.get('ICIMS_API_SECRET')
102
+ if not self.client_secret:
103
+ try:
104
+ self.client_secret = definition.params['api_secret']
105
+ except (ValueError, AttributeError) as exc:
106
+ raise ValueError(
107
+ "ICIMS: Missing API Secret"
108
+ ) from exc
109
+
110
+ self.original_url = self.url
111
+
112
+ # check if the call is legacy
113
+ if 'legacy' in conditions and conditions['legacy'] is True:
114
+ self.setup_legacy_request()
115
+ del conditions['legacy']
116
+
117
+ # check if the request is a test (To only get limited records)
118
+ if 'test' in conditions and conditions['test'] is True:
119
+ self._is_test = True
120
+ del conditions['test']
121
+
122
+ # if types
123
+ # if self.type == 'people':
124
+ # self.url = self.url + 'customers/{customer_id}/search/people'
125
+ # elif self.type == 'person':
126
+ # self.url = self.url + 'customers/{customer_id}/people/{person_id}'
127
+
128
+ if self.type == 'forms_list':
129
+ self.setup_legacy_request()
130
+ self.url = self.url + 'customers/{customer_id}/forms/list'
131
+
132
+ if self.type == 'forms':
133
+ self.setup_legacy_request()
134
+ self.url = self.url + 'customers/{customer_id}/forms'
135
+
136
+ # set parameters
137
+ self._args = args
138
+
139
+ async def get_token(self):
140
+ result = None
141
+ # get the redis connection
142
+ try:
143
+ await self._redis.connection()
144
+ except Exception as err:
145
+ logging.exception(f'REST ICIM error: {err!s}')
146
+ raise
147
+ # try if is saved on redis:
148
+ try:
149
+ result = await self._redis.get(self._saved_token)
150
+ if result:
151
+ data = json_decoder(result)
152
+ logging.debug(':: ICIMS: Using credentials in Cache')
153
+ self._token = data['access_token']
154
+ self._token_type = data['token_type']
155
+ return self._token
156
+ except Exception as err:
157
+ print(err)
158
+ logging.exception(f'ICIMS Redis Error: {err!s}')
159
+ raise
160
+ # else: get token from URL
161
+ data = {
162
+ "audience": 'https://api.icims.com/v1/',
163
+ "grant_type": 'client_credentials',
164
+ "client_id": self.client_id,
165
+ "client_secret": self.client_secret
166
+ }
167
+ result = None
168
+ # getting the authentication token
169
+ # first: search in redis (with expiration)
170
+ timeout = aiohttp.ClientTimeout(total=self.timeout)
171
+ async with aiohttp.ClientSession() as session:
172
+ async with session.post(
173
+ self.login_url,
174
+ timeout=timeout,
175
+ data=data
176
+ ) as response:
177
+ if response.status == 200:
178
+ try:
179
+ result = await response.json()
180
+ data = await response.text()
181
+ # saving the token on redis with expiration:
182
+ self._token = result['access_token']
183
+ self._expiration = result['expires_in']
184
+ self._token_type = result['token_type']
185
+ try:
186
+ status = await self._redis.setex(
187
+ self._saved_token,
188
+ data,
189
+ self._expiration
190
+ )
191
+ print(status)
192
+ except Exception as err:
193
+ print(err)
194
+ finally:
195
+ await self._redis.close()
196
+ return self._token
197
+ except Exception as e:
198
+ print(e)
199
+ b = await response.content.read()
200
+ result = b.decode("utf-8")
201
+ raise ConfigError(
202
+ f'Error: {result}'
203
+ ) from e
204
+ else:
205
+ raise ConfigError(f'Error: {response.text()}')
206
+
207
+ def setup_legacy_request(self):
208
+ self.auth_type = 'basic'
209
+ self._user = self.api_username
210
+ self._pwd = self.api_password
211
+ self.auth = {}
212
+ self._legacy_call = True
213
+
214
+ def setup_bearer_token_request(self, JWT):
215
+ # pass
216
+ self.auth_type = 'api_key'
217
+ self.auth = {'Authorization': 'Bearer ' + JWT}
218
+
219
+ async def people(self):
220
+ """people
221
+
222
+ Get all the people for a given customer.
223
+ """
224
+ self.url = self.original_url + 'customers/{customer_id}/search/people'
225
+ self.type = 'people'
226
+ self._legacy_call = True
227
+ self.method = 'get'
228
+
229
+ try:
230
+ self._args['customer_id'] = self._conditions['customer_id']
231
+ del self._conditions['customer_id']
232
+ except (KeyError, AttributeError) as exc:
233
+ self._args['customer_id'] = self.customer_id
234
+ if not self._args['customer_id']:
235
+ raise ValueError(
236
+ "ICIMS: Missing Customer ID"
237
+ ) from exc
238
+
239
+ try:
240
+ self._result = await self.query()
241
+ return self._result
242
+ except Exception as err:
243
+ logging.exception(err)
244
+ raise
245
+
246
+ async def person(self):
247
+ """person
248
+
249
+ Get a single person by id for a given customer.
250
+ """
251
+ self.url = self.original_url + 'customers/{customer_id}/people/{person_id}'
252
+ self.type = 'person'
253
+ self._legacy_call = True
254
+ self.method = 'get'
255
+
256
+ try:
257
+ self._args['customer_id'] = self._conditions['customer_id']
258
+ del self._conditions['customer_id']
259
+ except (KeyError, AttributeError) as exc:
260
+ self._args['customer_id'] = self.customer_id
261
+ if not self._args['customer_id']:
262
+ raise ValueError(
263
+ "ICIMS: Missing Customer ID"
264
+ ) from exc
265
+
266
+ try:
267
+ self._args['person_id'] = self._conditions['person_id']
268
+ del self._conditions['person_id']
269
+ except (KeyError, AttributeError):
270
+ raise ValueError("ICIMS: Missing Person ID")
271
+
272
+ try:
273
+ self._result = await self.query()
274
+ return self._result
275
+ except Exception as err:
276
+ logging.exception(err)
277
+ raise
278
+
279
+ async def forms_list(self):
280
+ """forms.
281
+
282
+ Get a list of Forms.
283
+ """
284
+ self.url = self.original_url + 'customers/{customer_id}/forms/list'
285
+ self.type = 'forms_list'
286
+ self._legacy_call = True
287
+ self.method = 'get'
288
+ try:
289
+ self._args['customer_id'] = self._conditions['customer_id']
290
+ del self._conditions['customer_id']
291
+ except (KeyError, AttributeError) as exc:
292
+ self._args['customer_id'] = self.customer_id
293
+ if not self._args['customer_id']:
294
+ raise ValueError(
295
+ "ICIMS: Missing Customer ID"
296
+ ) from exc
297
+ try:
298
+ self._result = await self.query()
299
+ return self._result
300
+ except Exception as err:
301
+ logging.exception(err)
302
+ raise
303
+
304
+ async def form_data(self):
305
+ """forms.
306
+
307
+ Get a list of Forms.
308
+ """
309
+ self.url = self.url + 'customers/{customer_id}/forms/{form_data_id}'
310
+ self.type = 'form_data'
311
+ self._legacy_call = True
312
+ self.method = 'get'
313
+ try:
314
+ self._args['customer_id'] = self._conditions['customer_id']
315
+ del self._conditions['customer_id']
316
+ except (KeyError, AttributeError) as exc:
317
+ self._args['customer_id'] = self.customer_id
318
+ if not self._args['customer_id']:
319
+ raise ValueError(
320
+ "ICIMS: Missing Customer ID"
321
+ ) from exc
322
+
323
+ try:
324
+ self._args['form_data_id'] = self._conditions['form_data_id']
325
+ del self._conditions['form_data_id']
326
+ except (KeyError, AttributeError) as exc:
327
+ raise ValueError(
328
+ "ICIMS: Missing Form Data ID"
329
+ ) from exc
330
+
331
+ try:
332
+ self._result = await self.query()
333
+ return self._result
334
+ except Exception as err:
335
+ logging.exception(err)
336
+ raise
337
+
338
+ async def jobs(self):
339
+ """jobs
340
+
341
+ Get a all jobs for a given customer in a portal.
342
+ """
343
+ self.url = self.url + 'customers/{customer_id}/search/portals/{portal_id}'
344
+ self.type = 'jobs'
345
+
346
+ try:
347
+ self._args['customer_id'] = self._conditions['customer_id']
348
+ del self._conditions['customer_id']
349
+ except (KeyError, AttributeError) as exc:
350
+ raise ValueError(
351
+ "ICIMS: Missing Customer ID"
352
+ ) from exc
353
+
354
+ try:
355
+ self._args['portal_id'] = self._conditions['portal_id']
356
+ del self._conditions['portal_id']
357
+ except (KeyError, AttributeError) as exc:
358
+ raise ValueError(
359
+ "ICIMS: Missing Portal ID"
360
+ ) from exc
361
+
362
+ try:
363
+ self._result = await self.query()
364
+ return self._result
365
+ except Exception as err:
366
+ logging.exception(err)
367
+ raise
368
+
369
+ async def job(self):
370
+ """jobs
371
+
372
+ Get a job by id for a given customer in a portal.
373
+ """
374
+ self.url = self.url + 'customers/{customer_id}/portals/{portal_id}/{job_id}'
375
+ self.type = 'job'
376
+
377
+ try:
378
+ self._args['customer_id'] = self._conditions['customer_id']
379
+ del self._conditions['customer_id']
380
+ except (KeyError, AttributeError):
381
+ raise ValueError("ICIMS: Missing Customer ID")
382
+
383
+ try:
384
+ self._args['portal_id'] = self._conditions['portal_id']
385
+ del self._conditions['portal_id']
386
+ except (KeyError, AttributeError):
387
+ raise ValueError("ICIMS: Missing Portal ID")
388
+
389
+ try:
390
+ self._args['job_id'] = self._conditions['job_id']
391
+ del self._conditions['job_id']
392
+ except (KeyError, AttributeError):
393
+ raise ValueError("ICIMS: Missing Job ID")
394
+
395
+ try:
396
+ self._result = await self.query()
397
+ return self._result
398
+ except Exception as err:
399
+ logging.exception(err)
400
+ raise
401
+
402
+ async def jobs_filters(self):
403
+ """jobs filters
404
+
405
+ Get a all jobs filters for a given customer in a portal.
406
+ """
407
+ self.url = self.url + 'customers/{customer_id}/search/portals/{portal_id}/filters'
408
+ self.type = 'jobs_filters'
409
+
410
+ try:
411
+ self._args['customer_id'] = self._conditions['customer_id']
412
+ del self._conditions['customer_id']
413
+ except (KeyError, AttributeError):
414
+ raise ValueError("ICIMS: Missing Customer ID")
415
+
416
+ try:
417
+ self._args['portal_id'] = self._conditions['portal_id']
418
+ del self._conditions['portal_id']
419
+ except (KeyError, AttributeError):
420
+ raise ValueError("ICIMS: Missing Portal ID")
421
+
422
+ try:
423
+ self._result = await self.query()
424
+ return self._result
425
+ except Exception as err:
426
+ logging.exception(err)
427
+ raise
428
+
429
+ async def get_next_result(self, result, resource):
430
+ """get next result
431
+
432
+ Get the next pages of a given resource.
433
+ """
434
+ self.headers['Content-Type'] = 'application/json'
435
+ r = result['searchResults']
436
+ next = True
437
+ limit = 1
438
+ current = 0
439
+ while next is True and (current < limit or self._is_test is not True):
440
+ current += 1
441
+ print('Fetching next result, page:', current)
442
+ last_id = r[-1]['id']
443
+ data = {
444
+ 'filters': [
445
+ {
446
+ 'name': resource + '.id',
447
+ 'value': [
448
+ str(last_id)
449
+ ],
450
+ 'operator': '>'
451
+ },
452
+ ]
453
+ }
454
+ data = json_encoder(data)
455
+ try:
456
+ res, error = await self.request(self.url, method='POST', data=data)
457
+ if error:
458
+ print('ICIMS: Error: Error getting next result', error)
459
+ next = False
460
+ break
461
+ if 'searchResults' in res and len(res['searchResults']) > 0:
462
+ r = r + res['searchResults']
463
+ else:
464
+ next = False
465
+ break
466
+ except Exception as err:
467
+ print(err)
468
+ next = False
469
+ del self.headers['Content-Type']
470
+ return r
471
+
472
+ async def get_next_result_v2(self, result):
473
+ """get next result
474
+
475
+ Get the next pages of a given stream data subscription.
476
+ """
477
+ r = result['events']
478
+ next = True
479
+ limit = 1
480
+ current = 0
481
+ while next is True and (current < limit or self._is_test is not True):
482
+ current += 1
483
+ print('Fetching next result, page:', current)
484
+ if 'lastEvaluatedKey' in result and result['lastEvaluatedKey'] != '':
485
+ last_id = result['lastEvaluatedKey']
486
+ else:
487
+ break
488
+ self._conditions['exclusiveStartKey'] = last_id
489
+ try:
490
+ res, error = await self.request(self.url)
491
+ if error:
492
+ print('ICIMS: Error: Error getting next result', error)
493
+ next = False
494
+ break
495
+ if 'events' in res and len(res['events']) > 0:
496
+ r = r + res['events']
497
+ else:
498
+ next = False
499
+ break
500
+ except Exception as err:
501
+ print(err)
502
+ next = False
503
+ if 'exclusiveStartKey' in self._conditions:
504
+ del self._conditions['exclusiveStartKey']
505
+ return r
506
+
507
+ async def process_result_list(self, result, resource, resource_url):
508
+ """process result list
509
+
510
+ Process results list and get each item details.
511
+ """
512
+ r = list()
513
+ next = True
514
+ limit = 3
515
+ current = 0
516
+ while next is True and (current < limit or self._is_test is not True):
517
+ print('Fetching next item:', current)
518
+ try:
519
+ id = result[current]['id']
520
+ self._args[resource + '_id'] = id
521
+ url = self.original_url + resource_url
522
+ url = self.build_url(url, args=self._args)
523
+ res, error = await self.request(url, method='GET')
524
+ if error:
525
+ print('ICIMS: Error: Error getting next item', error)
526
+ next = False
527
+ break
528
+ if 'errors' in res:
529
+ next = False
530
+ break
531
+ res['id'] = id
532
+ r.append(res)
533
+
534
+ except Exception as err:
535
+ print(err)
536
+ next = False
537
+ current += 1
538
+ return r
539
+
540
+ # Stream API
541
+
542
+ async def stream_ids(self):
543
+ """stream ids
544
+
545
+ Get the stream ids.
546
+ """
547
+
548
+ str_len = len('{customer_id}/')
549
+ self.url = self.stream_url[:-str_len]
550
+
551
+ try:
552
+ self._result = await self.query()
553
+ return self._result
554
+ except Exception as err:
555
+ logging.exception(err)
556
+ raise
557
+
558
+ async def stream_subscriptions(self):
559
+ """stream subscriptions
560
+
561
+ Get the subscription stream ids for a given customer.
562
+ """
563
+ self.url = self.stream_url
564
+ self.url = self.url + 'subscriptions'
565
+
566
+ try:
567
+ self._args['customer_id'] = self._conditions['customer_id']
568
+ del self._conditions['customer_id']
569
+ except (KeyError, AttributeError):
570
+ raise ValueError("ICIMS: Missing Customer ID")
571
+
572
+ try:
573
+ self._result = await self.query()
574
+ return self._result
575
+ except Exception as err:
576
+ logging.exception(err)
577
+ raise
578
+
579
+ async def stream_data(self):
580
+ """stream data
581
+
582
+ Get a subscription stream data by subscription id.
583
+ """
584
+ self.url = self.stream_url
585
+ self.url = self.url + 'subscriptions/{subscription_id}/events'
586
+
587
+ try:
588
+ self._args['subscription_id'] = self._conditions['subscription_id']
589
+ del self._conditions['subscription_id']
590
+ except (KeyError, AttributeError):
591
+ raise ValueError("ICIMS: Missing Subscription ID")
592
+
593
+ try:
594
+ self._args['customer_id'] = self._conditions['customer_id']
595
+ del self._conditions['customer_id']
596
+ except (KeyError, AttributeError):
597
+ raise ValueError("ICIMS: Missing Customer ID")
598
+
599
+ try:
600
+ self._result = await self.query()
601
+ return self._result
602
+ except Exception as err:
603
+ logging.exception(err)
604
+ raise
605
+
606
+ async def query(self, url: str = None, params: dict = {}):
607
+ """Query.
608
+
609
+ Basic Query of ICIMS API.
610
+ """
611
+ self._result = None
612
+ if url:
613
+ self.url = self.build_url(url, queryparams=urlencode(params))
614
+ # get the credentials
615
+ try:
616
+ # TODO Refactor this to call the token only when its stream api
617
+ if self._legacy_call is False:
618
+ jwt = await self.get_token()
619
+ self.setup_bearer_token_request(jwt)
620
+ else:
621
+ self.setup_legacy_request()
622
+ except Exception as err:
623
+ print(err)
624
+ logging.error(
625
+ f'ICIMS: Error getting token: {err!s}'
626
+ )
627
+ raise
628
+ try:
629
+ result = await super().query()
630
+ if self.type == 'jobs':
631
+ self._result = await self.get_next_result(result, 'job')
632
+ if self.type == 'people':
633
+ self._result = await self.get_next_result(result, 'person')
634
+ if self.type in ('forms'):
635
+ self._result = await self.get_next_result(result, 'forms')
636
+ if self.type == 'stream_data':
637
+ self._result = await self.get_next_result_v2(result)
638
+ elif self.type == 'forms_list':
639
+ self._result = result
640
+ elif self.type == 'form_data':
641
+ if 'errors' in result:
642
+ errors = []
643
+ for error in result['errors']:
644
+ message = f"{error['errorMessage']}, code: {error['errorCode']}"
645
+ raise OutputError(
646
+ message
647
+ )
648
+ try:
649
+ owner = result['owner']
650
+ result['associate_id'] = str(owner['id'])
651
+ result['full_name'] = owner['value']
652
+ result['customer_id'] = self.customer_id
653
+ result['form_data_id'] = self._args['form_data_id']
654
+ self._result = result
655
+ except KeyError as exc:
656
+ raise DataNotFound(
657
+ f"ICIMS: Invalid Form Data, {exc}"
658
+ ) from exc
659
+ if not self._result:
660
+ raise DataNotFound(
661
+ "ICIMS: No ICIMS data was found."
662
+ )
663
+ return self._result
664
+ except ReadTimeout as err:
665
+ logging.exception(f'ICIMS: Error: {err!s}')
666
+ raise
667
+ except Exception as err:
668
+ if 'Question (status) uses a name that is reserved in Web Services' in str(err):
669
+ # This Exception is usable for saving this data in error:
670
+ result = {}
671
+ result['form_data_id'] = self._args['form_data_id']
672
+ result['status'] = 'Failed'
673
+ result['customer_id'] = self.customer_id
674
+ result['completed_date'] = None
675
+ result['updated_date'] = None
676
+ self._result = result
677
+ return self._result
678
+ logging.error(f'ICIMS: Error: {err!s}')
679
+ raise