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,154 @@
1
+ """
2
+ SmartSheet.
3
+
4
+ Making operations over an Smartsheet Service.
5
+
6
+ """
7
+ import random
8
+ from functools import partial
9
+ from pathlib import Path
10
+ import ssl
11
+ import aiofiles
12
+ import aiohttp
13
+ from ..exceptions import (
14
+ ComponentError,
15
+ ConfigError,
16
+ FileNotFound
17
+ )
18
+ from .credentials import CredentialsInterface
19
+ from ..interfaces.http import ua
20
+
21
+
22
+ class SmartSheetClient(CredentialsInterface):
23
+ _credentials: dict = {"token": str, "scheme": str}
24
+
25
+ def __init__(self, *args, **kwargs):
26
+ self.file_format: str = "application/vnd.ms-excel"
27
+ self.url: str = "https://api.smartsheet.com/2.0/sheets/"
28
+ self.create_destination: bool = True # by default
29
+ self.file_id: str = kwargs.pop('file_id', None)
30
+ api_key = self.get_env_value("SMARTSHEET_API_KEY")
31
+ self.api_key: str = kwargs.pop('api_key', api_key)
32
+ kwargs['no_host'] = True
33
+ super().__init__(*args, **kwargs)
34
+ if not self.api_key:
35
+ raise ComponentError(
36
+ f"SmartSheet: Invalid API Key name {self.api_key}"
37
+ )
38
+ self.ssl_certs = kwargs.get('ssl_certs', [])
39
+ self.ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
40
+ self.ssl_ctx.options &= ~ssl.OP_NO_SSLv3
41
+ self.ssl_ctx.minimum_version = ssl.TLSVersion.TLSv1_2
42
+ self.ssl_ctx.check_hostname = False
43
+ self.ssl_ctx.verify_mode = ssl.CERT_NONE
44
+ if self.ssl_certs:
45
+ self.ssl_ctx.load_cert_chain(*self.ssl_certs)
46
+
47
+ async def http_get(
48
+ self,
49
+ url: str = None,
50
+ credentials: dict = None,
51
+ headers: dict = {},
52
+ accept: str = 'application/vnd.ms-excel',
53
+ destination: Path = None
54
+ ):
55
+ """
56
+ session.
57
+ connect to an http source using aiohttp
58
+ """
59
+ timeout = aiohttp.ClientTimeout(total=self.timeout)
60
+ if url is None:
61
+ url = self.url
62
+ # TODO: Auth, Data, etc
63
+ auth = {}
64
+ params = {}
65
+ headers = {
66
+ "Accept": accept,
67
+ "Accept-Encoding": "gzip, deflate",
68
+ "DNT": "1",
69
+ "Connection": "keep-alive",
70
+ "Upgrade-Insecure-Requests": "1",
71
+ "User-Agent": random.choice(ua),
72
+ **headers,
73
+ }
74
+ if credentials:
75
+ if "username" in credentials: # basic Authentication
76
+ auth = aiohttp.BasicAuth(
77
+ credentials["username"], credentials["password"]
78
+ )
79
+ params = {"auth": auth}
80
+ elif "token" in credentials:
81
+ headers["Authorization"] = "{scheme} {token}".format(
82
+ scheme=credentials["scheme"], token=credentials["token"]
83
+ )
84
+ async with aiohttp.ClientSession(**params) as session:
85
+ meth = getattr(session, 'get')
86
+ ssl = {"ssl": self.ssl_ctx, "verify_ssl": True}
87
+ fn = partial(
88
+ meth,
89
+ url,
90
+ headers=headers,
91
+ timeout=timeout,
92
+ allow_redirects=True,
93
+ **ssl,
94
+ )
95
+ try:
96
+ async with fn() as response:
97
+ if response.status in (200, 201, 202):
98
+ return await self.http_response(response, destination)
99
+ else:
100
+ print("ERROR RESPONSE >> ", response)
101
+ raise ComponentError(
102
+ f"Smartsheet: Error getting data from URL {response}"
103
+ )
104
+ except Exception as err:
105
+ raise ComponentError(
106
+ f"Smartsheet: Error Making an SSL Connection to ({self.url}): {err}"
107
+ ) from err
108
+ except aiohttp.exceptions.HTTPError as err:
109
+ raise ComponentError(
110
+ f"Smartsheet: SSL Certificate Error: {err}"
111
+ ) from err
112
+
113
+ async def http_response(self, response, destination: str):
114
+ # getting aiohttp response:
115
+ if response.status == 200:
116
+ try:
117
+ async with aiofiles.open(str(destination), mode="wb") as fp:
118
+ await fp.write(await response.read())
119
+ if destination.exists():
120
+ return response
121
+ else:
122
+ raise FileNotFound(
123
+ f"Error saving File {destination!s}"
124
+ )
125
+ except FileNotFound:
126
+ raise
127
+ except Exception as err:
128
+ raise FileNotFound(
129
+ f"Error saving File {err!s}"
130
+ )
131
+ else:
132
+ raise ComponentError(
133
+ f"DownloadFromSmartSheet: Wrong response from Smartsheet: {response!s}"
134
+ )
135
+
136
+ async def download_file(self, file_id: str = None, destination: Path = None):
137
+ if isinstance(destination, str):
138
+ destination = Path(destination)
139
+ if not file_id:
140
+ file_id = self.file_id
141
+ if not file_id:
142
+ raise ConfigError(
143
+ "SmartSheet: Unable to Download without FileId."
144
+ )
145
+ credentials = {"token": self.api_key, "scheme": "Bearer"}
146
+ url = f"{self.url}{file_id}"
147
+ if not destination:
148
+ destination = self.filename
149
+ if await self.http_get(
150
+ url=url,
151
+ credentials=credentials,
152
+ destination=destination
153
+ ):
154
+ return True
@@ -0,0 +1,39 @@
1
+ from abc import ABC
2
+ from typing import Optional, ParamSpec, Any
3
+ import traceback
4
+ from ..utils.stats import TaskMonitor
5
+
6
+ P = ParamSpec("P")
7
+
8
+ class StatSupport(ABC):
9
+ """StatSupport.
10
+
11
+ Adding Support for Task Monitor (Statistics Collector.)
12
+ """
13
+
14
+ def __init__(
15
+ self,
16
+ *args: P.args,
17
+ **kwargs: P.kwargs
18
+ ):
19
+ # stats object:
20
+ self._stat_: bool = True
21
+ stat: Optional[TaskMonitor] = kwargs.pop('stat', None)
22
+ if stat:
23
+ self.stat: Optional[TaskMonitor] = stat
24
+ else:
25
+ self.stat = None
26
+ self._stat_ = False
27
+ super().__init__(*args, **kwargs)
28
+
29
+ def save_traceback(self):
30
+ try:
31
+ self.stat.stacktrace(traceback.format_exc())
32
+ finally:
33
+ pass
34
+
35
+ def add_metric(self, name, value):
36
+ try:
37
+ self.stat.add_metric(name, value)
38
+ except AttributeError:
39
+ pass
@@ -0,0 +1,96 @@
1
+ """
2
+ Flowtask Task Execution.
3
+ """
4
+ from typing import Optional
5
+ from abc import ABC
6
+ import asyncio
7
+ from navconfig.logging import logging
8
+ # Queue Worker Client:
9
+ from qw.client import QClient
10
+ from qw.wrappers import TaskWrapper
11
+ # TODO: Dispatch tasks to docker container.
12
+ from ..tasks.task import Task
13
+ from ..exceptions import FlowTaskError, TaskFailed
14
+
15
+
16
+ class TaskSupport(ABC):
17
+ def __init__(self, *args, **kwargs):
18
+ self._name_ = self.__class__.__name__
19
+ self.program: str = kwargs.pop("program", "navigator")
20
+ self.task: str = kwargs.pop('task')
21
+ # No worker:
22
+ self._no_worker: bool = kwargs.pop("no_worker", False)
23
+ if self._no_worker is False:
24
+ self.worker: QClient = QClient() # auto-discovering of workers
25
+ else:
26
+ self.worker: Optional[QClient] = None
27
+ # self.worker = worker
28
+ self.priority = kwargs.pop("priority", None)
29
+ self.logger = logging.getLogger(
30
+ f"Task.{self.program}.{self.task}"
31
+ )
32
+ self._args = args
33
+ self._kwargs = kwargs
34
+ super().__init__(*args, **kwargs)
35
+
36
+ def __repr__(self):
37
+ return f"<Action.Task>: {self.program}.{self.task}"
38
+
39
+ async def run(self, *args, **kwargs):
40
+ if self._no_worker is False:
41
+ if self.priority == "pub":
42
+ # Using Channel Group mechanism (avoid queueing)
43
+ try:
44
+ result = await self.worker.publish(self.wrapper)
45
+ await asyncio.sleep(0.01)
46
+ return result
47
+ except asyncio.TimeoutError:
48
+ raise
49
+ except Exception as exc:
50
+ self.logger.error(f"{exc}")
51
+ raise
52
+ else:
53
+ try:
54
+ result = await self.worker.queue(self.wrapper)
55
+ await asyncio.sleep(0.01)
56
+ return result
57
+ except asyncio.TimeoutError:
58
+ raise
59
+ except Exception as exc:
60
+ self.logger.error(f"{exc}")
61
+ raise
62
+ else:
63
+ try:
64
+ await self.task.start()
65
+ except Exception as exc:
66
+ self.logger.error(exc)
67
+ raise TaskFailed(f"{exc!s}") from exc
68
+ try:
69
+ return await self.task.run()
70
+ except Exception as err:
71
+ raise TaskFailed(
72
+ f"Error: Task {self.program}.{self.task} failed: {err}"
73
+ ) from err
74
+ finally:
75
+ await self.task.close()
76
+
77
+ async def close(self):
78
+ pass
79
+
80
+ async def open(self):
81
+ try:
82
+ if self._no_worker is False:
83
+ self.wrapper = TaskWrapper(
84
+ program=self.program,
85
+ task=self.task,
86
+ **self._kwargs
87
+ )
88
+ else:
89
+ self.task = Task(
90
+ task=self.task,
91
+ program=self.program,
92
+ debug=True
93
+ )
94
+ except Exception as exc:
95
+ self.logger.exception(str(exc), stack_info=True)
96
+ raise FlowTaskError(f"Error: {exc}") from exc
@@ -0,0 +1,118 @@
1
+ from abc import ABC
2
+ from pathlib import PurePath, Path
3
+ import aiofiles
4
+ from ..exceptions import FileError, FileNotFound
5
+ from ..template import getTemplateHandler, TemplateHandler
6
+ from ..conf import FILE_STORAGES, TASK_STORAGES, TASK_PATH
7
+
8
+
9
+ class TemplateSupport(ABC):
10
+ """TemplateSupport.
11
+
12
+ Adding Support for Jinja2 Template parser on Components.
13
+ """
14
+ use_template: bool = False
15
+
16
+ def __init__(self, *args, **kwargs):
17
+ self._filestore = None
18
+ self._taskstorage = None
19
+ # Use Template:
20
+ self.use_template: bool = kwargs.pop(
21
+ 'use_template', self.use_template
22
+ )
23
+ self.from_templates_dir: bool = kwargs.pop(
24
+ 'from_templates_dir', False
25
+ )
26
+ # Template directory
27
+ template_dir = kwargs.pop('template_dir', None)
28
+ try:
29
+ super().__init__(*args, *args)
30
+ except TypeError:
31
+ super().__init__()
32
+ # Template Parser:
33
+ self._templateparser: TemplateHandler = None
34
+ if self.use_template is True:
35
+ self._templateparser = getTemplateHandler(
36
+ newdir=template_dir
37
+ )
38
+
39
+ async def open_templatefile(
40
+ self,
41
+ file: PurePath,
42
+ program: str = None,
43
+ from_templates_dir: bool = False,
44
+ folder: str = 'templates',
45
+ **kwargs
46
+ ) -> str:
47
+ """
48
+ Open a file, replace masks and parse template if needed.
49
+ """
50
+ if self._filestore is None:
51
+ # we need to calculate which is the filestore
52
+ self._filestore = FILE_STORAGES.get('default')
53
+ if self._taskstorage is None:
54
+ self._taskstorage = TASK_STORAGES.get('default')
55
+ if isinstance(file, str):
56
+ file = Path(file)
57
+ if not file.is_absolute():
58
+ # File is relative to TaskStorage:
59
+ if from_templates_dir is True:
60
+ directory = Path(TASK_PATH).parent.joinpath(folder)
61
+ else:
62
+ # Getting from default Task Storage:
63
+ directory = self._taskstorage.get_path().joinpath(program, folder)
64
+ if not directory.exists():
65
+ # Get Template From Task Path:
66
+ directory = Path(TASK_PATH).joinpath(program, folder)
67
+ if not directory.exists():
68
+ # Get Templates Dir from FileStore
69
+ directory = self._filestore.get_directory(folder, program=program)
70
+ file = directory.joinpath(file).resolve()
71
+ if file.exists() and file.is_file():
72
+ content = None
73
+ # open File:
74
+ try:
75
+ async with aiofiles.open(file, "r+") as afp:
76
+ content = await afp.read()
77
+ except Exception as exc:
78
+ raise FileError(
79
+ f"{__name__}: Error Opening File: {file}"
80
+ ) from exc
81
+ if self.use_template is True:
82
+ content = self._templateparser.from_string(
83
+ content,
84
+ kwargs
85
+ )
86
+ elif hasattr(self, "masks"):
87
+ content = self.mask_replacement(content)
88
+ return content
89
+ else:
90
+ raise FileNotFound(
91
+ f"{__name__}: Missing File: {file}"
92
+ )
93
+
94
+ async def open_tmpfile(self, file: PurePath, **kwargs) -> str:
95
+ if file.exists() and file.is_file():
96
+ content = None
97
+ # open File:
98
+ try:
99
+ async with aiofiles.open(file, "r+") as afp:
100
+ content = await afp.read()
101
+ except Exception as exc:
102
+ raise FileError(
103
+ f"{self.__name__}: {exc}"
104
+ )
105
+ # check if we need to replace masks
106
+ if hasattr(self, "masks"):
107
+ self._logger.debug(
108
+ f"TemplateSupport Masks: {self.masks}"
109
+ )
110
+ if "{" in content:
111
+ content = self.mask_replacement(content)
112
+ if self.use_template is True:
113
+ content = self._templateparser.from_string(content, kwargs)
114
+ return content
115
+ else:
116
+ raise FileNotFound(
117
+ f"{self.__name__}: Missing File: {file}"
118
+ )
@@ -0,0 +1 @@
1
+ from .milvus import MilvusStore
@@ -0,0 +1,133 @@
1
+ from abc import ABC, abstractmethod
2
+ import torch
3
+ from langchain_huggingface import (
4
+ HuggingFaceEmbeddings
5
+ )
6
+ from langchain_community.embeddings import (
7
+ HuggingFaceBgeEmbeddings
8
+ )
9
+ from navconfig.logging import logging
10
+ from ...conf import (
11
+ MAX_BATCH_SIZE,
12
+ EMBEDDING_DEVICE,
13
+ EMBEDDING_DEFAULT_MODEL
14
+ )
15
+
16
+ class AbstractStore(ABC):
17
+ """AbstractStore class.
18
+
19
+ Args:
20
+ embedding_model (dict): Embeddings.
21
+ """
22
+ def __init__(self, *args, **kwargs):
23
+ self.embedding_model: dict = kwargs.pop(
24
+ 'embedding_model',
25
+ self._default_embedding_model()
26
+ )
27
+ self.logger = logging.getLogger(__name__)
28
+ self._metric_type: str = kwargs.pop("metric_type", self._default_metric())
29
+ self._index_type: str = kwargs.pop("index_type", self._default_index())
30
+ self._dimension: int = kwargs.pop('dimension', 768)
31
+ self.vector_field: str = kwargs.pop('vector_field', 'vector')
32
+ self.text_field: str = kwargs.pop('text_field', 'text')
33
+ self.database: str = kwargs.pop('database', 'default')
34
+ super().__init__(*args, **kwargs)
35
+ # Embedding Model
36
+ self._embed_ = None
37
+ self._connection = None
38
+
39
+ def _default_metric(self) -> str:
40
+ return 'COSINE'
41
+
42
+ def _default_index(self) -> str:
43
+ return 'IVF_FLAT'
44
+
45
+ def _default_embedding_model(self) -> dict:
46
+ return {
47
+ "model_name": "sentence-transformers/paraphrase-MiniLM-L6-v2",
48
+ "model_type": "transformers"
49
+ }
50
+
51
+ def _get_device(self, device_type: str = None, cuda_number: int = 0):
52
+ """Get Default device for Torch and transformers.
53
+
54
+ """
55
+ torch.backends.cudnn.deterministic = True
56
+ torch.backends.cudnn.benchmark = False
57
+ if device_type:
58
+ return torch.device(device_type)
59
+ if device_type == 'cpu' or EMBEDDING_DEVICE == 'cpu':
60
+ return torch.device('cpu')
61
+ if torch.cuda.is_available():
62
+ # Use CUDA GPU if available
63
+ return torch.device(f'cuda:{cuda_number}')
64
+ if torch.backends.mps.is_available():
65
+ # Use CUDA Multi-Processing Service if available
66
+ return torch.device("mps")
67
+ if EMBEDDING_DEVICE == 'cuda':
68
+ return torch.device(f'cuda:{cuda_number}')
69
+ else:
70
+ return torch.device(EMBEDDING_DEVICE)
71
+
72
+ def create_embedding(
73
+ self,
74
+ embedding_model: dict
75
+ ):
76
+ encode_kwargs: str = {
77
+ 'normalize_embeddings': True,
78
+ "batch_size": MAX_BATCH_SIZE
79
+ }
80
+ device = self._get_device()
81
+ model_kwargs: str = {'device': device}
82
+ model_name = embedding_model.get('model_name', EMBEDDING_DEFAULT_MODEL)
83
+ model_type = embedding_model.get('model_type', 'transformers')
84
+ if model_type == 'bge':
85
+ return HuggingFaceBgeEmbeddings(
86
+ model_name=model_name,
87
+ model_kwargs=model_kwargs,
88
+ encode_kwargs=encode_kwargs
89
+ )
90
+ else:
91
+ return HuggingFaceEmbeddings(
92
+ model_name=model_name,
93
+ model_kwargs=model_kwargs,
94
+ encode_kwargs=encode_kwargs
95
+ )
96
+
97
+ def get_default_embedding(
98
+ self,
99
+ model_name: str = EMBEDDING_DEFAULT_MODEL
100
+ ):
101
+ return self.create_embedding(model_name=model_name)
102
+
103
+ @abstractmethod
104
+ async def load_documents(
105
+ self,
106
+ documents: list,
107
+ collection: str = None
108
+ ):
109
+ pass
110
+
111
+ @abstractmethod
112
+ def connect(self) -> None:
113
+ pass
114
+
115
+ @abstractmethod
116
+ def disconnect(self) -> None:
117
+ pass
118
+
119
+ async def __aenter__(self):
120
+ if self._embed_ is None:
121
+ self._embed_ = self.create_embedding(
122
+ self.embedding_model
123
+ )
124
+ await self.connect()
125
+ return self
126
+
127
+ async def __aexit__(self, exc_type, exc_value, traceback):
128
+ # closing Embedding
129
+ self._embed_ = None
130
+ try:
131
+ await self.disconnect()
132
+ except RuntimeError:
133
+ pass