flowtask 5.8.4__cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. flowtask/__init__.py +93 -0
  2. flowtask/__main__.py +38 -0
  3. flowtask/bots/__init__.py +6 -0
  4. flowtask/bots/check.py +93 -0
  5. flowtask/bots/codebot.py +51 -0
  6. flowtask/components/ASPX.py +148 -0
  7. flowtask/components/AddDataset.py +352 -0
  8. flowtask/components/Amazon.py +523 -0
  9. flowtask/components/AutoTask.py +314 -0
  10. flowtask/components/Azure.py +80 -0
  11. flowtask/components/AzureUsers.py +106 -0
  12. flowtask/components/BaseAction.py +91 -0
  13. flowtask/components/BaseLoop.py +198 -0
  14. flowtask/components/BestBuy.py +800 -0
  15. flowtask/components/CSVToGCS.py +120 -0
  16. flowtask/components/CompanyScraper/__init__.py +1 -0
  17. flowtask/components/CompanyScraper/parsers/__init__.py +6 -0
  18. flowtask/components/CompanyScraper/parsers/base.py +102 -0
  19. flowtask/components/CompanyScraper/parsers/explorium.py +192 -0
  20. flowtask/components/CompanyScraper/parsers/leadiq.py +206 -0
  21. flowtask/components/CompanyScraper/parsers/rocket.py +133 -0
  22. flowtask/components/CompanyScraper/parsers/siccode.py +109 -0
  23. flowtask/components/CompanyScraper/parsers/visualvisitor.py +130 -0
  24. flowtask/components/CompanyScraper/parsers/zoominfo.py +118 -0
  25. flowtask/components/CompanyScraper/scrapper.py +1054 -0
  26. flowtask/components/CopyTo.py +177 -0
  27. flowtask/components/CopyToBigQuery.py +243 -0
  28. flowtask/components/CopyToMongoDB.py +291 -0
  29. flowtask/components/CopyToPg.py +609 -0
  30. flowtask/components/CopyToRethink.py +207 -0
  31. flowtask/components/CreateGCSBucket.py +102 -0
  32. flowtask/components/CreateReport/CreateReport.py +228 -0
  33. flowtask/components/CreateReport/__init__.py +9 -0
  34. flowtask/components/CreateReport/charts/__init__.py +15 -0
  35. flowtask/components/CreateReport/charts/bar.py +51 -0
  36. flowtask/components/CreateReport/charts/base.py +66 -0
  37. flowtask/components/CreateReport/charts/pie.py +64 -0
  38. flowtask/components/CreateReport/utils.py +9 -0
  39. flowtask/components/CustomerSatisfaction.py +196 -0
  40. flowtask/components/DataInput.py +200 -0
  41. flowtask/components/DateList.py +255 -0
  42. flowtask/components/DbClient.py +163 -0
  43. flowtask/components/DialPad.py +146 -0
  44. flowtask/components/DocumentDBQuery.py +200 -0
  45. flowtask/components/DownloadFrom.py +371 -0
  46. flowtask/components/DownloadFromD2L.py +113 -0
  47. flowtask/components/DownloadFromFTP.py +181 -0
  48. flowtask/components/DownloadFromIMAP.py +315 -0
  49. flowtask/components/DownloadFromS3.py +198 -0
  50. flowtask/components/DownloadFromSFTP.py +265 -0
  51. flowtask/components/DownloadFromSharepoint.py +110 -0
  52. flowtask/components/DownloadFromSmartSheet.py +114 -0
  53. flowtask/components/DownloadS3File.py +229 -0
  54. flowtask/components/Dummy.py +59 -0
  55. flowtask/components/DuplicatePhoto.py +411 -0
  56. flowtask/components/EmployeeEvaluation.py +237 -0
  57. flowtask/components/ExecuteSQL.py +323 -0
  58. flowtask/components/ExtractHTML.py +178 -0
  59. flowtask/components/FileBase.py +178 -0
  60. flowtask/components/FileCopy.py +181 -0
  61. flowtask/components/FileDelete.py +82 -0
  62. flowtask/components/FileExists.py +146 -0
  63. flowtask/components/FileIteratorDelete.py +112 -0
  64. flowtask/components/FileList.py +194 -0
  65. flowtask/components/FileOpen.py +75 -0
  66. flowtask/components/FileRead.py +120 -0
  67. flowtask/components/FileRename.py +106 -0
  68. flowtask/components/FilterIf.py +284 -0
  69. flowtask/components/FilterRows/FilterRows.py +200 -0
  70. flowtask/components/FilterRows/__init__.py +10 -0
  71. flowtask/components/FilterRows/functions.py +4 -0
  72. flowtask/components/GCSToBigQuery.py +103 -0
  73. flowtask/components/GoogleA4.py +150 -0
  74. flowtask/components/GoogleGeoCoding.py +344 -0
  75. flowtask/components/GooglePlaces.py +315 -0
  76. flowtask/components/GoogleSearch.py +539 -0
  77. flowtask/components/HTTPClient.py +268 -0
  78. flowtask/components/ICIMS.py +146 -0
  79. flowtask/components/IF.py +179 -0
  80. flowtask/components/IcimsFolderCopy.py +173 -0
  81. flowtask/components/ImageFeatures/__init__.py +5 -0
  82. flowtask/components/ImageFeatures/process.py +233 -0
  83. flowtask/components/IteratorBase.py +251 -0
  84. flowtask/components/LangchainLoader/__init__.py +5 -0
  85. flowtask/components/LangchainLoader/loader.py +194 -0
  86. flowtask/components/LangchainLoader/loaders/__init__.py +22 -0
  87. flowtask/components/LangchainLoader/loaders/abstract.py +362 -0
  88. flowtask/components/LangchainLoader/loaders/basepdf.py +50 -0
  89. flowtask/components/LangchainLoader/loaders/docx.py +91 -0
  90. flowtask/components/LangchainLoader/loaders/html.py +119 -0
  91. flowtask/components/LangchainLoader/loaders/pdfblocks.py +146 -0
  92. flowtask/components/LangchainLoader/loaders/pdfmark.py +79 -0
  93. flowtask/components/LangchainLoader/loaders/pdftables.py +135 -0
  94. flowtask/components/LangchainLoader/loaders/qa.py +67 -0
  95. flowtask/components/LangchainLoader/loaders/txt.py +55 -0
  96. flowtask/components/LeadIQ.py +650 -0
  97. flowtask/components/Loop.py +253 -0
  98. flowtask/components/Lowes.py +334 -0
  99. flowtask/components/MS365Usage.py +156 -0
  100. flowtask/components/MSTeamsMessages.py +320 -0
  101. flowtask/components/MarketClustering.py +1051 -0
  102. flowtask/components/MergeFiles.py +362 -0
  103. flowtask/components/MilvusOutput.py +87 -0
  104. flowtask/components/NearByStores.py +175 -0
  105. flowtask/components/NetworkNinja/__init__.py +6 -0
  106. flowtask/components/NetworkNinja/models/__init__.py +52 -0
  107. flowtask/components/NetworkNinja/models/abstract.py +177 -0
  108. flowtask/components/NetworkNinja/models/account.py +39 -0
  109. flowtask/components/NetworkNinja/models/client.py +19 -0
  110. flowtask/components/NetworkNinja/models/district.py +14 -0
  111. flowtask/components/NetworkNinja/models/events.py +101 -0
  112. flowtask/components/NetworkNinja/models/forms.py +499 -0
  113. flowtask/components/NetworkNinja/models/market.py +16 -0
  114. flowtask/components/NetworkNinja/models/organization.py +34 -0
  115. flowtask/components/NetworkNinja/models/photos.py +125 -0
  116. flowtask/components/NetworkNinja/models/project.py +44 -0
  117. flowtask/components/NetworkNinja/models/region.py +28 -0
  118. flowtask/components/NetworkNinja/models/store.py +203 -0
  119. flowtask/components/NetworkNinja/models/user.py +151 -0
  120. flowtask/components/NetworkNinja/router.py +854 -0
  121. flowtask/components/Odoo.py +175 -0
  122. flowtask/components/OdooInjector.py +192 -0
  123. flowtask/components/OpenFromXML.py +126 -0
  124. flowtask/components/OpenWeather.py +41 -0
  125. flowtask/components/OpenWithBase.py +616 -0
  126. flowtask/components/OpenWithPandas.py +715 -0
  127. flowtask/components/PGPDecrypt.py +199 -0
  128. flowtask/components/PandasIterator.py +187 -0
  129. flowtask/components/PandasToFile.py +189 -0
  130. flowtask/components/Paradox.py +339 -0
  131. flowtask/components/ParamIterator.py +117 -0
  132. flowtask/components/ParseHTML.py +84 -0
  133. flowtask/components/PlacerStores.py +249 -0
  134. flowtask/components/Pokemon.py +507 -0
  135. flowtask/components/PositiveBot.py +62 -0
  136. flowtask/components/PowerPointSlide.py +400 -0
  137. flowtask/components/PrintMessage.py +127 -0
  138. flowtask/components/ProductCompetitors/__init__.py +5 -0
  139. flowtask/components/ProductCompetitors/parsers/__init__.py +7 -0
  140. flowtask/components/ProductCompetitors/parsers/base.py +72 -0
  141. flowtask/components/ProductCompetitors/parsers/bestbuy.py +86 -0
  142. flowtask/components/ProductCompetitors/parsers/lowes.py +103 -0
  143. flowtask/components/ProductCompetitors/scrapper.py +155 -0
  144. flowtask/components/ProductCompliant.py +169 -0
  145. flowtask/components/ProductInfo/__init__.py +1 -0
  146. flowtask/components/ProductInfo/parsers/__init__.py +5 -0
  147. flowtask/components/ProductInfo/parsers/base.py +83 -0
  148. flowtask/components/ProductInfo/parsers/brother.py +97 -0
  149. flowtask/components/ProductInfo/parsers/canon.py +167 -0
  150. flowtask/components/ProductInfo/parsers/epson.py +118 -0
  151. flowtask/components/ProductInfo/parsers/hp.py +131 -0
  152. flowtask/components/ProductInfo/parsers/samsung.py +97 -0
  153. flowtask/components/ProductInfo/scraper.py +319 -0
  154. flowtask/components/ProductPricing.py +118 -0
  155. flowtask/components/QS.py +261 -0
  156. flowtask/components/QSBase.py +201 -0
  157. flowtask/components/QueryIterator.py +273 -0
  158. flowtask/components/QueryToInsert.py +327 -0
  159. flowtask/components/QueryToPandas.py +432 -0
  160. flowtask/components/RESTClient.py +195 -0
  161. flowtask/components/RethinkDBQuery.py +189 -0
  162. flowtask/components/Rsync.py +74 -0
  163. flowtask/components/RunSSH.py +59 -0
  164. flowtask/components/RunShell.py +71 -0
  165. flowtask/components/SalesForce.py +20 -0
  166. flowtask/components/SaveImageBank/__init__.py +257 -0
  167. flowtask/components/SchedulingVisits.py +592 -0
  168. flowtask/components/ScrapPage.py +216 -0
  169. flowtask/components/ScrapSearch.py +79 -0
  170. flowtask/components/SendNotify.py +257 -0
  171. flowtask/components/SentimentAnalysis.py +694 -0
  172. flowtask/components/ServiceScrapper/__init__.py +5 -0
  173. flowtask/components/ServiceScrapper/parsers/__init__.py +1 -0
  174. flowtask/components/ServiceScrapper/parsers/base.py +94 -0
  175. flowtask/components/ServiceScrapper/parsers/costco.py +93 -0
  176. flowtask/components/ServiceScrapper/scrapper.py +199 -0
  177. flowtask/components/SetVariables.py +156 -0
  178. flowtask/components/SubTask.py +182 -0
  179. flowtask/components/SuiteCRM.py +48 -0
  180. flowtask/components/Switch.py +175 -0
  181. flowtask/components/TableBase.py +148 -0
  182. flowtask/components/TableDelete.py +312 -0
  183. flowtask/components/TableInput.py +143 -0
  184. flowtask/components/TableOutput/TableOutput.py +384 -0
  185. flowtask/components/TableOutput/__init__.py +3 -0
  186. flowtask/components/TableSchema.py +534 -0
  187. flowtask/components/Target.py +223 -0
  188. flowtask/components/ThumbnailGenerator.py +156 -0
  189. flowtask/components/ToPandas.py +67 -0
  190. flowtask/components/TransformRows/TransformRows.py +507 -0
  191. flowtask/components/TransformRows/__init__.py +9 -0
  192. flowtask/components/TransformRows/functions.py +559 -0
  193. flowtask/components/TransposeRows.py +176 -0
  194. flowtask/components/UPCDatabase.py +86 -0
  195. flowtask/components/UnGzip.py +171 -0
  196. flowtask/components/Uncompress.py +172 -0
  197. flowtask/components/UniqueRows.py +126 -0
  198. flowtask/components/Unzip.py +107 -0
  199. flowtask/components/UpdateOperationalVars.py +147 -0
  200. flowtask/components/UploadTo.py +299 -0
  201. flowtask/components/UploadToS3.py +136 -0
  202. flowtask/components/UploadToSFTP.py +160 -0
  203. flowtask/components/UploadToSharepoint.py +205 -0
  204. flowtask/components/UserFunc.py +122 -0
  205. flowtask/components/VivaTracker.py +140 -0
  206. flowtask/components/WSDLClient.py +123 -0
  207. flowtask/components/Wait.py +18 -0
  208. flowtask/components/Walmart.py +199 -0
  209. flowtask/components/Workplace.py +134 -0
  210. flowtask/components/XMLToPandas.py +267 -0
  211. flowtask/components/Zammad/__init__.py +41 -0
  212. flowtask/components/Zammad/models.py +0 -0
  213. flowtask/components/ZoomInfoScraper.py +409 -0
  214. flowtask/components/__init__.py +104 -0
  215. flowtask/components/abstract.py +18 -0
  216. flowtask/components/flow.py +530 -0
  217. flowtask/components/google.py +335 -0
  218. flowtask/components/group.py +221 -0
  219. flowtask/components/py.typed +0 -0
  220. flowtask/components/reviewscrap.py +132 -0
  221. flowtask/components/tAutoincrement.py +117 -0
  222. flowtask/components/tConcat.py +109 -0
  223. flowtask/components/tExplode.py +119 -0
  224. flowtask/components/tFilter.py +184 -0
  225. flowtask/components/tGroup.py +236 -0
  226. flowtask/components/tJoin.py +270 -0
  227. flowtask/components/tMap/__init__.py +9 -0
  228. flowtask/components/tMap/functions.py +54 -0
  229. flowtask/components/tMap/tMap.py +450 -0
  230. flowtask/components/tMelt.py +112 -0
  231. flowtask/components/tMerge.py +114 -0
  232. flowtask/components/tOrder.py +93 -0
  233. flowtask/components/tPandas.py +94 -0
  234. flowtask/components/tPivot.py +71 -0
  235. flowtask/components/tPluckCols.py +76 -0
  236. flowtask/components/tUnnest.py +82 -0
  237. flowtask/components/user.py +401 -0
  238. flowtask/conf.py +457 -0
  239. flowtask/download.py +102 -0
  240. flowtask/events/__init__.py +11 -0
  241. flowtask/events/events/__init__.py +20 -0
  242. flowtask/events/events/abstract.py +95 -0
  243. flowtask/events/events/alerts/__init__.py +362 -0
  244. flowtask/events/events/alerts/colfunctions.py +131 -0
  245. flowtask/events/events/alerts/functions.py +158 -0
  246. flowtask/events/events/dummy.py +12 -0
  247. flowtask/events/events/exec.py +124 -0
  248. flowtask/events/events/file/__init__.py +7 -0
  249. flowtask/events/events/file/base.py +51 -0
  250. flowtask/events/events/file/copy.py +23 -0
  251. flowtask/events/events/file/delete.py +16 -0
  252. flowtask/events/events/interfaces/__init__.py +9 -0
  253. flowtask/events/events/interfaces/client.py +67 -0
  254. flowtask/events/events/interfaces/credentials.py +28 -0
  255. flowtask/events/events/interfaces/notifications.py +58 -0
  256. flowtask/events/events/jira.py +122 -0
  257. flowtask/events/events/log.py +26 -0
  258. flowtask/events/events/logerr.py +52 -0
  259. flowtask/events/events/notify.py +59 -0
  260. flowtask/events/events/notify_event.py +160 -0
  261. flowtask/events/events/publish.py +54 -0
  262. flowtask/events/events/sendfile.py +104 -0
  263. flowtask/events/events/task.py +97 -0
  264. flowtask/events/events/teams.py +98 -0
  265. flowtask/events/events/webhook.py +58 -0
  266. flowtask/events/manager.py +287 -0
  267. flowtask/exceptions.c +39393 -0
  268. flowtask/exceptions.cpython-312-x86_64-linux-gnu.so +0 -0
  269. flowtask/extensions/__init__.py +3 -0
  270. flowtask/extensions/abstract.py +82 -0
  271. flowtask/extensions/logging/__init__.py +65 -0
  272. flowtask/hooks/__init__.py +9 -0
  273. flowtask/hooks/actions/__init__.py +22 -0
  274. flowtask/hooks/actions/abstract.py +66 -0
  275. flowtask/hooks/actions/dummy.py +23 -0
  276. flowtask/hooks/actions/jira.py +74 -0
  277. flowtask/hooks/actions/rest.py +320 -0
  278. flowtask/hooks/actions/sampledata.py +37 -0
  279. flowtask/hooks/actions/sensor.py +23 -0
  280. flowtask/hooks/actions/task.py +9 -0
  281. flowtask/hooks/actions/ticket.py +37 -0
  282. flowtask/hooks/actions/zammad.py +55 -0
  283. flowtask/hooks/hook.py +62 -0
  284. flowtask/hooks/models.py +17 -0
  285. flowtask/hooks/service.py +187 -0
  286. flowtask/hooks/step.py +91 -0
  287. flowtask/hooks/types/__init__.py +23 -0
  288. flowtask/hooks/types/base.py +129 -0
  289. flowtask/hooks/types/brokers/__init__.py +11 -0
  290. flowtask/hooks/types/brokers/base.py +54 -0
  291. flowtask/hooks/types/brokers/mqtt.py +35 -0
  292. flowtask/hooks/types/brokers/rabbitmq.py +82 -0
  293. flowtask/hooks/types/brokers/redis.py +83 -0
  294. flowtask/hooks/types/brokers/sqs.py +44 -0
  295. flowtask/hooks/types/fs.py +232 -0
  296. flowtask/hooks/types/http.py +49 -0
  297. flowtask/hooks/types/imap.py +200 -0
  298. flowtask/hooks/types/jira.py +279 -0
  299. flowtask/hooks/types/mail.py +205 -0
  300. flowtask/hooks/types/postgres.py +98 -0
  301. flowtask/hooks/types/responses/__init__.py +8 -0
  302. flowtask/hooks/types/responses/base.py +5 -0
  303. flowtask/hooks/types/sharepoint.py +288 -0
  304. flowtask/hooks/types/ssh.py +141 -0
  305. flowtask/hooks/types/tagged.py +59 -0
  306. flowtask/hooks/types/upload.py +85 -0
  307. flowtask/hooks/types/watch.py +71 -0
  308. flowtask/hooks/types/web.py +36 -0
  309. flowtask/interfaces/AzureClient.py +137 -0
  310. flowtask/interfaces/AzureGraph.py +839 -0
  311. flowtask/interfaces/Boto3Client.py +326 -0
  312. flowtask/interfaces/DropboxClient.py +173 -0
  313. flowtask/interfaces/ExcelHandler.py +94 -0
  314. flowtask/interfaces/FTPClient.py +131 -0
  315. flowtask/interfaces/GoogleCalendar.py +201 -0
  316. flowtask/interfaces/GoogleClient.py +133 -0
  317. flowtask/interfaces/GoogleDrive.py +127 -0
  318. flowtask/interfaces/GoogleGCS.py +89 -0
  319. flowtask/interfaces/GoogleGeocoding.py +93 -0
  320. flowtask/interfaces/GoogleLang.py +114 -0
  321. flowtask/interfaces/GooglePub.py +61 -0
  322. flowtask/interfaces/GoogleSheet.py +68 -0
  323. flowtask/interfaces/IMAPClient.py +137 -0
  324. flowtask/interfaces/O365Calendar.py +113 -0
  325. flowtask/interfaces/O365Client.py +220 -0
  326. flowtask/interfaces/OneDrive.py +284 -0
  327. flowtask/interfaces/Outlook.py +155 -0
  328. flowtask/interfaces/ParrotBot.py +130 -0
  329. flowtask/interfaces/SSHClient.py +378 -0
  330. flowtask/interfaces/Sharepoint.py +496 -0
  331. flowtask/interfaces/__init__.py +36 -0
  332. flowtask/interfaces/azureauth.py +119 -0
  333. flowtask/interfaces/cache.py +201 -0
  334. flowtask/interfaces/client.py +82 -0
  335. flowtask/interfaces/compress.py +525 -0
  336. flowtask/interfaces/credentials.py +124 -0
  337. flowtask/interfaces/d2l.py +239 -0
  338. flowtask/interfaces/databases/__init__.py +5 -0
  339. flowtask/interfaces/databases/db.py +223 -0
  340. flowtask/interfaces/databases/documentdb.py +55 -0
  341. flowtask/interfaces/databases/rethink.py +39 -0
  342. flowtask/interfaces/dataframes/__init__.py +11 -0
  343. flowtask/interfaces/dataframes/abstract.py +21 -0
  344. flowtask/interfaces/dataframes/arrow.py +71 -0
  345. flowtask/interfaces/dataframes/dt.py +69 -0
  346. flowtask/interfaces/dataframes/pandas.py +167 -0
  347. flowtask/interfaces/dataframes/polars.py +60 -0
  348. flowtask/interfaces/db.py +263 -0
  349. flowtask/interfaces/env.py +46 -0
  350. flowtask/interfaces/func.py +137 -0
  351. flowtask/interfaces/http.py +1780 -0
  352. flowtask/interfaces/locale.py +40 -0
  353. flowtask/interfaces/log.py +75 -0
  354. flowtask/interfaces/mask.py +143 -0
  355. flowtask/interfaces/notification.py +154 -0
  356. flowtask/interfaces/playwright.py +339 -0
  357. flowtask/interfaces/powerpoint.py +368 -0
  358. flowtask/interfaces/py.typed +0 -0
  359. flowtask/interfaces/qs.py +376 -0
  360. flowtask/interfaces/result.py +87 -0
  361. flowtask/interfaces/selenium_service.py +779 -0
  362. flowtask/interfaces/smartsheet.py +154 -0
  363. flowtask/interfaces/stat.py +39 -0
  364. flowtask/interfaces/task.py +96 -0
  365. flowtask/interfaces/template.py +118 -0
  366. flowtask/interfaces/vectorstores/__init__.py +1 -0
  367. flowtask/interfaces/vectorstores/abstract.py +133 -0
  368. flowtask/interfaces/vectorstores/milvus.py +669 -0
  369. flowtask/interfaces/zammad.py +107 -0
  370. flowtask/models.py +193 -0
  371. flowtask/parsers/__init__.py +15 -0
  372. flowtask/parsers/_yaml.c +11978 -0
  373. flowtask/parsers/_yaml.cpython-312-x86_64-linux-gnu.so +0 -0
  374. flowtask/parsers/argparser.py +235 -0
  375. flowtask/parsers/base.c +15155 -0
  376. flowtask/parsers/base.cpython-312-x86_64-linux-gnu.so +0 -0
  377. flowtask/parsers/json.c +11968 -0
  378. flowtask/parsers/json.cpython-312-x86_64-linux-gnu.so +0 -0
  379. flowtask/parsers/maps.py +49 -0
  380. flowtask/parsers/toml.c +11968 -0
  381. flowtask/parsers/toml.cpython-312-x86_64-linux-gnu.so +0 -0
  382. flowtask/plugins/__init__.py +16 -0
  383. flowtask/plugins/components/__init__.py +0 -0
  384. flowtask/plugins/handler/__init__.py +45 -0
  385. flowtask/plugins/importer.py +31 -0
  386. flowtask/plugins/sources/__init__.py +0 -0
  387. flowtask/runner.py +283 -0
  388. flowtask/scheduler/__init__.py +9 -0
  389. flowtask/scheduler/functions.py +493 -0
  390. flowtask/scheduler/handlers/__init__.py +8 -0
  391. flowtask/scheduler/handlers/manager.py +504 -0
  392. flowtask/scheduler/handlers/models.py +58 -0
  393. flowtask/scheduler/handlers/service.py +72 -0
  394. flowtask/scheduler/notifications.py +65 -0
  395. flowtask/scheduler/scheduler.py +993 -0
  396. flowtask/services/__init__.py +0 -0
  397. flowtask/services/bots/__init__.py +0 -0
  398. flowtask/services/bots/telegram.py +264 -0
  399. flowtask/services/files/__init__.py +11 -0
  400. flowtask/services/files/manager.py +522 -0
  401. flowtask/services/files/model.py +37 -0
  402. flowtask/services/files/service.py +767 -0
  403. flowtask/services/jira/__init__.py +3 -0
  404. flowtask/services/jira/jira_actions.py +191 -0
  405. flowtask/services/tasks/__init__.py +13 -0
  406. flowtask/services/tasks/launcher.py +213 -0
  407. flowtask/services/tasks/manager.py +323 -0
  408. flowtask/services/tasks/service.py +275 -0
  409. flowtask/services/tasks/task_manager.py +376 -0
  410. flowtask/services/tasks/tasks.py +155 -0
  411. flowtask/storages/__init__.py +16 -0
  412. flowtask/storages/exceptions.py +12 -0
  413. flowtask/storages/files/__init__.py +8 -0
  414. flowtask/storages/files/abstract.py +29 -0
  415. flowtask/storages/files/filesystem.py +66 -0
  416. flowtask/storages/tasks/__init__.py +19 -0
  417. flowtask/storages/tasks/abstract.py +26 -0
  418. flowtask/storages/tasks/database.py +33 -0
  419. flowtask/storages/tasks/filesystem.py +108 -0
  420. flowtask/storages/tasks/github.py +119 -0
  421. flowtask/storages/tasks/memory.py +45 -0
  422. flowtask/storages/tasks/row.py +25 -0
  423. flowtask/tasks/__init__.py +0 -0
  424. flowtask/tasks/abstract.py +526 -0
  425. flowtask/tasks/command.py +118 -0
  426. flowtask/tasks/pile.py +486 -0
  427. flowtask/tasks/py.typed +0 -0
  428. flowtask/tasks/task.py +778 -0
  429. flowtask/template/__init__.py +161 -0
  430. flowtask/tests.py +257 -0
  431. flowtask/types/__init__.py +8 -0
  432. flowtask/types/typedefs.c +11347 -0
  433. flowtask/types/typedefs.cpython-312-x86_64-linux-gnu.so +0 -0
  434. flowtask/utils/__init__.py +24 -0
  435. flowtask/utils/constants.py +117 -0
  436. flowtask/utils/encoders.py +21 -0
  437. flowtask/utils/executor.py +112 -0
  438. flowtask/utils/functions.cpp +14280 -0
  439. flowtask/utils/functions.cpython-312-x86_64-linux-gnu.so +0 -0
  440. flowtask/utils/json.cpp +13349 -0
  441. flowtask/utils/json.cpython-312-x86_64-linux-gnu.so +0 -0
  442. flowtask/utils/mail.py +63 -0
  443. flowtask/utils/parseqs.c +13324 -0
  444. flowtask/utils/parserqs.cpython-312-x86_64-linux-gnu.so +0 -0
  445. flowtask/utils/stats.py +308 -0
  446. flowtask/utils/transformations.py +74 -0
  447. flowtask/utils/uv.py +12 -0
  448. flowtask/utils/validators.py +97 -0
  449. flowtask/version.py +11 -0
  450. flowtask-5.8.4.dist-info/LICENSE +201 -0
  451. flowtask-5.8.4.dist-info/METADATA +209 -0
  452. flowtask-5.8.4.dist-info/RECORD +470 -0
  453. flowtask-5.8.4.dist-info/WHEEL +6 -0
  454. flowtask-5.8.4.dist-info/entry_points.txt +3 -0
  455. flowtask-5.8.4.dist-info/top_level.txt +2 -0
  456. plugins/components/CreateQR.py +39 -0
  457. plugins/components/TestComponent.py +28 -0
  458. plugins/components/Use1.py +13 -0
  459. plugins/components/Workplace.py +117 -0
  460. plugins/components/__init__.py +3 -0
  461. plugins/sources/__init__.py +0 -0
  462. plugins/sources/get_populartimes.py +78 -0
  463. plugins/sources/google.py +150 -0
  464. plugins/sources/hubspot.py +679 -0
  465. plugins/sources/icims.py +679 -0
  466. plugins/sources/mobileinsight.py +501 -0
  467. plugins/sources/newrelic.py +262 -0
  468. plugins/sources/uap.py +268 -0
  469. plugins/sources/venu.py +244 -0
  470. plugins/sources/vocinity.py +314 -0
