flowtask 5.8.4__cp312-cp312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
  377. flowtask/parsers/json.c +11968 -0
  378. flowtask/parsers/json.cpython-312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
  440. flowtask/utils/json.cpp +13349 -0
  441. flowtask/utils/json.cpython-312-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-312-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,244 @@
1
+ from typing import Any
2
+ from datetime import datetime, timedelta
3
+ from urllib.parse import urlencode
4
+ import pytz
5
+ from navconfig.logging import logging
6
+ from asyncdb.exceptions import NoDataFound
7
+ from querysource.exceptions import DataNotFound
8
+ from querysource.providers.sources import restSource
9
+
10
+
11
+ class venu(restSource):
12
+ """VenU.
13
+
14
+ Get all information from VenU API
15
+ """
16
+ base_url: str = 'https://{main_url}/lms/datacore/api/GET/{endpoint}/'
17
+
18
+ def __post_init__(
19
+ self,
20
+ definition: dict = None,
21
+ conditions: dict = None,
22
+ request: Any = None,
23
+ **kwargs
24
+ ) -> None:
25
+ self._headers['Content-Type'] = 'application/x-www-form-urlencoded'
26
+ self.method = 'get'
27
+ if 'main_url' in self._conditions:
28
+ conditions['main_url'] = self._conditions['main_url']
29
+ del self._conditions['main_url']
30
+ else:
31
+ conditions['main_url'] = self._env.get('VENU_BASE_URL')
32
+ if not conditions['main_url']:
33
+ try:
34
+ conditions['main_url'] = definition.params['main_url']
35
+ except (ValueError, AttributeError) as ex:
36
+ raise ValueError("VenU: Missing Base URL") from ex
37
+ self.url = 'https://{main_url}/lms/datacore/api/GET/{endpoint}/'
38
+ # Credentials
39
+ if 'username' in self._conditions:
40
+ self._user = self._conditions['username']
41
+ del self._conditions['username']
42
+ else:
43
+ self._user = self._env.get('VENU_USERNAME')
44
+ if not self._user:
45
+ try:
46
+ self._user = definition.params['username']
47
+ except (ValueError, AttributeError) as ex:
48
+ raise ValueError("VenU: Missing UserName") from ex
49
+
50
+ if 'password' in self._conditions:
51
+ self._pwd = self._conditions['password']
52
+ del self._conditions['password']
53
+ else:
54
+ self._pwd = self._env.get('VENU_PASSWORD')
55
+ if not self._pwd:
56
+ try:
57
+ self._pwd = definition.params['password']
58
+ except (ValueError, AttributeError):
59
+ raise ValueError("VenU: Missing Password")
60
+
61
+ #Delta Timestamp
62
+ try:
63
+ print('>>>', self._conditions)
64
+ if 'delta_timestamp' in self._conditions:
65
+ tz = pytz.timezone('America/New_York')
66
+ dt = datetime.strptime(self._conditions['delta_timestamp'], "%Y-%m-%dT%H:%M:%S")
67
+ dt = tz.localize(dt, is_dst=None)
68
+ self._conditions['delta_timestamp'] = int((dt - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds())
69
+ self._conditions['delta_timestamp']
70
+ #else:
71
+ # self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
72
+ except Exception as err:
73
+ logging.error(
74
+ f"VenU API: wrong date format: {err}"
75
+ )
76
+ raise ValueError(
77
+ f"VenU: Wrong Date Format: {err}"
78
+ ) from err
79
+
80
+ try:
81
+ self.type = definition.params['type']
82
+ except (ValueError, AttributeError):
83
+ self.type = None
84
+ if 'type' in self._conditions:
85
+ self.type = self._conditions['type']
86
+ del self._conditions['type']
87
+
88
+ if self.type == 'users':
89
+ if 'delta_timestamp' in self._conditions:
90
+ del self._conditions['delta_timestamp']
91
+ if 'report_type' in self._conditions:
92
+ self._conditions['reportType'] = self._conditions['report_type']
93
+ else:
94
+ self._conditions['reportType'] = 'UserAPI'
95
+ if 'is_employee' in self._conditions:
96
+ self._conditions['u_isemployee'] = self._conditions['is_employee']
97
+ if 'user_status' in self._conditions:
98
+ self._conditions['userstatus'] = self._conditions['user_status']
99
+ conditions['endpoint'] = 'User'
100
+ if self.type == 'curriculum_list':
101
+ conditions['endpoint'] = 'CurriculumList'
102
+ if self.type == 'curriculum_assignments':
103
+ if not 'delta_timestamp' in self._conditions:
104
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
105
+ conditions['endpoint'] = 'CurriculumAssignments'
106
+ if self.type == 'curriculum_assignments_removed':
107
+ if not 'delta_timestamp' in self._conditions:
108
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
109
+ conditions['endpoint'] = 'CurriculumAssignmentsRemoved'
110
+ if self.type == 'course_list':
111
+ conditions['endpoint'] = 'CourseList'
112
+ if self.type == 'course_enrollments':
113
+ if not 'delta_timestamp' in self._conditions:
114
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
115
+ conditions['endpoint'] = 'CourseEnrollments'
116
+ if self.type == 'course_enrollments_removed':
117
+ if not 'delta_timestamp' in self._conditions:
118
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
119
+ conditions['endpoint'] = 'CourseEnrollmentsRemoved'
120
+ if self.type == 'course_template_list':
121
+ conditions['endpoint'] = 'CourseTemplateList'
122
+
123
+ # set parameters
124
+ self._args = conditions
125
+
126
+ async def users(self):
127
+ """users.
128
+
129
+ Get All Users.
130
+ """
131
+ if 'delta_timestamp' in self._conditions:
132
+ del self._conditions['delta_timestamp']
133
+ if 'report_type' in self._conditions:
134
+ self._conditions['reportType'] = self._conditions['report_type']
135
+ else:
136
+ self._conditions['reportType'] = 'UserAPI'
137
+ if 'is_employee' in self._conditions:
138
+ self._conditions['u_isemployee'] = self._conditions['is_employee']
139
+ if 'user_status' in self._conditions:
140
+ self._conditions['userstatus'] = self._conditions['user_status']
141
+ self._args['endpoint'] = 'User'
142
+ self._result = await self.query()
143
+ return self._result
144
+
145
+ async def curriculum_list(self):
146
+ """curriculum_list.
147
+
148
+ Get the Curriculum List.
149
+ """
150
+ self._args['endpoint'] = 'CurriculumList'
151
+ self._result = await self.query()
152
+ return self._result
153
+
154
+ async def curriculum_assignments(self):
155
+ """curriculum_assignments.
156
+
157
+ Get the Curriculum Assignments.
158
+ """
159
+ if not 'delta_timestamp' in self._conditions:
160
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
161
+ self._args['endpoint'] = 'CurriculumAssignments'
162
+ self._result = await self.query()
163
+ return self._result
164
+
165
+ async def curriculum_assignments_removed(self):
166
+ """curriculum_assignments_removed.
167
+
168
+ Get the Curriculum Assignments Removed.
169
+ """
170
+ if not 'delta_timestamp' in self._conditions:
171
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
172
+ self._args['endpoint'] = 'CurriculumAssignmentsRemoved'
173
+ self._result = await self.query()
174
+ return self._result
175
+
176
+ async def course_list(self):
177
+ """course_list.
178
+
179
+ Get the Course List.
180
+ """
181
+ self._args['endpoint'] = 'CourseList'
182
+ self._result = await self.query()
183
+ return self._result
184
+
185
+ async def course_enrollments(self):
186
+ """course_enrollments.
187
+
188
+ Get the Course Enrollments.
189
+ """
190
+ if not 'delta_timestamp' in self._conditions:
191
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
192
+ self._args['endpoint'] = 'CourseEnrollments'
193
+ self._result = await self.query()
194
+ return self._result
195
+
196
+ async def course_enrollments_removed(self):
197
+ """course_enrollments_removed.
198
+
199
+ Get the Course Enrollments Removed.
200
+ """
201
+ if not 'delta_timestamp' in self._conditions:
202
+ self._conditions['delta_timestamp'] = (datetime.now() - timedelta(days = 14)).strftime('%s')
203
+ self._args['endpoint'] = 'CourseEnrollmentsRemoved'
204
+ self._result = await self.query()
205
+ return self._result
206
+
207
+ async def course_template_list(self):
208
+ """course_template_list.
209
+
210
+ Get the Course Template List.
211
+ """
212
+ self._args['endpoint'] = 'CourseTemplateList'
213
+ self._result = await self.query()
214
+ return self._result
215
+
216
+ async def query(self):
217
+ """
218
+ Query.
219
+ Basic Query of VenU API.
220
+ """
221
+ self._result = None
222
+ # create URL
223
+ self.url = self.build_url(
224
+ self.url,
225
+ args=self._args,
226
+ queryparams=urlencode(self._conditions)
227
+ )
228
+ result = []
229
+ try:
230
+ result, error = await self.request(
231
+ self.url,
232
+ self.method
233
+ )
234
+ if error is not None:
235
+ logging.error(f'VenU: Error: {error!s}')
236
+ elif not result['Data']:
237
+ raise DataNotFound('VenU: No data was found')
238
+ else:
239
+ self._result = result['Data']
240
+ return self._result
241
+ except (DataNotFound, NoDataFound) as err:
242
+ raise DataNotFound('VenU: No data was found')
243
+ except Exception as err:
244
+ logging.error(f'VenU: Error: {err!s}')
@@ -0,0 +1,314 @@
1
+ import json
2
+ import logging
3
+ import rapidjson
4
+ import aiohttp
5
+ import pytz
6
+ from datetime import datetime
7
+ from .rest import restSource
8
+ from querysource.exceptions import *
9
+
10
+
11
+ class vocinity(restSource):
12
+ """
13
+ Vocinity
14
+ Getting Data from Vocinity servers.
15
+ """
16
+
17
+ base_url: str = 'https://api.vocinity.com'
18
+ login_url = 'https://api.vocinity.com/public/auth/login'
19
+ _token_type: str = 'Bearer'
20
+ _saved_token: str = 'navigator_vocinity_token'
21
+ pagination: int = 100
22
+ caching: bool = True # this component uses Redis
23
+
24
+ def __init__(self, definition=None, params: dict = {}, **kwargs):
25
+ self._token: str = None
26
+ self._expiration = 3600
27
+ super(vocinity, self).__init__(definition, params, **kwargs)
28
+
29
+ try:
30
+ self.type = definition.params['type']
31
+ except (ValueError, AttributeError, KeyError):
32
+ self.type = None
33
+
34
+ try:
35
+ self.type = self._params['type']
36
+ del self._params['type']
37
+ except (ValueError, AttributeError, KeyError):
38
+ pass
39
+
40
+ try:
41
+ self.pagination = self._params['pagination']
42
+ del self._params['pagination']
43
+ except (KeyError, AttributeError):
44
+ pass
45
+
46
+ if 'type' in params:
47
+ self.type = params['type']
48
+ del params['type']
49
+
50
+ # Credentials
51
+ if 'email' in self._params:
52
+ self.email = self._params['email']
53
+ del self._params['email']
54
+ else:
55
+ self.email = self._env.get('VOCINITY_EMAIL')
56
+ if not self.email:
57
+ try:
58
+ self.email = definition.params['email']
59
+ except (ValueError, AttributeError):
60
+ raise ValueError("Vocinity: Missing Email")
61
+
62
+ if 'password' in self._params:
63
+ self.password = self._params['password']
64
+ del self._params['password']
65
+ else:
66
+ self.password = self._env.get('VOCINITY_PASSWORD')
67
+ if not self.password:
68
+ try:
69
+ self.password = definition.params['password']
70
+ except (ValueError, AttributeError):
71
+ raise ValueError("Vocinity: Missing Password")
72
+
73
+ try:
74
+ self.agent = self._params['agent']
75
+ del self._params['agent']
76
+ except (ValueError, AttributeError, KeyError):
77
+ self.agent = None
78
+
79
+ if 'startdate' in self._params:
80
+ try:
81
+ tz = pytz.timezone('America/New_York')
82
+ dt1 = datetime.strptime(self._params['startdate'], "%Y-%m-%dT%H:%M:%S")
83
+ dt1 = tz.localize(dt1, is_dst=None)
84
+ self._params['startdate'] = dt1.strftime("%Y-%m-%dT%H:%M:%S")
85
+
86
+ # .replace(tzinfo=timezone.utc).isoformat()
87
+
88
+ dt2 = datetime.strptime(self._params['enddate'], "%Y-%m-%dT%H:%M:%S")
89
+ dt2 = tz.localize(dt2, is_dst=None)
90
+ self._params['enddate'] = dt2.strftime("%Y-%m-%dT%H:%M:%S")
91
+
92
+ self._startdate = self._params['startdate']
93
+ self._enddate = self._params['enddate']
94
+
95
+ # print('DATES: ', self._startdate, self._enddate)
96
+
97
+ except Exception as err:
98
+ logging.info("Vocinity API: wrong date format: {}".format(str(err)))
99
+ self._startdate = None
100
+ self._enddate = None
101
+ finally:
102
+ # remove unused conditions
103
+ try:
104
+ del self._params['startdate']
105
+ del self._params['enddate']
106
+ except (KeyError, ValueError, TypeError) as err:
107
+ pass
108
+
109
+ # set parameters
110
+ self._args = params
111
+
112
+ async def get_token(self):
113
+ result = None
114
+ # get the redis connection
115
+ try:
116
+ await self._redis.connection()
117
+ except Exception as err:
118
+ logging.exception(f'REST Vocinity error: {err!s}')
119
+ raise
120
+ # try if is saved on redis:
121
+ try:
122
+ result = await self._redis.get(self._saved_token)
123
+ if result:
124
+ data = rapidjson.loads(result)
125
+ logging.debug(':: Vocinity: Using credentials in Cache')
126
+ self._token = data['token']
127
+ return self._token
128
+ except Exception as err:
129
+ print(err)
130
+ logging.exception(f'Vocinity Redis Error: {err!s}')
131
+ raise
132
+ # else: get token from URL
133
+ data = {
134
+ "email": self.email,
135
+ "password": self.password
136
+ }
137
+ result = None
138
+ # getting the authentication token
139
+ # first: search in redis (with expiration)
140
+ timeout = aiohttp.ClientTimeout(total=self.timeout)
141
+ async with aiohttp.ClientSession() as session:
142
+ async with session.post(
143
+ self.login_url,
144
+ timeout=timeout,
145
+ data=data
146
+ ) as response:
147
+ if response.status == 200:
148
+ try:
149
+ result = await response.json()
150
+ data = await response.text()
151
+ # saving the token on redis with expiration:
152
+ self._token = result['token']
153
+ try:
154
+ status = await self._redis.setex(
155
+ self._saved_token,
156
+ data,
157
+ self._expiration
158
+ )
159
+ print('Token Saved?:', status)
160
+ except Exception as err:
161
+ print(err)
162
+ finally:
163
+ await self._redis.close()
164
+ return self._token
165
+ except Exception as e:
166
+ print(e)
167
+ b = await response.content.read()
168
+ result = b.decode("utf-8")
169
+ raise DriverError(f'Error: {result}')
170
+ else:
171
+ raise DriverError(f'Error: {response.text()}')
172
+
173
+ async def agents(self):
174
+ """
175
+ agents.
176
+ Returns a list of all agents from logged user.
177
+ """
178
+ self.method = 'GET'
179
+ self.data = None
180
+ self.url = self.base_url + '/agents'
181
+ try:
182
+ self._result = await self.query()
183
+ return self._result
184
+ except Exception as err:
185
+ logging.exception(err)
186
+ raise
187
+
188
+ async def conversation(self):
189
+ """
190
+ conversation.
191
+ Get the details of a conversation for a given sessionID.
192
+ """
193
+ if 'session_id' in self._params:
194
+ self.session_id = self._params['session_id']
195
+ else:
196
+ logging.exception('session_id not provided')
197
+ raise ValueError("session_id not provided")
198
+ self.method = 'GET'
199
+ self.data = None
200
+ self.url = self.base_url + '/agents/session/conversation?sessionID={}'.format(self.session_id)
201
+ del self._params['session_id']
202
+ try:
203
+ self._result = await self.query()
204
+ return self._result
205
+ except Exception as err:
206
+ logging.exception(err)
207
+ raise
208
+
209
+ async def conversations(self):
210
+ """
211
+ conversations.
212
+ Get the list of conversations.
213
+ """
214
+ if not self.agent:
215
+ try:
216
+ self.agent = self._params['agent']
217
+ del self._params['agent']
218
+ except (KeyError, ValueError):
219
+ logging.exception('Agent ID was not provided')
220
+ raise ValueError("Agent Id not provided")
221
+ self.method = 'POST'
222
+ self.headers['Content-Type'] = 'application/json'
223
+ self.url = self.base_url + '/agents/{}/conversations'.format(self.agent)
224
+ # getting filter dates:
225
+ self.data = {
226
+ 'identifier': self.agent,
227
+ "additional_attributes": ["tracker"],
228
+ 'start': 0,
229
+ 'length': self.pagination,
230
+ 'columns': [],
231
+ 'order': [],
232
+ 'search': {},
233
+ 'draw': 1
234
+ }
235
+ filters = {}
236
+ if self._startdate is not None:
237
+ filters = {
238
+ "startTime": {
239
+ "gte": self._startdate,
240
+ "lte": self._enddate
241
+ }
242
+ }
243
+ # if len(self._params) > 0:
244
+ # filters = {**filters, **self._params}
245
+ self.data['filters'] = filters
246
+ print('VOCINITY FILTER: ', self.data)
247
+ try:
248
+ self._result = await self.query()
249
+ return self._result
250
+ except Exception as err:
251
+ logging.exception(err)
252
+ raise
253
+
254
+ def setup_bearer_token_request(self, token):
255
+ # pass
256
+ self.auth_type = 'api_key'
257
+ self.auth = {'Authorization': 'Bearer {}'.format(token)}
258
+
259
+ async def query(self):
260
+ """
261
+ Query.
262
+ Basic Query of Vocinity API.
263
+ """
264
+ self._result = None
265
+ # initial connection
266
+ await self.prepare_connection()
267
+ # get the credentials
268
+ try:
269
+ jwt = await self.get_token()
270
+ self.setup_bearer_token_request(jwt)
271
+ except Exception as err:
272
+ print(err)
273
+ logging.error(f'Vocinity: Error getting token: {err!s}')
274
+ try:
275
+ if self.type == 'conversations':
276
+ # and other endpoints with pagination.
277
+ # pagination results:
278
+ result = []
279
+ print('Conversations URL', self.url)
280
+ while True:
281
+ print('Start at:', self.data['start'])
282
+ try:
283
+ data = json.dumps(self.data)
284
+ res, error = await self.request(self.url, method=self.method, data=data)
285
+ if error:
286
+ print(error)
287
+ break
288
+ if res['data'] == []:
289
+ break
290
+ result += res['data']
291
+ self.data['start'] += self.pagination
292
+ except Exception as err:
293
+ print('VO ', err)
294
+ logging.exception(err)
295
+ raise
296
+ self._result = result
297
+ return self._result
298
+ else:
299
+ data = json.dumps(self.data)
300
+ self._result, error = await self.request(self.url, method=self.method, data=data)
301
+ # print(self._result, error)
302
+ if error is not None:
303
+ # print(error)
304
+ logging.error(f'Vocinity: Error: {error!s}')
305
+ elif not self._result:
306
+ raise DataNotFound('Vocinity: No data was found')
307
+ else:
308
+ return self._result
309
+ except DataNotFound as err:
310
+ print(err)
311
+ raise
312
+ except Exception as err:
313
+ print(err)
314
+ logging.error(f'Vocinity: Error: {err!s}')