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.
- flowtask/__init__.py +93 -0
- flowtask/__main__.py +38 -0
- flowtask/bots/__init__.py +6 -0
- flowtask/bots/check.py +93 -0
- flowtask/bots/codebot.py +51 -0
- flowtask/components/ASPX.py +148 -0
- flowtask/components/AddDataset.py +352 -0
- flowtask/components/Amazon.py +523 -0
- flowtask/components/AutoTask.py +314 -0
- flowtask/components/Azure.py +80 -0
- flowtask/components/AzureUsers.py +106 -0
- flowtask/components/BaseAction.py +91 -0
- flowtask/components/BaseLoop.py +198 -0
- flowtask/components/BestBuy.py +800 -0
- flowtask/components/CSVToGCS.py +120 -0
- flowtask/components/CompanyScraper/__init__.py +1 -0
- flowtask/components/CompanyScraper/parsers/__init__.py +6 -0
- flowtask/components/CompanyScraper/parsers/base.py +102 -0
- flowtask/components/CompanyScraper/parsers/explorium.py +192 -0
- flowtask/components/CompanyScraper/parsers/leadiq.py +206 -0
- flowtask/components/CompanyScraper/parsers/rocket.py +133 -0
- flowtask/components/CompanyScraper/parsers/siccode.py +109 -0
- flowtask/components/CompanyScraper/parsers/visualvisitor.py +130 -0
- flowtask/components/CompanyScraper/parsers/zoominfo.py +118 -0
- flowtask/components/CompanyScraper/scrapper.py +1054 -0
- flowtask/components/CopyTo.py +177 -0
- flowtask/components/CopyToBigQuery.py +243 -0
- flowtask/components/CopyToMongoDB.py +291 -0
- flowtask/components/CopyToPg.py +609 -0
- flowtask/components/CopyToRethink.py +207 -0
- flowtask/components/CreateGCSBucket.py +102 -0
- flowtask/components/CreateReport/CreateReport.py +228 -0
- flowtask/components/CreateReport/__init__.py +9 -0
- flowtask/components/CreateReport/charts/__init__.py +15 -0
- flowtask/components/CreateReport/charts/bar.py +51 -0
- flowtask/components/CreateReport/charts/base.py +66 -0
- flowtask/components/CreateReport/charts/pie.py +64 -0
- flowtask/components/CreateReport/utils.py +9 -0
- flowtask/components/CustomerSatisfaction.py +196 -0
- flowtask/components/DataInput.py +200 -0
- flowtask/components/DateList.py +255 -0
- flowtask/components/DbClient.py +163 -0
- flowtask/components/DialPad.py +146 -0
- flowtask/components/DocumentDBQuery.py +200 -0
- flowtask/components/DownloadFrom.py +371 -0
- flowtask/components/DownloadFromD2L.py +113 -0
- flowtask/components/DownloadFromFTP.py +181 -0
- flowtask/components/DownloadFromIMAP.py +315 -0
- flowtask/components/DownloadFromS3.py +198 -0
- flowtask/components/DownloadFromSFTP.py +265 -0
- flowtask/components/DownloadFromSharepoint.py +110 -0
- flowtask/components/DownloadFromSmartSheet.py +114 -0
- flowtask/components/DownloadS3File.py +229 -0
- flowtask/components/Dummy.py +59 -0
- flowtask/components/DuplicatePhoto.py +411 -0
- flowtask/components/EmployeeEvaluation.py +237 -0
- flowtask/components/ExecuteSQL.py +323 -0
- flowtask/components/ExtractHTML.py +178 -0
- flowtask/components/FileBase.py +178 -0
- flowtask/components/FileCopy.py +181 -0
- flowtask/components/FileDelete.py +82 -0
- flowtask/components/FileExists.py +146 -0
- flowtask/components/FileIteratorDelete.py +112 -0
- flowtask/components/FileList.py +194 -0
- flowtask/components/FileOpen.py +75 -0
- flowtask/components/FileRead.py +120 -0
- flowtask/components/FileRename.py +106 -0
- flowtask/components/FilterIf.py +284 -0
- flowtask/components/FilterRows/FilterRows.py +200 -0
- flowtask/components/FilterRows/__init__.py +10 -0
- flowtask/components/FilterRows/functions.py +4 -0
- flowtask/components/GCSToBigQuery.py +103 -0
- flowtask/components/GoogleA4.py +150 -0
- flowtask/components/GoogleGeoCoding.py +344 -0
- flowtask/components/GooglePlaces.py +315 -0
- flowtask/components/GoogleSearch.py +539 -0
- flowtask/components/HTTPClient.py +268 -0
- flowtask/components/ICIMS.py +146 -0
- flowtask/components/IF.py +179 -0
- flowtask/components/IcimsFolderCopy.py +173 -0
- flowtask/components/ImageFeatures/__init__.py +5 -0
- flowtask/components/ImageFeatures/process.py +233 -0
- flowtask/components/IteratorBase.py +251 -0
- flowtask/components/LangchainLoader/__init__.py +5 -0
- flowtask/components/LangchainLoader/loader.py +194 -0
- flowtask/components/LangchainLoader/loaders/__init__.py +22 -0
- flowtask/components/LangchainLoader/loaders/abstract.py +362 -0
- flowtask/components/LangchainLoader/loaders/basepdf.py +50 -0
- flowtask/components/LangchainLoader/loaders/docx.py +91 -0
- flowtask/components/LangchainLoader/loaders/html.py +119 -0
- flowtask/components/LangchainLoader/loaders/pdfblocks.py +146 -0
- flowtask/components/LangchainLoader/loaders/pdfmark.py +79 -0
- flowtask/components/LangchainLoader/loaders/pdftables.py +135 -0
- flowtask/components/LangchainLoader/loaders/qa.py +67 -0
- flowtask/components/LangchainLoader/loaders/txt.py +55 -0
- flowtask/components/LeadIQ.py +650 -0
- flowtask/components/Loop.py +253 -0
- flowtask/components/Lowes.py +334 -0
- flowtask/components/MS365Usage.py +156 -0
- flowtask/components/MSTeamsMessages.py +320 -0
- flowtask/components/MarketClustering.py +1051 -0
- flowtask/components/MergeFiles.py +362 -0
- flowtask/components/MilvusOutput.py +87 -0
- flowtask/components/NearByStores.py +175 -0
- flowtask/components/NetworkNinja/__init__.py +6 -0
- flowtask/components/NetworkNinja/models/__init__.py +52 -0
- flowtask/components/NetworkNinja/models/abstract.py +177 -0
- flowtask/components/NetworkNinja/models/account.py +39 -0
- flowtask/components/NetworkNinja/models/client.py +19 -0
- flowtask/components/NetworkNinja/models/district.py +14 -0
- flowtask/components/NetworkNinja/models/events.py +101 -0
- flowtask/components/NetworkNinja/models/forms.py +499 -0
- flowtask/components/NetworkNinja/models/market.py +16 -0
- flowtask/components/NetworkNinja/models/organization.py +34 -0
- flowtask/components/NetworkNinja/models/photos.py +125 -0
- flowtask/components/NetworkNinja/models/project.py +44 -0
- flowtask/components/NetworkNinja/models/region.py +28 -0
- flowtask/components/NetworkNinja/models/store.py +203 -0
- flowtask/components/NetworkNinja/models/user.py +151 -0
- flowtask/components/NetworkNinja/router.py +854 -0
- flowtask/components/Odoo.py +175 -0
- flowtask/components/OdooInjector.py +192 -0
- flowtask/components/OpenFromXML.py +126 -0
- flowtask/components/OpenWeather.py +41 -0
- flowtask/components/OpenWithBase.py +616 -0
- flowtask/components/OpenWithPandas.py +715 -0
- flowtask/components/PGPDecrypt.py +199 -0
- flowtask/components/PandasIterator.py +187 -0
- flowtask/components/PandasToFile.py +189 -0
- flowtask/components/Paradox.py +339 -0
- flowtask/components/ParamIterator.py +117 -0
- flowtask/components/ParseHTML.py +84 -0
- flowtask/components/PlacerStores.py +249 -0
- flowtask/components/Pokemon.py +507 -0
- flowtask/components/PositiveBot.py +62 -0
- flowtask/components/PowerPointSlide.py +400 -0
- flowtask/components/PrintMessage.py +127 -0
- flowtask/components/ProductCompetitors/__init__.py +5 -0
- flowtask/components/ProductCompetitors/parsers/__init__.py +7 -0
- flowtask/components/ProductCompetitors/parsers/base.py +72 -0
- flowtask/components/ProductCompetitors/parsers/bestbuy.py +86 -0
- flowtask/components/ProductCompetitors/parsers/lowes.py +103 -0
- flowtask/components/ProductCompetitors/scrapper.py +155 -0
- flowtask/components/ProductCompliant.py +169 -0
- flowtask/components/ProductInfo/__init__.py +1 -0
- flowtask/components/ProductInfo/parsers/__init__.py +5 -0
- flowtask/components/ProductInfo/parsers/base.py +83 -0
- flowtask/components/ProductInfo/parsers/brother.py +97 -0
- flowtask/components/ProductInfo/parsers/canon.py +167 -0
- flowtask/components/ProductInfo/parsers/epson.py +118 -0
- flowtask/components/ProductInfo/parsers/hp.py +131 -0
- flowtask/components/ProductInfo/parsers/samsung.py +97 -0
- flowtask/components/ProductInfo/scraper.py +319 -0
- flowtask/components/ProductPricing.py +118 -0
- flowtask/components/QS.py +261 -0
- flowtask/components/QSBase.py +201 -0
- flowtask/components/QueryIterator.py +273 -0
- flowtask/components/QueryToInsert.py +327 -0
- flowtask/components/QueryToPandas.py +432 -0
- flowtask/components/RESTClient.py +195 -0
- flowtask/components/RethinkDBQuery.py +189 -0
- flowtask/components/Rsync.py +74 -0
- flowtask/components/RunSSH.py +59 -0
- flowtask/components/RunShell.py +71 -0
- flowtask/components/SalesForce.py +20 -0
- flowtask/components/SaveImageBank/__init__.py +257 -0
- flowtask/components/SchedulingVisits.py +592 -0
- flowtask/components/ScrapPage.py +216 -0
- flowtask/components/ScrapSearch.py +79 -0
- flowtask/components/SendNotify.py +257 -0
- flowtask/components/SentimentAnalysis.py +694 -0
- flowtask/components/ServiceScrapper/__init__.py +5 -0
- flowtask/components/ServiceScrapper/parsers/__init__.py +1 -0
- flowtask/components/ServiceScrapper/parsers/base.py +94 -0
- flowtask/components/ServiceScrapper/parsers/costco.py +93 -0
- flowtask/components/ServiceScrapper/scrapper.py +199 -0
- flowtask/components/SetVariables.py +156 -0
- flowtask/components/SubTask.py +182 -0
- flowtask/components/SuiteCRM.py +48 -0
- flowtask/components/Switch.py +175 -0
- flowtask/components/TableBase.py +148 -0
- flowtask/components/TableDelete.py +312 -0
- flowtask/components/TableInput.py +143 -0
- flowtask/components/TableOutput/TableOutput.py +384 -0
- flowtask/components/TableOutput/__init__.py +3 -0
- flowtask/components/TableSchema.py +534 -0
- flowtask/components/Target.py +223 -0
- flowtask/components/ThumbnailGenerator.py +156 -0
- flowtask/components/ToPandas.py +67 -0
- flowtask/components/TransformRows/TransformRows.py +507 -0
- flowtask/components/TransformRows/__init__.py +9 -0
- flowtask/components/TransformRows/functions.py +559 -0
- flowtask/components/TransposeRows.py +176 -0
- flowtask/components/UPCDatabase.py +86 -0
- flowtask/components/UnGzip.py +171 -0
- flowtask/components/Uncompress.py +172 -0
- flowtask/components/UniqueRows.py +126 -0
- flowtask/components/Unzip.py +107 -0
- flowtask/components/UpdateOperationalVars.py +147 -0
- flowtask/components/UploadTo.py +299 -0
- flowtask/components/UploadToS3.py +136 -0
- flowtask/components/UploadToSFTP.py +160 -0
- flowtask/components/UploadToSharepoint.py +205 -0
- flowtask/components/UserFunc.py +122 -0
- flowtask/components/VivaTracker.py +140 -0
- flowtask/components/WSDLClient.py +123 -0
- flowtask/components/Wait.py +18 -0
- flowtask/components/Walmart.py +199 -0
- flowtask/components/Workplace.py +134 -0
- flowtask/components/XMLToPandas.py +267 -0
- flowtask/components/Zammad/__init__.py +41 -0
- flowtask/components/Zammad/models.py +0 -0
- flowtask/components/ZoomInfoScraper.py +409 -0
- flowtask/components/__init__.py +104 -0
- flowtask/components/abstract.py +18 -0
- flowtask/components/flow.py +530 -0
- flowtask/components/google.py +335 -0
- flowtask/components/group.py +221 -0
- flowtask/components/py.typed +0 -0
- flowtask/components/reviewscrap.py +132 -0
- flowtask/components/tAutoincrement.py +117 -0
- flowtask/components/tConcat.py +109 -0
- flowtask/components/tExplode.py +119 -0
- flowtask/components/tFilter.py +184 -0
- flowtask/components/tGroup.py +236 -0
- flowtask/components/tJoin.py +270 -0
- flowtask/components/tMap/__init__.py +9 -0
- flowtask/components/tMap/functions.py +54 -0
- flowtask/components/tMap/tMap.py +450 -0
- flowtask/components/tMelt.py +112 -0
- flowtask/components/tMerge.py +114 -0
- flowtask/components/tOrder.py +93 -0
- flowtask/components/tPandas.py +94 -0
- flowtask/components/tPivot.py +71 -0
- flowtask/components/tPluckCols.py +76 -0
- flowtask/components/tUnnest.py +82 -0
- flowtask/components/user.py +401 -0
- flowtask/conf.py +457 -0
- flowtask/download.py +102 -0
- flowtask/events/__init__.py +11 -0
- flowtask/events/events/__init__.py +20 -0
- flowtask/events/events/abstract.py +95 -0
- flowtask/events/events/alerts/__init__.py +362 -0
- flowtask/events/events/alerts/colfunctions.py +131 -0
- flowtask/events/events/alerts/functions.py +158 -0
- flowtask/events/events/dummy.py +12 -0
- flowtask/events/events/exec.py +124 -0
- flowtask/events/events/file/__init__.py +7 -0
- flowtask/events/events/file/base.py +51 -0
- flowtask/events/events/file/copy.py +23 -0
- flowtask/events/events/file/delete.py +16 -0
- flowtask/events/events/interfaces/__init__.py +9 -0
- flowtask/events/events/interfaces/client.py +67 -0
- flowtask/events/events/interfaces/credentials.py +28 -0
- flowtask/events/events/interfaces/notifications.py +58 -0
- flowtask/events/events/jira.py +122 -0
- flowtask/events/events/log.py +26 -0
- flowtask/events/events/logerr.py +52 -0
- flowtask/events/events/notify.py +59 -0
- flowtask/events/events/notify_event.py +160 -0
- flowtask/events/events/publish.py +54 -0
- flowtask/events/events/sendfile.py +104 -0
- flowtask/events/events/task.py +97 -0
- flowtask/events/events/teams.py +98 -0
- flowtask/events/events/webhook.py +58 -0
- flowtask/events/manager.py +287 -0
- flowtask/exceptions.c +39393 -0
- flowtask/exceptions.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/extensions/__init__.py +3 -0
- flowtask/extensions/abstract.py +82 -0
- flowtask/extensions/logging/__init__.py +65 -0
- flowtask/hooks/__init__.py +9 -0
- flowtask/hooks/actions/__init__.py +22 -0
- flowtask/hooks/actions/abstract.py +66 -0
- flowtask/hooks/actions/dummy.py +23 -0
- flowtask/hooks/actions/jira.py +74 -0
- flowtask/hooks/actions/rest.py +320 -0
- flowtask/hooks/actions/sampledata.py +37 -0
- flowtask/hooks/actions/sensor.py +23 -0
- flowtask/hooks/actions/task.py +9 -0
- flowtask/hooks/actions/ticket.py +37 -0
- flowtask/hooks/actions/zammad.py +55 -0
- flowtask/hooks/hook.py +62 -0
- flowtask/hooks/models.py +17 -0
- flowtask/hooks/service.py +187 -0
- flowtask/hooks/step.py +91 -0
- flowtask/hooks/types/__init__.py +23 -0
- flowtask/hooks/types/base.py +129 -0
- flowtask/hooks/types/brokers/__init__.py +11 -0
- flowtask/hooks/types/brokers/base.py +54 -0
- flowtask/hooks/types/brokers/mqtt.py +35 -0
- flowtask/hooks/types/brokers/rabbitmq.py +82 -0
- flowtask/hooks/types/brokers/redis.py +83 -0
- flowtask/hooks/types/brokers/sqs.py +44 -0
- flowtask/hooks/types/fs.py +232 -0
- flowtask/hooks/types/http.py +49 -0
- flowtask/hooks/types/imap.py +200 -0
- flowtask/hooks/types/jira.py +279 -0
- flowtask/hooks/types/mail.py +205 -0
- flowtask/hooks/types/postgres.py +98 -0
- flowtask/hooks/types/responses/__init__.py +8 -0
- flowtask/hooks/types/responses/base.py +5 -0
- flowtask/hooks/types/sharepoint.py +288 -0
- flowtask/hooks/types/ssh.py +141 -0
- flowtask/hooks/types/tagged.py +59 -0
- flowtask/hooks/types/upload.py +85 -0
- flowtask/hooks/types/watch.py +71 -0
- flowtask/hooks/types/web.py +36 -0
- flowtask/interfaces/AzureClient.py +137 -0
- flowtask/interfaces/AzureGraph.py +839 -0
- flowtask/interfaces/Boto3Client.py +326 -0
- flowtask/interfaces/DropboxClient.py +173 -0
- flowtask/interfaces/ExcelHandler.py +94 -0
- flowtask/interfaces/FTPClient.py +131 -0
- flowtask/interfaces/GoogleCalendar.py +201 -0
- flowtask/interfaces/GoogleClient.py +133 -0
- flowtask/interfaces/GoogleDrive.py +127 -0
- flowtask/interfaces/GoogleGCS.py +89 -0
- flowtask/interfaces/GoogleGeocoding.py +93 -0
- flowtask/interfaces/GoogleLang.py +114 -0
- flowtask/interfaces/GooglePub.py +61 -0
- flowtask/interfaces/GoogleSheet.py +68 -0
- flowtask/interfaces/IMAPClient.py +137 -0
- flowtask/interfaces/O365Calendar.py +113 -0
- flowtask/interfaces/O365Client.py +220 -0
- flowtask/interfaces/OneDrive.py +284 -0
- flowtask/interfaces/Outlook.py +155 -0
- flowtask/interfaces/ParrotBot.py +130 -0
- flowtask/interfaces/SSHClient.py +378 -0
- flowtask/interfaces/Sharepoint.py +496 -0
- flowtask/interfaces/__init__.py +36 -0
- flowtask/interfaces/azureauth.py +119 -0
- flowtask/interfaces/cache.py +201 -0
- flowtask/interfaces/client.py +82 -0
- flowtask/interfaces/compress.py +525 -0
- flowtask/interfaces/credentials.py +124 -0
- flowtask/interfaces/d2l.py +239 -0
- flowtask/interfaces/databases/__init__.py +5 -0
- flowtask/interfaces/databases/db.py +223 -0
- flowtask/interfaces/databases/documentdb.py +55 -0
- flowtask/interfaces/databases/rethink.py +39 -0
- flowtask/interfaces/dataframes/__init__.py +11 -0
- flowtask/interfaces/dataframes/abstract.py +21 -0
- flowtask/interfaces/dataframes/arrow.py +71 -0
- flowtask/interfaces/dataframes/dt.py +69 -0
- flowtask/interfaces/dataframes/pandas.py +167 -0
- flowtask/interfaces/dataframes/polars.py +60 -0
- flowtask/interfaces/db.py +263 -0
- flowtask/interfaces/env.py +46 -0
- flowtask/interfaces/func.py +137 -0
- flowtask/interfaces/http.py +1780 -0
- flowtask/interfaces/locale.py +40 -0
- flowtask/interfaces/log.py +75 -0
- flowtask/interfaces/mask.py +143 -0
- flowtask/interfaces/notification.py +154 -0
- flowtask/interfaces/playwright.py +339 -0
- flowtask/interfaces/powerpoint.py +368 -0
- flowtask/interfaces/py.typed +0 -0
- flowtask/interfaces/qs.py +376 -0
- flowtask/interfaces/result.py +87 -0
- flowtask/interfaces/selenium_service.py +779 -0
- flowtask/interfaces/smartsheet.py +154 -0
- flowtask/interfaces/stat.py +39 -0
- flowtask/interfaces/task.py +96 -0
- flowtask/interfaces/template.py +118 -0
- flowtask/interfaces/vectorstores/__init__.py +1 -0
- flowtask/interfaces/vectorstores/abstract.py +133 -0
- flowtask/interfaces/vectorstores/milvus.py +669 -0
- flowtask/interfaces/zammad.py +107 -0
- flowtask/models.py +193 -0
- flowtask/parsers/__init__.py +15 -0
- flowtask/parsers/_yaml.c +11978 -0
- flowtask/parsers/_yaml.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/argparser.py +235 -0
- flowtask/parsers/base.c +15155 -0
- flowtask/parsers/base.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/json.c +11968 -0
- flowtask/parsers/json.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/maps.py +49 -0
- flowtask/parsers/toml.c +11968 -0
- flowtask/parsers/toml.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/plugins/__init__.py +16 -0
- flowtask/plugins/components/__init__.py +0 -0
- flowtask/plugins/handler/__init__.py +45 -0
- flowtask/plugins/importer.py +31 -0
- flowtask/plugins/sources/__init__.py +0 -0
- flowtask/runner.py +283 -0
- flowtask/scheduler/__init__.py +9 -0
- flowtask/scheduler/functions.py +493 -0
- flowtask/scheduler/handlers/__init__.py +8 -0
- flowtask/scheduler/handlers/manager.py +504 -0
- flowtask/scheduler/handlers/models.py +58 -0
- flowtask/scheduler/handlers/service.py +72 -0
- flowtask/scheduler/notifications.py +65 -0
- flowtask/scheduler/scheduler.py +993 -0
- flowtask/services/__init__.py +0 -0
- flowtask/services/bots/__init__.py +0 -0
- flowtask/services/bots/telegram.py +264 -0
- flowtask/services/files/__init__.py +11 -0
- flowtask/services/files/manager.py +522 -0
- flowtask/services/files/model.py +37 -0
- flowtask/services/files/service.py +767 -0
- flowtask/services/jira/__init__.py +3 -0
- flowtask/services/jira/jira_actions.py +191 -0
- flowtask/services/tasks/__init__.py +13 -0
- flowtask/services/tasks/launcher.py +213 -0
- flowtask/services/tasks/manager.py +323 -0
- flowtask/services/tasks/service.py +275 -0
- flowtask/services/tasks/task_manager.py +376 -0
- flowtask/services/tasks/tasks.py +155 -0
- flowtask/storages/__init__.py +16 -0
- flowtask/storages/exceptions.py +12 -0
- flowtask/storages/files/__init__.py +8 -0
- flowtask/storages/files/abstract.py +29 -0
- flowtask/storages/files/filesystem.py +66 -0
- flowtask/storages/tasks/__init__.py +19 -0
- flowtask/storages/tasks/abstract.py +26 -0
- flowtask/storages/tasks/database.py +33 -0
- flowtask/storages/tasks/filesystem.py +108 -0
- flowtask/storages/tasks/github.py +119 -0
- flowtask/storages/tasks/memory.py +45 -0
- flowtask/storages/tasks/row.py +25 -0
- flowtask/tasks/__init__.py +0 -0
- flowtask/tasks/abstract.py +526 -0
- flowtask/tasks/command.py +118 -0
- flowtask/tasks/pile.py +486 -0
- flowtask/tasks/py.typed +0 -0
- flowtask/tasks/task.py +778 -0
- flowtask/template/__init__.py +161 -0
- flowtask/tests.py +257 -0
- flowtask/types/__init__.py +8 -0
- flowtask/types/typedefs.c +11347 -0
- flowtask/types/typedefs.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/utils/__init__.py +24 -0
- flowtask/utils/constants.py +117 -0
- flowtask/utils/encoders.py +21 -0
- flowtask/utils/executor.py +112 -0
- flowtask/utils/functions.cpp +14280 -0
- flowtask/utils/functions.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/utils/json.cpp +13349 -0
- flowtask/utils/json.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/utils/mail.py +63 -0
- flowtask/utils/parseqs.c +13324 -0
- flowtask/utils/parserqs.cpython-39-x86_64-linux-gnu.so +0 -0
- flowtask/utils/stats.py +308 -0
- flowtask/utils/transformations.py +74 -0
- flowtask/utils/uv.py +12 -0
- flowtask/utils/validators.py +97 -0
- flowtask/version.py +11 -0
- flowtask-5.8.4.dist-info/LICENSE +201 -0
- flowtask-5.8.4.dist-info/METADATA +209 -0
- flowtask-5.8.4.dist-info/RECORD +470 -0
- flowtask-5.8.4.dist-info/WHEEL +6 -0
- flowtask-5.8.4.dist-info/entry_points.txt +3 -0
- flowtask-5.8.4.dist-info/top_level.txt +2 -0
- plugins/components/CreateQR.py +39 -0
- plugins/components/TestComponent.py +28 -0
- plugins/components/Use1.py +13 -0
- plugins/components/Workplace.py +117 -0
- plugins/components/__init__.py +3 -0
- plugins/sources/__init__.py +0 -0
- plugins/sources/get_populartimes.py +78 -0
- plugins/sources/google.py +150 -0
- plugins/sources/hubspot.py +679 -0
- plugins/sources/icims.py +679 -0
- plugins/sources/mobileinsight.py +501 -0
- plugins/sources/newrelic.py +262 -0
- plugins/sources/uap.py +268 -0
- plugins/sources/venu.py +244 -0
- plugins/sources/vocinity.py +314 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
from typing import Any
|
2
|
+
from pathlib import PurePath
|
3
|
+
from abc import ABC, abstractmethod
|
4
|
+
from navconfig.logging import logging
|
5
|
+
|
6
|
+
|
7
|
+
class AbstractTaskStorage(ABC):
|
8
|
+
"""
|
9
|
+
Abstract Base class for all Task Storages.
|
10
|
+
"""
|
11
|
+
_name_: str = "TaskStorage"
|
12
|
+
|
13
|
+
def __init__(self, *args, **kwargs) -> None:
|
14
|
+
self.path: PurePath = None
|
15
|
+
self.logger = logging.getLogger(
|
16
|
+
f"FlowTask.Storage.Task.{self._name_}"
|
17
|
+
)
|
18
|
+
|
19
|
+
def get_path(self) -> PurePath:
|
20
|
+
return self.path
|
21
|
+
|
22
|
+
@abstractmethod
|
23
|
+
async def open_task(self, task: str, program: str = None, **kwargs) -> Any:
|
24
|
+
"""open_task.
|
25
|
+
Open A Task from Task Storage, support JSON, YAML and TOML formats.
|
26
|
+
"""
|
@@ -0,0 +1,33 @@
|
|
1
|
+
from typing import Any
|
2
|
+
import asyncio
|
3
|
+
from asyncdb import AsyncDB
|
4
|
+
from .abstract import AbstractTaskStorage
|
5
|
+
|
6
|
+
|
7
|
+
class DatabaseTaskStorage(AbstractTaskStorage):
|
8
|
+
"""Saving Tasks on an postgreSQL Database."""
|
9
|
+
_name_: str = "Database"
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
driver: str = "pg",
|
14
|
+
dsn: str = None,
|
15
|
+
credentials: dict = None,
|
16
|
+
*args,
|
17
|
+
**kwargs,
|
18
|
+
) -> None:
|
19
|
+
super().__init__(*args, **kwargs)
|
20
|
+
self.loop = asyncio.get_event_loop()
|
21
|
+
asyncio.set_event_loop(self.loop)
|
22
|
+
self._connection = AsyncDB(
|
23
|
+
driver, dsn=dsn, params=credentials, loop=self.loop, **kwargs
|
24
|
+
)
|
25
|
+
|
26
|
+
async def open_task(
|
27
|
+
self,
|
28
|
+
task: str = None,
|
29
|
+
program: str = None,
|
30
|
+
**kwargs,
|
31
|
+
) -> Any:
|
32
|
+
## TODO: getting tasks from a external Task Storage (like a database).
|
33
|
+
return self._task
|
@@ -0,0 +1,108 @@
|
|
1
|
+
from typing import Union
|
2
|
+
from pathlib import Path, PurePath
|
3
|
+
from ...exceptions import (
|
4
|
+
FlowTaskError,
|
5
|
+
TaskNotFound,
|
6
|
+
TaskParseError,
|
7
|
+
TaskDefinition,
|
8
|
+
FileNotFound,
|
9
|
+
)
|
10
|
+
from ...parsers import JSONParser, TOMLParser, YAMLParser
|
11
|
+
from .abstract import AbstractTaskStorage
|
12
|
+
|
13
|
+
|
14
|
+
class FileTaskStorage(AbstractTaskStorage):
|
15
|
+
"""Saving Tasks on the Filesystem."""
|
16
|
+
_name_: str = "Filesystem"
|
17
|
+
|
18
|
+
def __init__(self, path: PurePath, *args, **kwargs):
|
19
|
+
super(FileTaskStorage, self).__init__(*args, **kwargs)
|
20
|
+
if not path:
|
21
|
+
## Default Task Path
|
22
|
+
raise FlowTaskError(
|
23
|
+
"Required Task Path for Filesystem Task Storage"
|
24
|
+
)
|
25
|
+
else:
|
26
|
+
self.path = path
|
27
|
+
if isinstance(path, str):
|
28
|
+
self.path = Path(path)
|
29
|
+
|
30
|
+
async def open_task(
|
31
|
+
self, task: str = None, program: str = None, **kwargs
|
32
|
+
) -> Union[dict, str]:
|
33
|
+
"""open_task.
|
34
|
+
Open A Task from FileSystem, support json, yaml and toml formats.
|
35
|
+
"""
|
36
|
+
if not program:
|
37
|
+
program = "navigator"
|
38
|
+
taskpath = self.path.joinpath(program, "tasks")
|
39
|
+
self.logger.notice(f"Program Task Path: {taskpath}")
|
40
|
+
if not taskpath.exists():
|
41
|
+
raise TaskNotFound(
|
42
|
+
f"FlowTask: Task Path not found: {taskpath}"
|
43
|
+
)
|
44
|
+
ext = None
|
45
|
+
for f in (
|
46
|
+
"json",
|
47
|
+
"yaml",
|
48
|
+
"toml",
|
49
|
+
):
|
50
|
+
filename = taskpath.joinpath(f"{task}.{f}")
|
51
|
+
if filename.exists():
|
52
|
+
self.logger.info(f"Task File: {filename}")
|
53
|
+
ext = f
|
54
|
+
break
|
55
|
+
else:
|
56
|
+
if ext is None:
|
57
|
+
raise TaskNotFound(
|
58
|
+
f"FlowTask: Task {program}.{task} Not Found on file > {filename}"
|
59
|
+
)
|
60
|
+
try:
|
61
|
+
if f == "json":
|
62
|
+
parse = JSONParser(file=str(filename))
|
63
|
+
elif f == "yaml":
|
64
|
+
parse = YAMLParser(file=str(filename))
|
65
|
+
elif f == "toml":
|
66
|
+
parse = TOMLParser(file=str(filename))
|
67
|
+
else:
|
68
|
+
raise FlowTaskError(
|
69
|
+
f"Invalid File format for Task: {filename.name}"
|
70
|
+
)
|
71
|
+
return await parse.run()
|
72
|
+
except TaskParseError as err:
|
73
|
+
raise TaskParseError(f"Task Parse Error for {filename}: {err}") from err
|
74
|
+
except Exception as err:
|
75
|
+
raise TaskDefinition(
|
76
|
+
f"DI: Error Parsing {f} Task in {task} \
|
77
|
+
for filename: {filename.name}: {err}"
|
78
|
+
) from err
|
79
|
+
|
80
|
+
async def open_hook(self, filename: Union[str, PurePath]) -> Union[dict, str]:
|
81
|
+
"""open_hook.
|
82
|
+
Open A Hook from FileSystem, support json, yaml and toml formats.
|
83
|
+
"""
|
84
|
+
if filename.exists():
|
85
|
+
f = filename.suffix
|
86
|
+
try:
|
87
|
+
if f == ".json":
|
88
|
+
parse = JSONParser(str(filename))
|
89
|
+
elif f == ".yaml":
|
90
|
+
parse = YAMLParser(str(filename))
|
91
|
+
elif f == ".toml":
|
92
|
+
parse = TOMLParser(str(filename))
|
93
|
+
else:
|
94
|
+
raise FlowTaskError(
|
95
|
+
f"Invalid File format for Hook: {filename.name}"
|
96
|
+
)
|
97
|
+
self.logger.notice(f"Hook File: {filename}")
|
98
|
+
return await parse.run()
|
99
|
+
except TaskParseError as err:
|
100
|
+
raise TaskParseError(
|
101
|
+
f"Hook Parsing Error for {filename}: {err}"
|
102
|
+
) from err
|
103
|
+
except Exception as err:
|
104
|
+
raise FlowTaskError(
|
105
|
+
f"Error loading Hook {filename.name}: {err}"
|
106
|
+
) from err
|
107
|
+
else:
|
108
|
+
raise FileNotFound(f"Hook Not Found on file > {filename}")
|
@@ -0,0 +1,119 @@
|
|
1
|
+
import os
|
2
|
+
from pathlib import PurePath
|
3
|
+
import tempfile
|
4
|
+
from git import Repo, GitCommandError
|
5
|
+
from navconfig.logging import logging
|
6
|
+
from ...exceptions import FlowTaskError, ConfigError
|
7
|
+
from .filesystem import FileTaskStorage
|
8
|
+
|
9
|
+
logging.getLogger("git").setLevel(logging.WARNING)
|
10
|
+
|
11
|
+
|
12
|
+
class GitTaskStorage(FileTaskStorage):
|
13
|
+
"""Getting Tasks on Filesystem with Github Support."""
|
14
|
+
_name_: str = "Git"
|
15
|
+
use_ssh: bool = True
|
16
|
+
|
17
|
+
def __init__(
|
18
|
+
self,
|
19
|
+
path: PurePath,
|
20
|
+
git_url: str,
|
21
|
+
*args,
|
22
|
+
git_user: str = None,
|
23
|
+
password: str = None,
|
24
|
+
git_private_key: str = None,
|
25
|
+
**kwargs,
|
26
|
+
):
|
27
|
+
super(GitTaskStorage, self).__init__(path, *args, **kwargs)
|
28
|
+
|
29
|
+
if git_url:
|
30
|
+
self.git_url = git_url
|
31
|
+
if git_url.startswith("http"):
|
32
|
+
# using HTTP instead SSH for cloning
|
33
|
+
self.use_ssh: bool = False
|
34
|
+
self.git_private_key = git_private_key
|
35
|
+
self.git_user = git_user
|
36
|
+
self.git_password = password
|
37
|
+
if not password:
|
38
|
+
self.git_password = git_private_key
|
39
|
+
self.refresh_repository()
|
40
|
+
|
41
|
+
def clone_repository(self):
|
42
|
+
url = self.git_url
|
43
|
+
try:
|
44
|
+
if self.use_ssh is False:
|
45
|
+
self.git_url = self.git_url.replace(
|
46
|
+
"https://", f"https://{self.git_user}:{self.git_password}@"
|
47
|
+
)
|
48
|
+
Repo.clone_from(self.git_url, self.path)
|
49
|
+
else:
|
50
|
+
if self.git_private_key:
|
51
|
+
with tempfile.NamedTemporaryFile(delete=False) as tmp_key:
|
52
|
+
tmp_key.write(self.git_private_key.encode())
|
53
|
+
tmp_key.flush() # Ensure the key is written to disk
|
54
|
+
env = {"GIT_SSH_COMMAND": f"ssh -i {tmp_key.name}"}
|
55
|
+
try:
|
56
|
+
Repo.clone_from(self.git_url, self.path, env=env)
|
57
|
+
finally:
|
58
|
+
os.unlink(tmp_key.name)
|
59
|
+
else:
|
60
|
+
Repo.clone_from(self.git_url, self.path)
|
61
|
+
except Exception as exc:
|
62
|
+
raise ConfigError(
|
63
|
+
f"Github Storage: Unable to Clone Repository: {exc}"
|
64
|
+
) from exc
|
65
|
+
self.logger.info(f":: Cloned repository: {url}")
|
66
|
+
|
67
|
+
def refresh_repository(self):
|
68
|
+
try:
|
69
|
+
if not self.path.exists() or not any(self.path.iterdir()):
|
70
|
+
# If the directory is empty or doesn't exist, clone the repository
|
71
|
+
self.clone_repository()
|
72
|
+
else:
|
73
|
+
# If the directory exists and is not empty, pull the latest changes
|
74
|
+
try:
|
75
|
+
repo = Repo(self.path)
|
76
|
+
except Exception as exc:
|
77
|
+
raise ConfigError(
|
78
|
+
f"Github Storage: Unable to sync with Repository: {exc}"
|
79
|
+
) from exc
|
80
|
+
env = {}
|
81
|
+
if self.use_ssh is True:
|
82
|
+
env["GIT_SSH_COMMAND"] = f"ssh -i {self.git_private_key}"
|
83
|
+
with repo.git.custom_environment(**env):
|
84
|
+
repo.git.pull()
|
85
|
+
else:
|
86
|
+
repo.git.fetch()
|
87
|
+
if len(repo.remote().refs) > 0:
|
88
|
+
upstream_branch = None
|
89
|
+
# Determine the correct upstream branch
|
90
|
+
for remote_ref in repo.remote().refs:
|
91
|
+
if (
|
92
|
+
remote_ref.remote_head == "master"
|
93
|
+
or remote_ref.remote_head == "main"
|
94
|
+
):
|
95
|
+
upstream_branch = remote_ref.remote_head
|
96
|
+
break
|
97
|
+
else:
|
98
|
+
if upstream_branch:
|
99
|
+
# Set the correct upstream branch
|
100
|
+
repo.git.branch(
|
101
|
+
"--set-upstream-to", f"origin/{upstream_branch}"
|
102
|
+
)
|
103
|
+
else:
|
104
|
+
self.logger.warning(
|
105
|
+
"Unable to determine the correct upstream branch"
|
106
|
+
)
|
107
|
+
# Pull the latest changes
|
108
|
+
repo.git.pull()
|
109
|
+
else:
|
110
|
+
self.logger.warning(
|
111
|
+
f"Empty Upstream repository: {repo.remote()}"
|
112
|
+
)
|
113
|
+
self.logger.info(
|
114
|
+
f"Pulled the latest changes from repository: {self.git_url}"
|
115
|
+
)
|
116
|
+
except GitCommandError as err:
|
117
|
+
raise FlowTaskError(
|
118
|
+
f"Error interacting with Git repository: {err}"
|
119
|
+
) from err
|
@@ -0,0 +1,45 @@
|
|
1
|
+
from typing import Union
|
2
|
+
from ...parsers import JSONParser, TOMLParser, YAMLParser
|
3
|
+
from ...exceptions import TaskParseError
|
4
|
+
from .abstract import AbstractTaskStorage
|
5
|
+
|
6
|
+
|
7
|
+
class MemoryTaskStorage(AbstractTaskStorage):
|
8
|
+
"""Executing Task from Memory."""
|
9
|
+
_name_: str = "Memory"
|
10
|
+
|
11
|
+
def __init__(self, *args, **kwargs):
|
12
|
+
super(MemoryTaskStorage, self).__init__(*args, **kwargs)
|
13
|
+
self.content = None
|
14
|
+
self.filename = ":memory:"
|
15
|
+
|
16
|
+
async def open_task(
|
17
|
+
self,
|
18
|
+
payload: str = None,
|
19
|
+
task: str = None,
|
20
|
+
program: str = None,
|
21
|
+
**kwargs
|
22
|
+
) -> Union[dict, str]:
|
23
|
+
"""open_task.
|
24
|
+
Open A Task from Memory.
|
25
|
+
"""
|
26
|
+
error = None
|
27
|
+
for f in ("json", "yaml", "toml"):
|
28
|
+
# check every one:
|
29
|
+
try:
|
30
|
+
if f == "json":
|
31
|
+
parse = JSONParser(content=payload)
|
32
|
+
return await parse.run()
|
33
|
+
elif f == "yaml":
|
34
|
+
parse = YAMLParser(content=payload)
|
35
|
+
return await parse.run()
|
36
|
+
elif f == "toml":
|
37
|
+
parse = TOMLParser(content=payload)
|
38
|
+
return await parse.run()
|
39
|
+
except TaskParseError as e:
|
40
|
+
error = e
|
41
|
+
continue
|
42
|
+
else:
|
43
|
+
raise TaskParseError(
|
44
|
+
f"Task Parse Error: {error}"
|
45
|
+
)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
from typing import Union
|
2
|
+
from flowtask.exceptions import TaskError
|
3
|
+
from .abstract import AbstractTaskStorage
|
4
|
+
|
5
|
+
|
6
|
+
class RowTaskStorage(AbstractTaskStorage):
|
7
|
+
"""Task is saved directly into Task Table (SQL)."""
|
8
|
+
_name_: str = "Row"
|
9
|
+
|
10
|
+
def __init__(self, column_name: str = "task_definition", *args, **kwargs) -> None:
|
11
|
+
super().__init__(*args, **kwargs)
|
12
|
+
self._column = column_name
|
13
|
+
|
14
|
+
def set_definition(self, obj) -> None:
|
15
|
+
try:
|
16
|
+
self._task = obj
|
17
|
+
except (KeyError, AttributeError) as exc:
|
18
|
+
raise TaskError(
|
19
|
+
f"Unable to load Task definition from Table: {exc}"
|
20
|
+
) from exc
|
21
|
+
|
22
|
+
async def open_task(
|
23
|
+
self, task: str, program: str, **kwargs
|
24
|
+
) -> Union[dict, str]:
|
25
|
+
return self._task.get(self._column, None)
|
File without changes
|