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
flowtask/tasks/pile.py ADDED
@@ -0,0 +1,486 @@
1
+ """
2
+ TaskPîle.
3
+ """
4
+ from numbers import Number
5
+ from typing import Any
6
+ from collections.abc import Callable
7
+ from functools import partial
8
+ from navconfig.logging import logging
9
+ from ..components import getComponent, GroupComponent
10
+ from ..exceptions import TaskDefinition, ComponentError
11
+
12
+ logging.getLogger("matplotlib").setLevel(logging.CRITICAL)
13
+ logging.getLogger("PIL").setLevel(logging.CRITICAL)
14
+
15
+ import networkx as nx # pylint: disable=C0411,C0413
16
+ import matplotlib.pyplot as plt # pylint: disable=C0411,C0413
17
+
18
+
19
+ class Step:
20
+ """Step.
21
+
22
+ Step is the basic component of a Task.
23
+ """
24
+
25
+ def __init__(
26
+ self, step_name: str, step_id: int, params: dict, program: str = None
27
+ ) -> None:
28
+ try:
29
+ self._component = getComponent(step_name, program=program)
30
+ except Exception as e:
31
+ logging.exception(e, stack_info=False)
32
+ raise ComponentError(
33
+ f"Step Error: Unable to load Component {step_name}: {e}"
34
+ ) from e
35
+ self.step_id = f"{step_name}_{step_id}"
36
+ self.step_name = step_name
37
+ self.params = params
38
+ self.job: Callable = None
39
+ self.depends: list = params.get('depends', [])
40
+ self.branch: dict = params.get("branch", {})
41
+
42
+ def get_depends(self, previous) -> Any:
43
+ if not self.depends:
44
+ return previous
45
+ else:
46
+ return self.depends
47
+
48
+ def __str__(self) -> str:
49
+ return f"<{self.step_id}>: {self.params!r}"
50
+
51
+ def __repr__(self) -> str:
52
+ return f"<{self.step_id}>: {self.params!r}"
53
+
54
+ @property
55
+ def name(self):
56
+ return self.step_id
57
+
58
+ @property
59
+ def component(self):
60
+ return self._component
61
+
62
+
63
+ class GroupStep(Step):
64
+ def __init__(
65
+ self, step_name: str, step_id: int, params: dict, program: str = None
66
+ ) -> None:
67
+ try:
68
+ self._component = GroupComponent
69
+ except Exception as e:
70
+ logging.exception(e, stack_info=False)
71
+ raise ComponentError(
72
+ f"Step Error: Unable to load Group Component {step_name}: {e}"
73
+ ) from e
74
+ self.step_idx = step_id
75
+ self.step_id = f"{step_name}_{step_id}"
76
+ self.step_name = step_name
77
+ self.params = params
78
+ self.job: Callable = None
79
+ self.depends: list = []
80
+ self._steps: list = []
81
+ try:
82
+ self.depends = params["depends"]
83
+ except KeyError:
84
+ pass
85
+
86
+ def add_step(self, step) -> None:
87
+ self._steps.append(step)
88
+
89
+ @property
90
+ def component(self):
91
+ return partial(self._component, component_list=self._steps)
92
+
93
+ @property
94
+ def steps(self):
95
+ return self._steps
96
+
97
+
98
+ class TaskPile:
99
+ """
100
+ TaskPile is responsible for parsing a task definition (in JSON/YAML/TOML format)
101
+ and converting it into a sequence of components, constructing a dependency graph
102
+ for orderly execution.
103
+
104
+ This class manages the following:
105
+
106
+ - Parsing a task, which consists of multiple steps, each step representing a component
107
+ that performs a specific action (e.g., data transformation, database query).
108
+ - Creating a directed acyclic graph (DAG) to represent the dependencies between the
109
+ components, ensuring that each component is executed in the correct order.
110
+ - Handling grouping of components, where a group can contain multiple steps, providing
111
+ a way to organize related tasks.
112
+ - Verifying the task's structure to ensure that it forms a valid DAG, raising an error
113
+ if any circular dependencies are detected.
114
+
115
+ Attributes:
116
+ ----------
117
+ task : dict
118
+ The task definition containing details of all steps.
119
+ program : str, optional
120
+ The name of the program associated with the task, used to define context.
121
+ _size : int
122
+ The total number of steps in the task.
123
+ _graph : networkx.DiGraph
124
+ A directed graph representing the dependencies between task steps.
125
+ _task : list
126
+ A list storing components of the task in the order of execution.
127
+ _groups : dict
128
+ A dictionary to manage groups of steps, allowing for easier organization and reuse.
129
+
130
+ Methods:
131
+ -------
132
+ build():
133
+ Compiles the task steps into a sequence of components and creates the dependency graph.
134
+ """
135
+
136
+ def __init__(self, task: dict, program: str = None):
137
+ self._size: int = 0
138
+ self._n = 0
139
+ self.task: dict = task
140
+ self._task: list = [] # List of Steps components
141
+ self.__name__ = self.task["name"]
142
+ self._program: str = program
143
+ self._groups: dict = {}
144
+ try:
145
+ self._steps: list = task["steps"]
146
+ except KeyError as e:
147
+ raise TaskDefinition("Task Error: This task has no Steps.") from e
148
+ self._step = None
149
+ self._graph = nx.DiGraph(task=self.__name__) # creates an empty Graph
150
+ self.build()
151
+
152
+ def _build_group(self, group: GroupStep, group_name: str, counter: int, params: dict):
153
+ """Builds the group of steps.
154
+
155
+ """
156
+ # Iterate through self._steps to find all steps with the matching "Group" name
157
+ new_count = 1
158
+ for j, inner_step in enumerate(self._steps):
159
+ if j in self._added_to_group:
160
+ continue # Skip if this step is already added to another group
161
+ for step_name, step_params in inner_step.items():
162
+ if step_params.get("Group") == group_name:
163
+ # create the step:
164
+ sp = Step(
165
+ step_name,
166
+ f"{counter}_{new_count}",
167
+ step_params,
168
+ program=self._program
169
+ )
170
+ # add the step to the group:
171
+ group.add_step(sp)
172
+ # Mark this step as processed
173
+ self._added_to_group.add(j)
174
+ new_count += 1
175
+ # When group is filled, added to the task:
176
+ if not group.steps: # Check if no steps were added to the group
177
+ raise ValueError(
178
+ f"Task Error: Group '{group_name}' was defined but has no matching steps."
179
+ )
180
+ self._groups[group_name] = group
181
+ s = {"task_id": f"{group_name}_{counter}", "step": group}
182
+ self._graph.add_node(group.name, attrs=params)
183
+ self._task.append(s)
184
+
185
+ def build(self):
186
+ counter = 1
187
+ # Set to keep track of steps already processed in a group
188
+ self._added_to_group = set()
189
+ next_component = None
190
+
191
+ for i, step in enumerate(self._steps):
192
+ for step_name, params in step.items():
193
+ # Skip if this step has already been added to a group
194
+ if i in self._added_to_group:
195
+ continue
196
+
197
+ # Handle branching if the previous component provided a branch
198
+ if next_component and step_name != next_component:
199
+ continue
200
+
201
+ # Reset branching after processing the step
202
+ next_component = None
203
+
204
+ # Check if this step is a Parent Group:
205
+ if "to_group" in params:
206
+ # Create the Group:
207
+ group_name = params["to_group"]
208
+
209
+ # Step 1: Add the parent component (like PandasIterator) to the task
210
+ try:
211
+ cp = Step(step_name, counter, params, program=self._program)
212
+ s = {"task_id": f"{step_name}_{counter}", "step": cp}
213
+ self._graph.add_node(cp.name, attrs=params)
214
+ self._task.append(s)
215
+ counter += 1
216
+ except Exception as e:
217
+ raise ComponentError(
218
+ f"Task Error: Error loading Component: {e}"
219
+ ) from e
220
+
221
+ # Step 2: Check if Group Task already exists
222
+ if group_name in self._groups: # already exists:
223
+ raise ValueError(
224
+ f"Task Error: Group '{group_name}' defined in step '{step_name}' already exists."
225
+ )
226
+ # Step 3: Creating the Group
227
+ gs = GroupStep(
228
+ group_name, counter, params={}, program=self._program
229
+ )
230
+ # Step 4: Build the Group
231
+ self._build_group(gs, group_name, counter, params)
232
+ # Move to the next step after processing the group
233
+ counter += 1
234
+ continue
235
+ try:
236
+ cp = Step(
237
+ step_name,
238
+ counter,
239
+ params,
240
+ program=self._program
241
+ )
242
+ s = {"task_id": f"{step_name}_{counter}", "step": cp}
243
+ except Exception as e:
244
+ raise ComponentError(
245
+ f"Task Error: Error loading Component: {e}"
246
+ ) from e
247
+ counter += 1
248
+ prev = None
249
+ try:
250
+ prev = self._task[-1]
251
+ except IndexError:
252
+ pass
253
+ self._graph.add_node(cp.name, attrs=params)
254
+ self._task.append(s)
255
+ # calculate dependencies:
256
+ depends = cp.get_depends(prev)
257
+ if isinstance(depends, dict):
258
+ self._graph.add_edge(depends["task_id"], cp.name)
259
+ elif isinstance(depends, list):
260
+ # TODO: making calculation of edges.
261
+ pass
262
+ # size of the Pile of Components
263
+ self._size = len(self._task)
264
+ # check if Task is a DAG:
265
+ if nx.is_directed_acyclic_graph(self._graph) is False:
266
+ raise TaskDefinition(
267
+ "Task Error: This task is not an Acyclic Graph."
268
+ )
269
+
270
+ def __len__(self):
271
+ return len(self._steps)
272
+
273
+ def __del__(self):
274
+ del self._steps
275
+
276
+ # Iterators:
277
+ def __iter__(self):
278
+ self._n = 0
279
+ self._step = self._task[0]["step"]
280
+ return self
281
+
282
+ def __next__(self):
283
+ if self._n < self._size:
284
+ try:
285
+ result = self._task[self._n]["step"]
286
+ except IndexError as e:
287
+ raise StopIteration from e
288
+ self._step = result
289
+ self._n += 1
290
+ return self
291
+ else:
292
+ self._step = None
293
+ raise StopIteration
294
+
295
+ # Get properties of the Step
296
+ @property
297
+ def name(self):
298
+ return self._step.name
299
+
300
+ @property
301
+ def component(self):
302
+ return self._step.component
303
+
304
+ @property
305
+ def step(self):
306
+ return self._step.step_name
307
+
308
+ def params(self):
309
+ return self._step.params
310
+
311
+ ## Component Properties
312
+ def getStepByID(self, task_id):
313
+ return self._task[task_id]
314
+
315
+ def delStep(self, task_id):
316
+ del self._task[task_id]
317
+
318
+ def delStepByName(self, name):
319
+ for i, obj in enumerate(self._task):
320
+ if obj.get("task_id") == name:
321
+ del self._task[i]
322
+ break
323
+
324
+ def getStep(self, name):
325
+ obj = next((item for item in self._task if item["task_id"] == name), None)
326
+ if obj:
327
+ self._step = obj
328
+ return self
329
+
330
+ def getStepByName(self, name):
331
+ idx = next(
332
+ (i for i, item in enumerate(self._task) if item["task_id"] == name), None
333
+ )
334
+ if idx != -1:
335
+ self._step = self._task[idx]["step"]
336
+ return [self, idx]
337
+
338
+ def nextStep(self, name):
339
+ idx = next(
340
+ (i for i, item in enumerate(self._task) if item["task_id"] == name), None
341
+ )
342
+ if idx != -1:
343
+ i = idx + 1
344
+ self._step = self._task[i]["step"]
345
+ return [self, i]
346
+
347
+ def popStep(self, name, n: int = 1):
348
+ idx = next(
349
+ (i for i, item in enumerate(self._task) if item["task_id"] == name), None
350
+ )
351
+ if idx is not None and idx + (1 + n) < len(self._task):
352
+ i = idx + (1 + n)
353
+ removed_element = self._task.pop(i)
354
+ return [removed_element["step"], i]
355
+ return None
356
+
357
+ def setStep(self, step):
358
+ self._step.job = step
359
+
360
+ def getDepends(self, previous=None):
361
+ depends = self._step.depends
362
+ if not depends:
363
+ return previous
364
+ else:
365
+ if isinstance(depends, Number):
366
+ try:
367
+ obj = self._task[depends]
368
+ return obj["job"]
369
+ except (KeyError, IndexError):
370
+ task = self._step["task"]
371
+ logging.error(
372
+ f"Task Error: invalid Step index {depends} on task name {task}"
373
+ )
374
+ return None
375
+ elif isinstance(depends, list):
376
+ # list of depends
377
+ obj = []
378
+ for d in depends:
379
+ o = next(
380
+ (item for item in self._task if item["task_id"] == d), None
381
+ )
382
+ if o:
383
+ component = o["step"]
384
+ obj.append(component.job)
385
+ return obj
386
+ else:
387
+ # is a string, this is the task id
388
+ obj = next(
389
+ (item for item in self._task if item["task_id"] == depends), None
390
+ )
391
+ if obj:
392
+ component = obj["step"]
393
+ return component.job
394
+
395
+ def plot_task(self, filename: str = None):
396
+ plt.figure(figsize=(24, 16))
397
+
398
+ # Use the spring layout with modified parameters for better distribution
399
+ pos = nx.spring_layout(
400
+ self._graph,
401
+ k=1.2,
402
+ iterations=100
403
+ )
404
+
405
+ first_node = self._task[0]["task_id"]
406
+
407
+ # Draw the first node (starting point) with special attributes
408
+ nx.draw_networkx_nodes(
409
+ self._graph,
410
+ pos,
411
+ nodelist=[first_node],
412
+ node_color='blue',
413
+ node_size=1200, # Increase the size of the first node
414
+ edgecolors='black',
415
+ linewidths=2
416
+ )
417
+
418
+ # Draw the rest of the nodes (other steps)
419
+ other_nodes = [n for n in self._graph.nodes() if n != first_node]
420
+ nx.draw_networkx_nodes(
421
+ self._graph,
422
+ pos,
423
+ nodelist=other_nodes,
424
+ node_color='lightblue',
425
+ node_size=800,
426
+ edgecolors='black',
427
+ linewidths=1.5
428
+ )
429
+
430
+ # Draw the edges between the nodes with improved thickness and arrow size
431
+ nx.draw_networkx_edges(
432
+ self._graph,
433
+ pos,
434
+ edgelist=self._graph.edges(),
435
+ width=2, # Make the edges thicker
436
+ arrowstyle='-|>', # Change arrow style
437
+ arrowsize=25, # Increase the size of arrows
438
+ edge_color='gray'
439
+ )
440
+
441
+ # Draw labels for the nodes
442
+ nx.draw_networkx_labels(
443
+ self._graph,
444
+ pos,
445
+ labels={n: n for n in self._graph.nodes()},
446
+ font_size=12, # Slightly increase font size
447
+ font_color='black'
448
+ )
449
+
450
+ # Add title for the task graph
451
+ plt.title(
452
+ f"Task Workflow: {self.__name__}",
453
+ fontsize=18
454
+ )
455
+
456
+ # Save the graph to a file
457
+ if not filename:
458
+ filename = f"task_{self.__name__}.png"
459
+ plt.savefig(filename, format="PNG", dpi=300)
460
+ plt.clf()
461
+
462
+ @staticmethod
463
+ def from_task_pile(
464
+ task_pile: list,
465
+ name: str = "Generated TaskPile",
466
+ program: str = None
467
+ ) -> "TaskPile":
468
+ """
469
+ Creates a TaskPile instance from a pre-defined task_pile list.
470
+
471
+ Args:
472
+ task_pile (list): A list of dictionaries, each representing a task with `task_id` and `step`.
473
+ name (str): Name for the generated task pile. Defaults to "Generated TaskPile".
474
+ program (str): Optional program context for the task pile.
475
+
476
+ Returns:
477
+ TaskPile: An instance of the TaskPile class.
478
+ """
479
+ task = {
480
+ "name": name,
481
+ "steps": [
482
+ {step["step"]: {"task_id": step["task_id"]}}
483
+ for step in task_pile
484
+ ]
485
+ }
486
+ return TaskPile(task, program=program)
File without changes