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,501 @@
1
+ from typing import Any
2
+ from datetime import datetime
3
+ from urllib.parse import urlencode
4
+ import pytz
5
+ import urllib3
6
+ from navconfig.logging import logging
7
+ from asyncdb.exceptions import ProviderError, NoDataFound
8
+ from querysource.providers.sources import restSource
9
+
10
+
11
+ urllib3.disable_warnings()
12
+ logging.getLogger("urllib3").setLevel(logging.WARNING)
13
+
14
+ class mobileinsight(restSource):
15
+ """
16
+ Vision mobileinsight
17
+ Get all information from Vision API
18
+ """
19
+ base_url:str = 'http://{api_url}/api/organizations/{orgid}/'
20
+ login_url = 'https://{api_url}/api/authenticate'
21
+ token_type: str = 'Bearer'
22
+ _saved_token: str = 'navigator_mobileinsight_token'
23
+ auth_type: str = 'api_key'
24
+ auth: bool = True
25
+ method:str = 'GET'
26
+ timeout: int = 60
27
+ use_redis: bool = True
28
+
29
+ def __init__(
30
+ self,
31
+ definition: dict = None,
32
+ conditions: dict = None,
33
+ request: Any = None, **kwargs
34
+ ):
35
+ self._orgid = None
36
+ self._formid = None
37
+ super(mobileinsight, self).__init__(definition, conditions, request, **kwargs)
38
+
39
+ args = self._args
40
+ self._conditions = conditions
41
+
42
+ try:
43
+ self.type = definition.params['type']
44
+ except (ValueError, AttributeError):
45
+ self.type = None
46
+
47
+ if 'type' in kwargs:
48
+ self.type = kwargs['type']
49
+ del kwargs['type']
50
+
51
+ if 'type' in conditions:
52
+ self.type = conditions['type']
53
+ del conditions['type']
54
+
55
+ # Authentication
56
+ if 'user' in conditions:
57
+ self._user = conditions['user']
58
+ self._pwd = conditions['password']
59
+ del conditions['user']
60
+ del conditions['password']
61
+ else:
62
+ self._user = self._env.get('MOBILEINSIGHT_API_USER')
63
+ self._pwd = self._env.get('MOBILEINSIGHT_API_PASSWORD')
64
+ if self._user is None:
65
+ try:
66
+ self._user = definition.params['user']
67
+ self._pwd = definition.params['password']
68
+ except (ValueError, AttributeError) as ex:
69
+ raise ValueError(
70
+ "MobileInsight: Authentication missing"
71
+ ) from ex
72
+
73
+ try:
74
+ args['orgid'] = conditions['orgid']
75
+ del conditions['orgid']
76
+ except (ValueError, KeyError):
77
+ try:
78
+ args['orgid'] = definition.params['orgid']
79
+ except (ValueError, AttributeError) as ex:
80
+ raise ValueError(
81
+ "MobileInsight: No Organization ID defined"
82
+ ) from ex
83
+
84
+ # Organization ID:
85
+ self._orgid = args['orgid']
86
+
87
+ args['api_url'] = self._env.get(
88
+ 'MOBILEINSIGHT_API',
89
+ fallback='api.mobileinsight.com'
90
+ )
91
+ self.login_url = self.login_url.format(**args)
92
+
93
+ if self.type in ('activities', 'formdata'):
94
+ try:
95
+ tz = pytz.timezone('UTC')
96
+ dt1 = datetime.strptime(conditions['startdate'], "%Y-%m-%dT%H:%M:%S")
97
+ dt1 = tz.localize(dt1, is_dst=None)
98
+ conditions['startdate'] = dt1.strftime("%Y-%m-%d %H:%M:%S%z")
99
+
100
+ dt2 = datetime.strptime(conditions['enddate'], "%Y-%m-%dT%H:%M:%S")
101
+ dt2 = tz.localize(dt2, is_dst=None)
102
+ conditions['enddate'] = dt2.strftime("%Y-%m-%d %H:%M:%S%z")
103
+
104
+ self._startdate = conditions['startdate']
105
+ self._enddate = conditions['enddate']
106
+
107
+ conditions['startDateTimeInMilli'] = int((dt1 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()) * 1000
108
+ conditions['endDateTimeInMilli'] = int((dt2 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()) * 1000
109
+
110
+ except Exception as err:
111
+ logging.info(
112
+ f"mobileinsight API: wrong date format: {err}"
113
+ )
114
+ raise ProviderError(
115
+ f"MobileInsight API: wrong date format: {err}"
116
+ ) from err
117
+
118
+ # remove unused conditions
119
+ try:
120
+ del conditions['startdate']
121
+ del conditions['enddate']
122
+ del conditions['refresh']
123
+ del conditions['ENV']
124
+ del conditions['dwh']
125
+ except (KeyError, ValueError, TypeError):
126
+ pass
127
+
128
+ if self.type == 'formdata':
129
+ try:
130
+ self._args['formid'] = conditions['formid']
131
+ del conditions['formid']
132
+ except (ValueError, KeyError):
133
+ try:
134
+ args['formid'] = definition.params['formid']
135
+ except (ValueError, KeyError) as ex:
136
+ raise KeyError(
137
+ "MobileInsight: No form ID passed, form Id needed"
138
+ ) from ex
139
+ self._formid = args['formid']
140
+ self.url = 'http://{api_url}/api/organizations/{orgid}/views/formData/{formid}'
141
+
142
+ elif self.type == 'activities':
143
+ self.url = 'http://{api_url}/api/organizations/{orgid}/views/activities'
144
+ else:
145
+ logging.error(f'Wrong MI API {self.type}')
146
+ # other conditions
147
+ elif self.type == 'activities_list':
148
+ self.url = 'http://{api_url}/api/organizations/{orgid}/activities'
149
+ elif self.type == 'forms':
150
+ self.url = 'http://{api_url}/api/organizations/{orgid}/forms/allForms'
151
+ try:
152
+ del conditions['refresh']
153
+ except (KeyError, ValueError, TypeError):
154
+ pass
155
+ elif self.type == 'photo_categories':
156
+ self.url = 'https://{api_url}/api/organizations/{orgid}/photos/categories'
157
+ elif self.type == 'metadata':
158
+ try:
159
+ args['formid'] = conditions['formid']
160
+ del conditions['formid']
161
+ except (ValueError, KeyError):
162
+ try:
163
+ args['formid'] = definition.params['formid']
164
+ except (ValueError, AttributeError) as ex:
165
+ raise KeyError(
166
+ "MobileInsight: No form ID passed, form Id needed"
167
+ ) from ex
168
+ self._formid = args['formid']
169
+
170
+ self.url = 'http://{api_url}/api/organizations/{orgid}/views/formMetaData/{formid}'
171
+ elif self.type == 'store_types':
172
+ self.url = 'http://{api_url}/api/organizations/{orgid}/storeTypes'
173
+ try:
174
+ del conditions['refresh']
175
+ except (KeyError, ValueError, TypeError):
176
+ pass
177
+ conditions = {}
178
+ elif self.type == 'stores':
179
+ self.timeout = 20
180
+ self.url = 'http://{api_url}/api/organizations/{orgid}/stores'
181
+ try:
182
+ del conditions['refresh']
183
+ except (KeyError, ValueError, TypeError):
184
+ pass
185
+ if 'pageSize' not in conditions:
186
+ conditions["pageSize"] = 100
187
+ elif self.type == 'store_designations':
188
+ self.url = 'http://{api_url}/api/organizations/{orgid}/storeDesignations'
189
+ try:
190
+ del conditions['refresh']
191
+ except (KeyError, ValueError, AttributeError):
192
+ pass
193
+ conditions = {}
194
+ elif self.type == 'geographies':
195
+ self.url = 'http://{api_url}/api/organizations/{orgid}/geographies'
196
+ try:
197
+ del conditions['refresh']
198
+ except (KeyError, ValueError, TypeError):
199
+ pass
200
+ conditions = {}
201
+ elif self.type == 'account_names':
202
+ self.url = 'http://{api_url}/api/organizations/{orgid}/accounts'
203
+ try:
204
+ del conditions['refresh']
205
+ except (KeyError, ValueError, TypeError):
206
+ pass
207
+ conditions = {}
208
+ elif self.type == 'clients':
209
+ self.url = 'http://{api_url}/api/organizations/{orgid}/clients'
210
+ try:
211
+ del conditions['refresh']
212
+ except (KeyError, ValueError, TypeError):
213
+ pass
214
+ conditions = {}
215
+ elif self.type == 'projects':
216
+ self.url = 'http://{api_url}/api/organizations/{orgid}/projects'
217
+ try:
218
+ del conditions['refresh']
219
+ except (KeyError, ValueError, TypeError):
220
+ pass
221
+ conditions = {}
222
+ elif self.type == 'endpoints':
223
+ self.url = 'http://{api_url}/api/organizations/{orgid}/endpoints'
224
+ try:
225
+ del conditions['refresh']
226
+ except (KeyError, ValueError, TypeError):
227
+ pass
228
+ conditions = {}
229
+ elif self.type == 'users':
230
+ self.url = 'http://{api_url}/api/organizations/{orgid}/users'
231
+ try:
232
+ del conditions['refresh']
233
+ except (KeyError, ValueError, TypeError):
234
+ pass
235
+ conditions = {}
236
+ elif self.type == 'users_details':
237
+ self.url = 'http://{api_url}/api/organizations/{orgid}/users/vocinityUserDetails'
238
+ try:
239
+ del conditions['refresh']
240
+ except (KeyError, ValueError, TypeError):
241
+ pass
242
+ conditions = {}
243
+ elif self.type == 'roles':
244
+ self.url = 'http://{api_url}/api/organizations/{orgid}/roles'
245
+ try:
246
+ del conditions['refresh']
247
+ except (KeyError, ValueError, TypeError):
248
+ pass
249
+ conditions = {}
250
+ elif self.type == 'storeprojects':
251
+ self.url = 'http://{api_url}/api/organizations/{orgid}/projects/storeToProjects/{store_id}'
252
+ try:
253
+ del conditions['refresh']
254
+ except (KeyError, ValueError, TypeError):
255
+ pass
256
+ elif self.type == 'photos':
257
+ self.timeout = 120
258
+ self.url = 'http://{api_url}/api/organizations/{orgid}/photoViewItems'
259
+ if 'startdate' in conditions:
260
+ conditions['visitDateFrom'] = conditions['startdate']
261
+ del conditions['startdate']
262
+ if 'enddate' in conditions:
263
+ conditions['visitDateTo'] = conditions['enddate']
264
+ del conditions['enddate']
265
+ try:
266
+ del conditions['refresh']
267
+ except (KeyError, ValueError, TypeError):
268
+ pass
269
+ ## set args:
270
+ self._args = args
271
+
272
+ async def formdata(self):
273
+ self.url = 'http://{api_url}/api/organizations/{orgid}/views/formData/{formid}'
274
+ self.type = 'formdata'
275
+ ## ID of Form
276
+ try:
277
+ self._args['formid'] = self._conditions['formid']
278
+ del self._conditions['formid']
279
+ except (ValueError, KeyError) as ex:
280
+ raise KeyError(
281
+ "MobileInsight: No form ID passed, form Id needed"
282
+ ) from ex
283
+ self._formid = self._args['formid']
284
+ ### start and end
285
+ try:
286
+ tz = pytz.timezone('UTC')
287
+ dt1 = datetime.strptime(self._conditions['startdate'], "%Y-%m-%dT%H:%M:%S")
288
+ dt1 = tz.localize(dt1, is_dst=None)
289
+ self._conditions['startdate'] = dt1.strftime("%Y-%m-%d %H:%M:%S%z")
290
+
291
+ dt2 = datetime.strptime(self._conditions['enddate'], "%Y-%m-%dT%H:%M:%S")
292
+ dt2 = tz.localize(dt2, is_dst=None)
293
+ self._conditions['enddate'] = dt2.strftime("%Y-%m-%d %H:%M:%S%z")
294
+
295
+ self._startdate = self._conditions['startdate']
296
+ self._enddate = self._conditions['enddate']
297
+
298
+ self._conditions['startDateTimeInMilli'] = int((dt1 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()) * 1000
299
+ self._conditions['endDateTimeInMilli'] = int((dt2 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()) * 1000
300
+
301
+ except Exception as err:
302
+ logging.error(
303
+ f"mobileinsight API: wrong date format: {err}"
304
+ )
305
+ raise ValueError(
306
+ f"mobileinsight: Wrong Date Format: {err}"
307
+ ) from err
308
+
309
+ del self._conditions['startdate']
310
+ del self._conditions['enddate']
311
+ try:
312
+ del self._conditions['refresh']
313
+ except (KeyError, ValueError, TypeError):
314
+ pass
315
+ try:
316
+ self._result = await self.query()
317
+ return self._result
318
+ except Exception as err:
319
+ logging.exception(err)
320
+ raise
321
+
322
+ async def photos(self):
323
+ self.url = 'http://{api_url}/api/organizations/{orgid}/photoViewItems'
324
+ try:
325
+ if 'startdate' in self._conditions:
326
+ self._conditions['visitDateFrom'] = self._conditions['startdate']
327
+ del self._conditions['startdate']
328
+ if 'enddate' in self._conditions:
329
+ self._conditions['visitDateTo'] = self._conditions['enddate']
330
+ del self._conditions['enddate']
331
+ except (KeyError, ValueError, TypeError) as ex:
332
+ raise ValueError(
333
+ f"MobileInsight Photos: Missing Parameters: {ex}"
334
+ ) from ex
335
+ try:
336
+ del self._conditions['refresh']
337
+ except (KeyError, ValueError, TypeError):
338
+ pass
339
+ try:
340
+ self._result = await self.query()
341
+ return self._result
342
+ except Exception as err:
343
+ logging.exception(err)
344
+ raise
345
+
346
+ async def storeprojects(self):
347
+ self.url = 'http://{api_url}/api/organizations/{orgid}/projects/storeToProjects/{store_id}'
348
+ try:
349
+ del self._conditions['refresh']
350
+ except (KeyError, ValueError, TypeError):
351
+ pass
352
+ try:
353
+ # if not self._args['store_id']:
354
+ self._args['store_id'] = self._conditions['store_id']
355
+ del self._conditions['store_id']
356
+ except (KeyError, AttributeError) as ex:
357
+ raise ValueError(
358
+ "MobileInsight: Missing Store ID"
359
+ ) from ex
360
+ try:
361
+ self._result = await self.query()
362
+ return self._result
363
+ except Exception as err:
364
+ logging.exception(err)
365
+ raise
366
+
367
+ async def userprojects(self):
368
+ self.url = 'http://{api_url}/api/organizations/{orgid}/projects/userToProjects/{user_id}'
369
+ try:
370
+ del self._conditions['refresh']
371
+ except (KeyError, ValueError, TypeError):
372
+ pass
373
+ try:
374
+ self._args['user_id'] = self._conditions['user_id']
375
+ del self._conditions['user_id']
376
+ except (KeyError, AttributeError) as ex:
377
+ raise ValueError(
378
+ "MobileInsight: Missing User ID"
379
+ ) from ex
380
+ try:
381
+ self._result = await self.query()
382
+ return self._result
383
+ except Exception as err:
384
+ logging.exception(err)
385
+ raise
386
+
387
+ async def get_next_result(self, result):
388
+ # r = result['list'] # discarding previous data:
389
+ r = []
390
+ next = True
391
+ page = 0
392
+ num = 0
393
+ while next == True:
394
+ url = self.build_url(self.url, queryparams=urlencode({"pageNumber": page}))
395
+ print('Fetching page %s' % page)
396
+ page = page + 1
397
+ try:
398
+ res, error = await self.request(url)
399
+ if error:
400
+ print(error)
401
+ next = False
402
+ break
403
+ data = res['list']
404
+ num += len(data) + 1
405
+ if len(data) > 0:
406
+ r.extend(data)
407
+ else:
408
+ next = False
409
+ break
410
+ except Exception as err:
411
+ print('Error HERE')
412
+ print(err)
413
+ next = False
414
+ print(':: Returning Results')
415
+ # return OrderedDict((frozenset(item.items()),item) for item in r).values()
416
+ return [i for n, i in enumerate(r) if i not in r[n + 1:]]
417
+ # return r
418
+
419
+ async def query(self, url: str = None, params: dict = {}):
420
+ g = {}
421
+ if url:
422
+ self.url = self.build_url(url, queryparams=urlencode(params))
423
+ else:
424
+ # create URL
425
+ self.url = self.build_url(
426
+ self.url,
427
+ args=self._args,
428
+ queryparams=urlencode(self._conditions)
429
+ )
430
+ print(self.url)
431
+ ## getting auth token:
432
+ token = await self.jwt_token(user=self._user, password=self._pwd)
433
+ try:
434
+ result, error = await self.request(
435
+ self.url, self.method
436
+ )
437
+ if not result:
438
+ raise NoDataFound(f"No Data was found: {error}")
439
+ elif error:
440
+ raise ProviderError(str(error))
441
+ else:
442
+ try:
443
+ if result['errorCode']:
444
+ raise NoDataFound(result['errorMessage'], code=result['errorCode'])
445
+ except (TypeError, KeyError):
446
+ pass
447
+ if self.type == 'metadata' or self.type == 'activities_list':
448
+ self._result = result
449
+ elif self.type == 'forms' or self.type == 'activities' or self.type == 'users_details' or self.type == 'roles':
450
+ data = []
451
+ for form in result:
452
+ form['orgid'] = self._orgid
453
+ data.append(form)
454
+ self._result = data
455
+ elif self.type == 'account_names':
456
+ data = result['list']
457
+ for form in data:
458
+ form['orgid'] = self._orgid
459
+ self._result = data
460
+ elif self.type == 'stores' or self.type =='users' or self.type == 'endpoints' or self.type == 'photos':
461
+ # data = result['list']
462
+ self._result = await self.get_next_result(result)
463
+ elif self.type == 'formdata':
464
+ data = []
465
+ for formId, res in enumerate(result):
466
+ frmId = None
467
+ c = (formId + 1)
468
+ el = []
469
+ for form in res:
470
+ if form['columnName'] == 'FormVisitID':
471
+ frmId = form['data']
472
+ el.append({
473
+ 'formId': c,
474
+ 'columnName': form['columnName'],
475
+ 'data': form['data'],
476
+ 'startDate': self._startdate,
477
+ 'endDate': self._enddate,
478
+ 'orgid': self._orgid,
479
+ 'formid': self._formid
480
+ })
481
+ # update the key:
482
+ for d in el:
483
+ d.update((k, frmId) for k, v in d.items() if k == 'formId' and v == c)
484
+ data = data + el
485
+ self._result = data
486
+ else:
487
+ self._result = result
488
+ #raise NotSupported("mobileinsight Method not Supported", code=503)
489
+ except NoDataFound as err:
490
+ print("MOBILEINSIGHT NO DATA FOUND: === ", err)
491
+ #raise NoDataFound(err)
492
+ self._result = None
493
+ except ProviderError as err:
494
+ print("MOBILEINSIGHT PROVIDER ERROR: === ", err)
495
+ raise ProviderError(err.message, code=err.status_code)
496
+ except Exception as err:
497
+ print("MOBILEINSIGHT ERROR: === ", err)
498
+ self._result = None
499
+ raise ProviderError(str(result))
500
+ finally:
501
+ return self._result