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,64 @@
1
+ from typing import Any, Union, List, Dict
2
+ import orjson
3
+ from pyecharts.charts import Pie
4
+ from borax.datasets.fetch import fetch
5
+ import pyecharts.options as opts
6
+ from .base import baseChart
7
+
8
+
9
+ class pieChart(baseChart):
10
+ rosetype: str = "radius"
11
+ formatter: str = "{b}: {c} / {d}%"
12
+
13
+ def __init__(self, title: str, data: Union[List, Dict], **kwargs):
14
+ if "rosetype" in kwargs:
15
+ self.rosetype = kwargs["rosetype"]
16
+ del kwargs["rosetype"]
17
+ super(pieChart, self).__init__(title, data, **kwargs)
18
+
19
+ def get_chart(self):
20
+ return Pie(init_opts=self.init_opts)
21
+
22
+ def set_chart(self, data: Any, title: str, **kwargs):
23
+ # x, y = Base.cast(o_data)
24
+ dst = self._encoder(data)
25
+ dst = orjson.loads(dst)
26
+ # print('DATA ', dst)
27
+ if isinstance(dst, dict):
28
+ names, values = zip(*dst.items())
29
+ else:
30
+ names, values = fetch(dst, *self._fields)
31
+ self.args["data_pair"] = [list(z) for z in zip(names, values)]
32
+ # add arguments:
33
+ self.chart.add(series_name="", **self.args).set_global_opts(
34
+ **self.get_global_opts(title, **kwargs)
35
+ ).set_series_opts(**self.get_series_opts(**kwargs))
36
+
37
+ def get_basic_args(self, **kwargs):
38
+ return {
39
+ "radius": "55%",
40
+ "center": ["50%", "50%"],
41
+ # "rosetype": self.rosetype
42
+ }
43
+
44
+ def get_series_opts(self, **kwargs):
45
+ return {
46
+ "label_opts": opts.LabelOpts(
47
+ position="outside",
48
+ # formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ",
49
+ formatter=self.formatter,
50
+ is_show=True,
51
+ )
52
+ }
53
+
54
+ def get_global_opts(self, title: str, **kwargs):
55
+ return {
56
+ "title_opts": opts.TitleOpts(
57
+ title=title,
58
+ pos_left="center",
59
+ pos_top="0",
60
+ ),
61
+ "legend_opts": opts.LegendOpts(
62
+ is_show=True, pos_left="center", pos_bottom="20"
63
+ ),
64
+ }
@@ -0,0 +1,9 @@
1
+ """ Utilities and Functions."""
2
+ from aiohttp import TCPConnector, ClientSession
3
+
4
+
5
+ async def get_json_data(url: str) -> dict:
6
+ """Get a JSON data from a remote Source."""
7
+ async with ClientSession(connector=TCPConnector(ssl=False)) as session:
8
+ async with session.get(url=url) as response:
9
+ return await response.json()
@@ -0,0 +1,196 @@
1
+ from collections.abc import Callable
2
+ import asyncio
3
+ from typing import Any
4
+ # Bot Infraestructure:
5
+ from parrot.bots.basic import BasicBot
6
+ from .flow import FlowComponent
7
+ from ..exceptions import ComponentError, ConfigError
8
+ from ..conf import TASK_STORAGES
9
+
10
+ class CustomerSatisfaction(FlowComponent):
11
+ """
12
+ CustomerSatisfaction
13
+
14
+ Overview
15
+
16
+ The CustomerSatisfaction class is a component for interacting with an IA Agent for making Customer Satisfaction Analysis.
17
+ It extends the FlowComponent class.
18
+
19
+ .. table:: Properties
20
+ :widths: auto
21
+
22
+ +------------------+----------+--------------------------------------------------------------------------------------------------+
23
+ | Name | Required | Description |
24
+ +------------------+----------+--------------------------------------------------------------------------------------------------+
25
+ | output_column | Yes | Column for saving the Customer Satisfaction information. |
26
+ +------------------+----------+--------------------------------------------------------------------------------------------------+
27
+ Return
28
+
29
+ A Pandas Dataframe with the Customer Satisfaction statistics.
30
+
31
+
32
+
33
+ Example:
34
+
35
+ ```yaml
36
+ CustomerSatisfaction:
37
+ llm:
38
+ name: VertexLLM
39
+ model_name: gemini-1.5-pro
40
+ temperature: 0.4
41
+ review_column: review
42
+ product_column: product_name
43
+ columns:
44
+ - product_id
45
+ - product_name
46
+ - product_model
47
+ - product_type
48
+ - product_variant
49
+ - account_name
50
+ - picture_url
51
+ - url
52
+ output_column: customer_satisfaction
53
+ ```
54
+
55
+ """ # noqa
56
+
57
+ def __init__(
58
+ self,
59
+ loop: asyncio.AbstractEventLoop = None,
60
+ job: Callable = None,
61
+ stat: Callable = None,
62
+ **kwargs,
63
+ ):
64
+ super().__init__(
65
+ loop=loop, job=job, stat=stat, **kwargs
66
+ )
67
+ # System Prompt:
68
+ self.system_prompt = "Customer Satisfaction: "
69
+ self._bot_name = kwargs.get('bot_name', 'CustomerBot')
70
+ # TaskStorage
71
+ # Find in the taskstorage, the "prompts" directory.
72
+ prompt_path = self._taskstore.path.joinpath(self._program, 'prompts')
73
+ if not prompt_path.exists():
74
+ raise ConfigError(
75
+ f"{self.system_prompt} Prompts Path Not Found: {prompt_path}"
76
+ )
77
+ self.prompt_path = prompt_path
78
+ # is hardcoded to this particular Bot.
79
+ self.system_prompt_file = 'reviewbot.txt'
80
+ # Bot Object:
81
+ self._bot: Any = None
82
+
83
+ async def start(self, **kwargs):
84
+ """
85
+ start
86
+
87
+ Overview
88
+
89
+ The start method is a method for starting the CustomerSatisfaction component.
90
+
91
+ Parameters
92
+
93
+ kwargs: dict
94
+ A dictionary containing the parameters for the CustomerSatisfaction component.
95
+
96
+ Return
97
+
98
+ True if the CustomerSatisfaction component started successfully.
99
+
100
+ """
101
+ if self.previous:
102
+ self.data = self.input
103
+ else:
104
+ raise ComponentError(
105
+ "CustomerBot: Data Was Not Found"
106
+ )
107
+ if not self.output_column:
108
+ raise ConfigError(
109
+ "Customer Satisfaction: output_column is required"
110
+ )
111
+ # check if Prompt File exists
112
+ prompt_file = self.prompt_path.joinpath(self.system_prompt_file)
113
+ if not prompt_file.exists():
114
+ raise ConfigError(
115
+ f"{self.system_prompt} Prompt File Not Found: {prompt_file}"
116
+ )
117
+ self.system_prompt_file = prompt_file.name
118
+ # read the prompt file as text:
119
+ with open(prompt_file, 'r') as f:
120
+ self.system_prompt = f.read()
121
+ # Set the Bot:
122
+ try:
123
+ self._bot = BasicBot(
124
+ name=self._bot_name,
125
+ system_prompt=self.system_prompt,
126
+ goal="Customer Satisfaction Analysis using Reviews",
127
+ use_llm=self.llm.get('name', 'name'),
128
+ model_name=self.llm.get('model_name', "gemini-2.0-flash-001"),
129
+ )
130
+ # configure the bot:
131
+ await self._bot.configure()
132
+ except Exception as err:
133
+ raise ComponentError(
134
+ f"{self.system_prompt} Error Configuring Bot: {err}"
135
+ ) from err
136
+ return True
137
+
138
+ def format_question(self, product_name, reviews):
139
+ question = f"""
140
+ Product: {product_name}
141
+
142
+ Question:
143
+ "What is the overall customer sentiment, likes and dislikes,
144
+ and what insights can be derived from these product reviews for product: {product_name}?"
145
+
146
+ Customer Reviews:
147
+
148
+ """
149
+ for review in reviews:
150
+ question += f"* {review}\n"
151
+ return question
152
+
153
+ async def run(self):
154
+ """
155
+ run
156
+
157
+ Overview
158
+
159
+ The run method is a method for running the CustomerSatisfaction component.
160
+
161
+ Return
162
+
163
+ A Pandas Dataframe with the Customer Satisfaction statistics.
164
+
165
+ """
166
+ # Group reviews by product_name and aggregate them into a list
167
+ grouped = self.data.groupby(self.product_column)[self.review_column].apply(list).reset_index()
168
+ products_evaluation = {}
169
+ for _, row in grouped.iterrows():
170
+ product_name = row[self.product_column]
171
+ reviews = row[self.review_column]
172
+ formatted_question = self.format_question(product_name, reviews)
173
+ result = await self._bot.question(
174
+ question=formatted_question,
175
+ return_docs=False
176
+ )
177
+ products_evaluation[product_name] = {
178
+ "answer": result.answer
179
+ }
180
+ # Then, create a dataframe only with the columns in "self.columns" grouped.
181
+ grouped_df = self.data.groupby(self.columns).agg(
182
+ num_reviews=(self.review_column, "count"),
183
+ avg_rating=("rating", "mean")
184
+ ).reset_index()
185
+ # Add the Customer Satisfaction column, using the dictionary and match per product_name column
186
+ grouped_df[self.output_column] = grouped_df[self.product_column].map(
187
+ lambda x: products_evaluation[x]['answer']
188
+ )
189
+ # Remove the starting ```json and ending ``` using a regex
190
+ grouped_df[self.output_column] = grouped_df[self.output_column].str.replace(r'^```json\s*|\s*```$', '', regex=True)
191
+ # return the grouped dataframe
192
+ self._result = grouped_df
193
+ return self._result
194
+
195
+ async def close(self):
196
+ pass
@@ -0,0 +1,200 @@
1
+ import asyncio
2
+ from typing import Dict, List
3
+ from collections.abc import Callable
4
+ from navconfig.logging import logging
5
+ from asyncdb.exceptions import ProviderError
6
+ from ..exceptions import DataNotFound, ComponentError
7
+ from ..conf import TASK_PATH
8
+ from .flow import FlowComponent
9
+ from .DbClient import DbClient
10
+ from ..interfaces import TemplateSupport
11
+
12
+
13
+ class DataInput(DbClient, FlowComponent, TemplateSupport):
14
+ """
15
+ DataInput
16
+
17
+ Class to execute queries against a database and retrieve results using asyncDB.
18
+
19
+ Inherits from both `DbClient` (for database connection management) and
20
+ `FlowComponent` (for component lifecycle management).
21
+
22
+ .. table:: Properties
23
+ :widths: auto
24
+
25
+ +---------------+----------+------------------------------------------------------------------------------+
26
+ | Name | Required | Description |
27
+ +---------------+----------+------------------------------------------------------------------------------+
28
+ | driver | Yes | asyncDB driver to use (defaults to "pg" for PostgreSQL). |
29
+ | | | Can be overridden by a "driver" key in the "credentials" dictionary. |
30
+ +---------------+----------+------------------------------------------------------------------------------+
31
+ | credentials | Yes | Dictionary containing database connection credentials (user, password, etc.).|
32
+ +---------------+----------+------------------------------------------------------------------------------+
33
+ | query | Yes | SQL query or queries to be executed. Can be provided in different formats: |
34
+ | | | * String (single query) |
35
+ | | | * List (multiple queries) |
36
+ | | | * Dictionary (named queries) - key-value pairs where key is the query name |
37
+ | | | and value is the query string. |
38
+ | | | If not provided, no queries will be executed. |
39
+ +---------------+----------+------------------------------------------------------------------------------+
40
+ | file | Yes | Path to a file containing a single or multiple SQL queries (alternative to |
41
+ | | | `query`). |
42
+ | | | If provided along with `query`, `file` takes precedence. |
43
+ +---------------+----------+------------------------------------------------------------------------------+
44
+ | as_dataframe | No | Boolean flag indicating whether to convert query results to DataFrames. |
45
+ | | | Defaults to False (returns raw results). |
46
+ +---------------+----------+------------------------------------------------------------------------------+
47
+
48
+ .. returns::
49
+ The return value depends on the number of queries executed and the `as_dataframe` property:
50
+ * **Single Query:**
51
+ * DataFrame (if `as_dataframe` is True): Pandas DataFrame containing the query results.
52
+ * raw result object (default): Raw result object specific to the database driver.
53
+ * **Multiple Queries:**
54
+ * List[DataFrame] (if `as_dataframe` is True): List of DataFrames, each corresponding to a query result.
55
+ * List[raw result object] (default): List of raw result objects, each representing a query result.
56
+ Returns None if no queries are provided.
57
+
58
+
59
+ Example:
60
+
61
+ ```yaml
62
+ DataInput:
63
+ query: SELECT * FROM xfinity.product_types
64
+ as_string: true
65
+ ```
66
+
67
+ """ # noqa
68
+ _credentials: dict = {
69
+ "host": str,
70
+ "port": int,
71
+ "user": str,
72
+ "password": str,
73
+ "database": str,
74
+ }
75
+
76
+ def __init__(
77
+ self,
78
+ loop: asyncio.AbstractEventLoop = None,
79
+ job: Callable = None,
80
+ stat: Callable = None,
81
+ **kwargs,
82
+ ):
83
+ self.queries: List = []
84
+ self.driver = kwargs.pop('driver', "pg") # default driver
85
+ kwargs['driver'] = self.driver
86
+ # Extract tablename and schema from arguments:
87
+ self._tablename: str = kwargs.pop('tablename', None)
88
+ self._schema: str = kwargs.pop('schema', None)
89
+ # MongoDB related:
90
+ self._dbtype: str = kwargs.pop('dbtype', 'mongodb')
91
+ super().__init__(
92
+ loop=loop,
93
+ job=job,
94
+ stat=stat,
95
+ **kwargs
96
+ )
97
+ if self.credentials and "driver" in self.credentials:
98
+ self.driver = self.credentials.pop('driver')
99
+
100
+ async def start(self, **kwargs) -> bool:
101
+ await super(DataInput, self).start(**kwargs)
102
+ self.queries = []
103
+ if hasattr(self, "query"):
104
+ if isinstance(self.query, str): # sigle query # pylint: disable=E0203
105
+ self.query = self.mask_replacement(self.query)
106
+ self.queries.append(self.query)
107
+ elif isinstance(self.query, list): # multiple queries:
108
+ for query in self.query:
109
+ query = self.mask_replacement(query)
110
+ self.queries.append(query)
111
+ elif isinstance(self.query, dict): # named queries:
112
+ for name, query in self.query.items():
113
+ qs = {}
114
+ query = self.mask_replacement(query)
115
+ qs[name] = query
116
+ self.queries.append(qs)
117
+ elif hasattr(self, "file"): # query from a File
118
+ if isinstance(self.file, str): # sigle query
119
+ self._logger.debug(f"Execute SQL File: {self.file!s}")
120
+ file_path = TASK_PATH.joinpath(self._program, "sql", self.file)
121
+ qs = await self.open_sqlfile(file_path)
122
+ self.queries.append(qs)
123
+ elif isinstance(self.file, list): # multiple queries:
124
+ for file in self.file:
125
+ query = await self.open_sqlfile(file)
126
+ self.queries.append(qs)
127
+ else:
128
+ # are queries based on conditions over direct tables:
129
+ if self.driver == 'mongo':
130
+ self.queries.append(
131
+ {
132
+ "collection": self._tablename,
133
+ "database": self._schema,
134
+ }
135
+ )
136
+ return True
137
+
138
+ async def close(self):
139
+ self.connection = None
140
+
141
+ async def run(self):
142
+ try:
143
+ print(self.driver, self.credentials)
144
+ db = await self.connection(
145
+ driver=self.driver, credentials=self.credentials
146
+ )
147
+ print('DB > ', db)
148
+ except Exception as e:
149
+ logging.error(e)
150
+ raise
151
+ try:
152
+ async with await db.connection() as conn:
153
+ if conn.is_connected() is not True:
154
+ raise ComponentError(
155
+ f"DB Error: driver {self.driver} is not connected."
156
+ )
157
+ results = []
158
+ for query in self.queries:
159
+ print('QUERY > ', query, type(query))
160
+ if isinstance(query, str):
161
+ result = await self._query(query, conn)
162
+ rst = len(result)
163
+ st = {"query": query, "result": rst}
164
+ self.add_metric(f"Query: {query}", st)
165
+ if self.as_dataframe is True:
166
+ # converting to a dataframe
167
+ df = await self.get_dataframe(result)
168
+ results.append(df)
169
+ else:
170
+ results.append(result)
171
+ elif isinstance(query, dict):
172
+ result = await self._query(query, conn)
173
+ if self.as_dataframe is True:
174
+ df = await self.get_dataframe(result)
175
+ results.append(df)
176
+ else:
177
+ results.append(result)
178
+ # qs = {}
179
+ # [(key, value)] = query.items()
180
+ # result = await self._query(value, conn)
181
+ # rst = len(result)
182
+ # st = {"query": query, "result": rst}
183
+ # self.add_metric(f"Query: {key}", st)
184
+ # if self.as_dataframe is True:
185
+ # df = await self.get_dataframe(result)
186
+ # qs[key] = df
187
+ # else:
188
+ # qs[key] = result
189
+ if len(results) == 1:
190
+ self._result = results[0]
191
+ else:
192
+ self._result = results
193
+ return self._result
194
+ except DataNotFound:
195
+ raise
196
+ except ProviderError as e:
197
+ raise ComponentError(f"Error connecting to database: {e}") from e
198
+ except Exception as e:
199
+ logging.error(e)
200
+ raise