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,44 @@
1
+ from typing import Optional
2
+ from datetime import datetime
3
+ from datamodel import Field
4
+ from .abstract import AbstractPayload
5
+ from .organization import Organization
6
+ from .client import Client
7
+
8
+
9
+ class Project(AbstractPayload):
10
+ """
11
+ NN Projects related to a Client.
12
+
13
+ Example payload:
14
+ "payload": {
15
+ "project_id": 595,
16
+ "project_name": "Test Program",
17
+ "is_active": true,
18
+ "start_timestamp": "2025-02-01T00:00:00-06:00",
19
+ "end_timestamp": "2025-02-28T00:00:00-06:00",
20
+ "inserted_at": "2025-01-30T19:19:40-06:00",
21
+ "updated_at": "2025-01-30T19:19:40-06:00",
22
+ "description": "",
23
+ "orgid": 69,
24
+ "client_id": 56,
25
+ "client_name": "EPSON"
26
+ }
27
+ """
28
+ project_id: int = Field(primary_key=True, required=True)
29
+ project_name: str
30
+ is_active: bool = Field(default=True)
31
+ start_timestamp: datetime
32
+ end_timestamp: datetime
33
+ inserted_at: datetime
34
+ updated_at: datetime
35
+ description: str
36
+ orgid: Optional[Organization]
37
+ client_id: Client
38
+ client_name: str
39
+
40
+ class Meta:
41
+ strict = True
42
+ as_objects = True
43
+ name = 'projects'
44
+ schema: str = 'networkninja'
@@ -0,0 +1,28 @@
1
+ from typing import Any
2
+ from datamodel import BaseModel, Field
3
+
4
+ class Region(BaseModel):
5
+ region_id: str = Field(required=False, alias='id')
6
+ region_name: str = Field(required=False, alias='name')
7
+ is_active: bool = Field(required=False, alias='active')
8
+ client_id: int
9
+ orgid: int
10
+
11
+ class Meta:
12
+ name: str = 'regions'
13
+ schema: str = 'networkninja'
14
+ strict: bool = True
15
+
16
+ # def create_region(
17
+ # name: str,
18
+ # value: Any,
19
+ # target_type: Any,
20
+ # parent_data: BaseModel
21
+ # ) -> Region:
22
+ # client_id = parent_data.get('client_id', None) if parent_data else None
23
+ # print('Parent Data: ', name, value, target_type, client_id)
24
+ # # return target_type(**args)
25
+ # return Region(region_id='1', region_name='Test Region')
26
+
27
+ # # TODO: To be implemented in Datamodel.
28
+ # BaseModel.register_parser(Region, create_region, 'region_name')
@@ -0,0 +1,203 @@
1
+ from typing import List, Optional, Union, Dict, Any
2
+ from datetime import datetime
3
+ from datamodel import BaseModel, Field
4
+ from slugify import slugify
5
+ from .abstract import AbstractPayload
6
+ from .organization import Organization
7
+ from .client import Client
8
+ from .region import Region
9
+ from .market import Market
10
+ from .district import District
11
+
12
+
13
+ class StoreGeography(AbstractPayload):
14
+ """
15
+ Store Geography Model.
16
+
17
+ Represents a store's geographical information.
18
+
19
+ Example:
20
+ {
21
+ "geoid": 479,
22
+ "region": "Assembly - Region",
23
+ "district": "Assembly - District",
24
+ "market": "136",
25
+ "company_id": 61,
26
+ "orgid": 71,
27
+ "client_id": 61,
28
+ "client_name": "ASSEMBLY"
29
+ }
30
+ """
31
+ geoid: int = Field(primary_key=True, required=True)
32
+ region: str
33
+ region_id: int
34
+ district_id: int
35
+ district: str
36
+ market_id: int
37
+ market: str
38
+ company_id: int
39
+ orgid: Organization
40
+ client_id: Client
41
+ client_name: str
42
+
43
+ class Meta:
44
+ strict = True
45
+ as_objects = True
46
+ name = 'stores_geographies'
47
+ schema: str = 'networkninja'
48
+
49
+ def __post_init__(self):
50
+ super().__post_init__()
51
+ self.client_id.client_name = self.client_name
52
+
53
+ class StoreType(AbstractPayload):
54
+ """
55
+ Store Type Model.
56
+
57
+ Represents a store type in the system.
58
+
59
+ Example:
60
+ {
61
+ "store_type_id": 1,
62
+ "store_type_name": "Retail",
63
+ "store_type_description": "Retail Store"
64
+ }
65
+ """
66
+ store_type_id: int = Field(primary_key=True, required=True)
67
+ store_type: str = Field(alias="store_type_name")
68
+ description: str
69
+ client_id: Client
70
+ client_name: str
71
+ status: bool = Field(default=True)
72
+
73
+ class Meta:
74
+ strict = True
75
+ as_objects = True
76
+ name = 'stores_types'
77
+ schema: str = 'networkninja'
78
+
79
+
80
+ class CustomStoreField(BaseModel):
81
+ """
82
+ Custom Field Model for Store.
83
+
84
+ Represents a custom field for a store.
85
+
86
+ Example:
87
+ {
88
+ "custom_id": 33,
89
+ "custom_name": "Store Name",
90
+ "custom_value": "Best Buy 4350",
91
+ "custom_orgid": null,
92
+ "custom_client_id": 1
93
+ }
94
+ """
95
+ store_id: int
96
+ custom_id: int = Field(primary_key=True, required=True)
97
+ name: str = Field(alias="custom_name")
98
+ column_name: Union[str, int]
99
+ value: Union[str, None] = Field(alias="custom_value")
100
+ obj_type: str = Field(alias="custom_type", default="Text")
101
+ orgid: int = Field(alias="custom_orgid")
102
+ client_id: str = Field(alias="custom_client_id")
103
+
104
+ class Meta:
105
+ name = 'stores_attributes'
106
+ schema: str = 'networkninja'
107
+
108
+ def __post_init__(self):
109
+ self.column_name = slugify(self.name, separator="_")
110
+ return super().__post_init__()
111
+
112
+ def get_field(self):
113
+ return {
114
+ self.column_name: self.value
115
+ }
116
+
117
+ def default_timezone(*args, **kwargs):
118
+ return "America/New_York"
119
+
120
+
121
+ class Store(AbstractPayload):
122
+ """
123
+ Store Model.
124
+
125
+ Represents a store in the system.
126
+
127
+ Example:
128
+ {
129
+ "store_name": "KILMARNOCK-4350",
130
+ "store_address": "200 Old Fair Grounds Way",
131
+ "city": "Kilmarnock",
132
+ "zipcode": "22482",
133
+ "phone_number": "804-435-6149",
134
+ }
135
+ """
136
+ store_number: int = Field(primary_key=True, required=True, alias='store_id')
137
+ store_id: Optional[str]
138
+ store_name: str
139
+ store_address: str
140
+ city: str
141
+ zipcode: str
142
+ phone_number: Optional[str]
143
+ email_address: str = Field(alias="emailAddress")
144
+ store_status: bool = Field(required=False, default=True)
145
+ latitude: float
146
+ longitude: float
147
+ location_code: str
148
+ timezone: str = Field(default=default_timezone)
149
+ account_id: int
150
+ account_name: str
151
+ client_id: int
152
+ client_name: str
153
+ country: str = Field(alias='country_id')
154
+ created_at: datetime = Field(default=datetime.now)
155
+ updated_at: datetime = Field(default=datetime.now)
156
+ store_type_id: StoreType
157
+ store_type: str = Field(alias="store_type_name")
158
+ visit_rule: List[str]
159
+ visit_category: List[str]
160
+ orgid: List[int] = Field(alias='orgids', default_factory=list)
161
+ custom_fields: List[CustomStoreField] = Field(default_factory=list)
162
+ client_id: List[int] = Field(alias='client_ids', default_factory=list)
163
+ client_name: List[str] = Field(alias='client_names', default_factory=list)
164
+ market_name: Optional[Dict[str, str]] = Field(required=False, alias='markets')
165
+ region_name: Optional[Dict[str, str]] = Field(required=False, alias='regions')
166
+ district_name: Optional[Dict[str, str]] = Field(required=False, alias='districts')
167
+ is_active: bool = Field(required=False, alias='store_is_active', default=True)
168
+
169
+ class Meta:
170
+ strict = True
171
+ as_objects = True
172
+ name = 'stores'
173
+ schema: str = 'networkninja'
174
+
175
+ def __post_init__(self):
176
+ super().__post_init__()
177
+ # geography
178
+ if self.market_name and isinstance(self.market_name, dict):
179
+ self.market_name = str(list(self.market_name.values())[0])
180
+ if self.region_name and isinstance(self.region_name, dict):
181
+ self.region_name = str(list(self.region_name.values())[0])
182
+ if self.district_name and isinstance(self.district_name, dict):
183
+ self.district_name = str(list(self.district_name.values())[0])
184
+ # client
185
+ if self.client_id and isinstance(self.client_id, list):
186
+ self.client_id = self.client_id[0]
187
+ if self.client_name and isinstance(self.client_name, list):
188
+ self.client_name = self.client_name[0]
189
+ # orgid:
190
+ if self.orgid and isinstance(self.orgid, list):
191
+ self.orgid = self.orgid[0]
192
+
193
+ async def _sync_object(self, conn):
194
+ """
195
+ Sync the organization with the Database.
196
+ """
197
+ query = f"""
198
+ select store_id, location_code FROM networkninja.stores where store_number = {self.store_number}
199
+ """
200
+ result = await conn.fetch_one(query)
201
+ if result:
202
+ self.store_id = result['store_id']
203
+ self.location_code = result['location_code']
@@ -0,0 +1,151 @@
1
+
2
+ import logging
3
+ from typing import List, Optional
4
+ from datetime import datetime
5
+ from datamodel import BaseModel, Field
6
+ from .abstract import AbstractPayload
7
+ from .organization import Organization
8
+ from .market import Market
9
+ from .district import District
10
+ from .region import Region
11
+ from .client import Client
12
+
13
+
14
+ class Role(AbstractPayload):
15
+ role_id: int = Field(primary_key=True, required=True)
16
+ client_id: int = Field(alias="role_client_id")
17
+ orgid: int = Field(alias="role_org_id")
18
+ role_name: str = Field(alias='name')
19
+ visit_id: int = Field(alias="role_visit_id")
20
+
21
+ class Meta:
22
+ strict = True
23
+ as_objects = True
24
+ name = 'roles'
25
+ schema: str = 'networkninja'
26
+
27
+ class User(AbstractPayload):
28
+ """
29
+ User Model.
30
+
31
+ Represents a user in the system.
32
+
33
+ Example:
34
+ {
35
+ "user_id": 1,
36
+ "username": "admin",
37
+ "employee_number": 1234,
38
+ "first_name": "John",
39
+ "last_name": "Doe",
40
+ "email": "
41
+ "mobile_number": "123-456-7890",
42
+ "role_id": 1,
43
+ "role_name": "Admin",
44
+ "address": "1234 Elm St",
45
+ "city": "Springfield",
46
+ "state_code": "IL",
47
+ "zipcode": "62704",
48
+ "latitude": 39.781721,
49
+ "longitude": -89.650148,
50
+ }
51
+ """
52
+ user_id: int = Field(primary_key=True, required=True)
53
+ username: str = Field(required=True)
54
+ employee_number: int
55
+ first_name: str
56
+ last_name: str
57
+ display_name: str
58
+ email_address: str = Field(alias="email")
59
+ mobile_number: str
60
+ position_id: Optional[str]
61
+ role_id: int
62
+ role_name: str
63
+ address: str
64
+ city: str
65
+ state_code: str = Field(alias="state_name")
66
+ zipcode: str
67
+ latitude: Optional[float]
68
+ longitude: Optional[float]
69
+ physical_country: Optional[str]
70
+ is_active: bool = Field(required=True, default=True)
71
+ orgid: List[int]
72
+ client_id: List[int] = Field(alias='client_ids', default_factory=list)
73
+ client_name: List[str] = Field(alias='client_names', default_factory=list)
74
+ markets: List[Market] = Field(default_factory=list)
75
+ districts: List[District] = Field(default_factory=list)
76
+ regions: List[Region] = Field(default_factory=list)
77
+
78
+ class Meta:
79
+ strict = True
80
+ as_objects = True
81
+ name = 'users'
82
+ schema: str = 'networkninja'
83
+
84
+ def __post_init__(self):
85
+ super().__post_init__()
86
+ if not self.display_name:
87
+ self.display_name = f'{self.first_name} {self.last_name}'
88
+ if self.display_name and not self.first_name:
89
+ self.first_name, self.last_name = self.display_name.split(' ')
90
+
91
+
92
+ class StaffingUser(AbstractPayload):
93
+ user_id: int = Field(primary_key=True, required=True, alias="id")
94
+ username: str = Field(required=True)
95
+ employee_number: str
96
+ first_name: str
97
+ last_name: str
98
+ display_name: str
99
+ email: str = Field(alias="email_address")
100
+ mobile_number: str
101
+ address: str
102
+ city: str
103
+ state_name: str = Field(alias="state")
104
+ physical_country: str
105
+ zipcode: str
106
+ position_id: Optional[str]
107
+ roles: List[Role] = Field(default_factory=list)
108
+ markets: List[Market] = Field(default_factory=list)
109
+ districts: List[District] = Field(default_factory=list)
110
+ regions: List[Region] = Field(default_factory=list)
111
+ orgid: List[int]
112
+ client_id: int
113
+ client_name: List[str] = Field(alias='client_names', default_factory=list)
114
+ clients: Optional[List[Client]] = Field(alias="client_ids", default_factory=list)
115
+ role_id: int
116
+ role_name: str
117
+ latitude: Optional[float]
118
+ longitude: Optional[float]
119
+ custom_fields: List[dict[str, str]]
120
+ onboarding: datetime
121
+ is_active: bool = Field(required=True, default=True)
122
+
123
+ class Meta:
124
+ strict = True
125
+ as_objects = True
126
+ name = 'staffing_users'
127
+ schema: str = 'networkninja'
128
+
129
+ def __post_init__(self):
130
+ super().__post_init__()
131
+ if not self.display_name:
132
+ self.display_name = f'{self.first_name} {self.last_name}'
133
+ if self.display_name and not self.first_name:
134
+ parts = self.display_name.split()
135
+ self.first_name, self.last_name = ' '.join(parts[:-1]), parts[-1]
136
+ if self.clients:
137
+ self.client_id = self.clients[0].client_id
138
+
139
+ # async def _sync_object(self, conn):
140
+ # """
141
+ # Sync Staffing User and dependencies.
142
+ # """
143
+ # # Sync Markets
144
+ # markets = []
145
+ # for market in self.markets:
146
+ # market.market_id = int(market.market_id)
147
+ # markets.append(market)
148
+ # if markets:
149
+ # await markets[0].update_many(
150
+ # markets
151
+ # )