@@ -0,0 +1,401 @@
1
+ from typing import Optional, Any, Union
2
+ from collections.abc import Callable
3
+ from abc import ABC, abstractmethod
4
+ import asyncio
5
+ import random
6
+ from pathlib import Path, PurePath
7
+ import aiohttp
8
+ import orjson
9
+ from navconfig import config
10
+ from navconfig.logging import logging
11
+ from asyncdb.utils.types import SafeDict
12
+ from asyncdb.drivers.base import BaseDriver
13
+ from aiohttp.client_exceptions import ContentTypeError
14
+ from ..exceptions import ComponentError, DataNotFound
15
+ from ..utils import fnExecutor
16
+ from ..utils.constants import get_constant, get_func_value, is_constant, is_function
17
+ from ..interfaces import (
18
+ FuncSupport,
19
+ DBSupport,
20
+ MaskSupport,
21
+ LogSupport,
22
+ ResultSupport,
23
+ StatSupport,
24
+ LocaleSupport,
25
+ )
26
+ from ..interfaces.dataframes import PandasDataframe
27
+ from ..interfaces.http import ua
28
+ from .abstract import AbstractFlow
29
+
30
+
31
+ class UserComponent(
32
+ DBSupport,
33
+ FuncSupport,
34
+ MaskSupport,
35
+ LogSupport,
36
+ ResultSupport,
37
+ StatSupport,
38
+ LocaleSupport,
39
+ PandasDataframe,
40
+ AbstractFlow
41
+ ):
42
+ """
43
+ UserComponent
44
+ Abstract Base Component for User-defined Components.
45
+ """
46
+
47
+ def __init__(
48
+ self,
49
+ loop: asyncio.AbstractEventLoop = None,
50
+ job: Optional[Callable] = None,
51
+ stat: Optional[Callable] = None,
52
+ **kwargs,
53
+ ):
54
+ # stats object:
55
+ self._memory: Optional[BaseDriver] = None
56
+ self.StepName: Optional[str] = None
57
+
58
+ self._variables: dict = {} # variables
59
+ self._vars = {} # other vars
60
+ self._mask = {} # masks for function replacing
61
+ self._params = {} # other parameters
62
+ self._ua = random.choice(ua) # rotating UA
63
+ self._filestore: Any = None
64
+ self._retry_count: int = 0
65
+ self.encoding: str = "UTF-8"
66
+ self.accept: str = "application/xhtml+xml"
67
+ ## Function Support
68
+ super().__init__(
69
+ loop=loop,
70
+ job=job,
71
+ stat=stat,
72
+ **kwargs
73
+ )
74
+ # Config Environment
75
+ try:
76
+ self._environment = kwargs["ENV"]
77
+ del kwargs["ENV"]
78
+ except (KeyError, AttributeError):
79
+ self._environment = config
80
+ # program
81
+ try:
82
+ self._program = kwargs["program"]
83
+ del kwargs["program"]
84
+ except KeyError:
85
+ self._program = "navigator"
86
+ # getting the Task Pile (components pile)
87
+ self._TaskPile = kwargs.pop(
88
+ "TaskPile",
89
+ {}
90
+ )
91
+ if self._TaskPile:
92
+ setattr(self, "TaskPile", self._TaskPile)
93
+ # Template Parser
94
+ try:
95
+ self._tplparser = kwargs["template"]
96
+ del kwargs["template"]
97
+ except KeyError:
98
+ self._tplparser = None
99
+ # for changing vars (in components with "vars" feature):
100
+ try:
101
+ self._vars = kwargs["_vars"]
102
+ del kwargs["_vars"]
103
+ except KeyError:
104
+ pass
105
+ # memcache connector
106
+ try:
107
+ self._memory = kwargs["memory"]
108
+ del kwargs["memory"]
109
+ except KeyError:
110
+ try:
111
+ self._memory = self._vars["memory"]
112
+ del self._vars["memory"]
113
+ except KeyError:
114
+ pass
115
+ # attributes (root-level of component arguments):
116
+ try:
117
+ self._attributes = kwargs["attributes"]
118
+ del kwargs["attributes"]
119
+ except KeyError:
120
+ self._attributes = {}
121
+ # conditions:
122
+ if "conditions" in kwargs:
123
+ self.conditions: dict = kwargs.pop("conditions", {})
124
+ # params:
125
+ try:
126
+ self._params = kwargs["params"]
127
+ del kwargs["params"]
128
+ except KeyError:
129
+ self._params = {}
130
+ # parameters
131
+ try:
132
+ self._parameters = kwargs["parameters"]
133
+ del kwargs["parameters"]
134
+ except KeyError:
135
+ self._parameters = []
136
+ # arguments list
137
+ self._arguments = kwargs.pop(
138
+ "arguments",
139
+ []
140
+ )
141
+ # processing variables
142
+ try:
143
+ variables = kwargs["variables"]
144
+ del kwargs["variables"]
145
+ if isinstance(variables, str):
146
+ try:
147
+ variables = orjson.loads(variables)
148
+ except ValueError:
149
+ try:
150
+ variables = dict(x.split(":") for x in variables.split(","))
151
+ except (TypeError, ValueError, IndexError):
152
+ variables = {}
153
+ if variables:
154
+ for arg, val in variables.items():
155
+ self._variables[arg] = val
156
+ except KeyError:
157
+ pass
158
+ # previous Job has variables, need to update from existing
159
+ if job:
160
+ self._component = job
161
+ if isinstance(job, list):
162
+ self._multi = True
163
+ variables = {}
164
+ for j in job:
165
+ variables = {**variables, **j.variables}
166
+ try:
167
+ self._variables = {**self._variables, **variables}
168
+ except Exception as err:
169
+ print(err)
170
+ else:
171
+ try:
172
+ self._variables = {**self._variables, **job.variables}
173
+ except Exception as err:
174
+ logging.error(f"User Component Error: {err}")
175
+ # mask processing:
176
+ try:
177
+ masks = kwargs["_masks"]
178
+ del kwargs["_masks"]
179
+ except KeyError:
180
+ masks = {}
181
+ # filling Masks:
182
+ if "masks" in kwargs:
183
+ self._mask = kwargs["masks"]
184
+ del kwargs["masks"]
185
+ object.__setattr__(self, "masks", self._mask)
186
+ for mask, replace in masks.items():
187
+ self._mask[mask] = replace # override component's masks
188
+ try:
189
+ for mask, replace in self._mask.items():
190
+ # first: making replacement of masks based on vars:
191
+ try:
192
+ if mask in self._variables:
193
+ value = self._variables[mask]
194
+ else:
195
+ value = replace.format(**self._variables)
196
+ except Exception as err:
197
+ value = replace
198
+ value = fnExecutor(value, env=self._environment)
199
+ self._mask[mask] = value
200
+ except Exception as err:
201
+ logging.debug(f"Mask Error: {err}")
202
+ try:
203
+ self._params = {**self._params, **kwargs}
204
+ except (TypeError, ValueError):
205
+ pass
206
+ ## parameters:
207
+ for arg, val in self._params.items():
208
+ # print('ALL PARAMETERS: ', arg, val)
209
+ try:
210
+ if arg == "no-worker":
211
+ continue
212
+ if arg == self.StepName:
213
+ values = dict(x.split(":") for x in self._params[arg].split(","))
214
+ for key, value in values.items():
215
+ self._params[key] = value
216
+ object.__setattr__(self, key, value)
217
+ elif arg not in ["program", "TaskPile", "TaskName", "StepName"]:
218
+ try:
219
+ setattr(self, arg, val)
220
+ except Exception as err:
221
+ logging.warning(f"UserComponent: Wrong Parameter: {arg}={val}")
222
+ logging.exception(err)
223
+ except (AttributeError, KeyError) as err:
224
+ self._logger.error(err)
225
+ # Localization
226
+ LocaleSupport.__init__(self, **kwargs)
227
+ # processing the variables:
228
+ if hasattr(self, "vars"):
229
+ for key, val in self._vars.items():
230
+ if key in self.vars:
231
+ self.vars[key] = val
232
+
233
+ def config(self, key, default: Any = None) -> Any:
234
+ return self._environment.get(key, fallback=default)
235
+
236
+ def __str__(self):
237
+ return f"{type(self).__name__}"
238
+
239
+ def __repr__(self):
240
+ return f"<{type(self).__name__}>"
241
+
242
+ def set_filestore(self, store):
243
+ if not store:
244
+ raise RuntimeError(
245
+ "Unable to detect File Storage."
246
+ )
247
+ self._filestore = store
248
+
249
+ def set_taskstore(self, store):
250
+ self._taskstore = store
251
+
252
+ def SetPile(self, pile):
253
+ self._TaskPile = pile
254
+
255
+ # Abstract Context Methods:
256
+ async def __aenter__(self):
257
+ if not self._started:
258
+ await self.start()
259
+ return self
260
+
261
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
262
+ try:
263
+ await self.close()
264
+ except Exception as exc:
265
+ self._logger.warning(
266
+ f"Error Closing Component: {exc!s}"
267
+ )
268
+ return self
269
+
270
+ @property
271
+ def variables(self):
272
+ return self._variables
273
+
274
+ @variables.setter
275
+ def variables(self, value):
276
+ self._variables = value
277
+
278
+ def user_params(self):
279
+ return self._params
280
+
281
+ @abstractmethod
282
+ async def start(self, **kwargs):
283
+ """
284
+ start.
285
+ Initialize (if needed) a task
286
+ """
287
+
288
+ @abstractmethod
289
+ async def run(self):
290
+ """
291
+ run.
292
+ Close (if needed) a task
293
+ """
294
+
295
+ @abstractmethod
296
+ async def close(self):
297
+ """
298
+ close.
299
+ Close (if needed) a task
300
+ """
301
+
302
+ def set_conditions(self, name: str = "conditions"):
303
+ if hasattr(self, name):
304
+ obj = getattr(self, name)
305
+ for condition, val in obj.items():
306
+ if hasattr(self, condition):
307
+ obj[condition] = getattr(self, condition)
308
+ elif is_constant(val):
309
+ obj[condition] = get_constant(val)
310
+ elif is_function(val):
311
+ obj[condition] = get_func_value(val)
312
+ if condition in self._variables:
313
+ obj[condition] = self._variables[condition]
314
+ if condition in self._mask:
315
+ obj[condition] = self._mask[condition]
316
+ if "pattern" in obj:
317
+ # getting conditions as patterns
318
+ pattern = obj["pattern"]
319
+ del obj["pattern"]
320
+ for field in pattern:
321
+ if field in self._params:
322
+ obj[field] = self._params[field]
323
+ else:
324
+ result = None
325
+ val = pattern[field]
326
+ result = self.getFunc(val)
327
+ obj[field] = result
328
+ if self.conditions:
329
+ for k, v in self.conditions.items():
330
+ # print('NEW CONDITION: ', k, v)
331
+ result = v
332
+ try:
333
+ if is_constant(v):
334
+ result = get_constant(v)
335
+ elif is_function(v):
336
+ result = get_func_value(v)
337
+ except Exception as err:
338
+ logging.exception(err)
339
+ obj[k] = result
340
+
341
+ def set_variables(self, obj):
342
+ return obj.format_map(SafeDict(**self._variables))
343
+
344
+ async def session(
345
+ self,
346
+ url: str,
347
+ method: str = "get",
348
+ headers: Optional[dict] = None,
349
+ auth: Optional[dict] = None,
350
+ data: Optional[dict] = None,
351
+ ):
352
+ """
353
+ session.
354
+ connect to an http source using aiohttp
355
+ """
356
+ timeout = aiohttp.ClientTimeout(total=self.timeout)
357
+ proxy = None
358
+ hdrs = {
359
+ "Accept": self.accept,
360
+ "Accept-Encoding": "gzip, deflate",
361
+ "DNT": "1",
362
+ "Connection": "keep-alive",
363
+ "Upgrade-Insecure-Requests": "1",
364
+ "User-Agent": self._ua,
365
+ }
366
+ if headers:
367
+ hdrs = {**hdrs, **headers}
368
+ self._logger.debug(f"Session URL: {url}")
369
+ async with aiohttp.ClientSession(auth) as session:
370
+ if method == "get":
371
+ obj = session.get(url, headers=hdrs, timeout=timeout, proxy=proxy)
372
+ elif method == "post":
373
+ obj = session.post(
374
+ url, headers=hdrs, timeout=timeout, proxy=proxy, data=data
375
+ )
376
+ async with obj as response:
377
+ if (status := response.status) not in (200, 204, 203, 206, 404):
378
+ if hasattr(self, "retry"):
379
+ # retrying the self.session
380
+ self._logger.warning(
381
+ f"Retrying Session: status: {status}, {response}"
382
+ )
383
+ await asyncio.sleep(1.5)
384
+ self._retry_count += 1
385
+ if self._retry_count < 3:
386
+ self.add_metric("RETRIES", self._retry_count)
387
+ return await self.session(
388
+ url,
389
+ method=method,
390
+ headers=headers,
391
+ auth=auth,
392
+ data=data,
393
+ )
394
+ raise ComponentError(
395
+ f"Error on Session: status: {status}, {response}"
396
+ )
397
+ self._retry_count = 0
398
+ try:
399
+ return await response.json()
400
+ except ContentTypeError:
401
+ return await response.text()