flowtask 5.8.4__cp310-cp310-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-310-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-310-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/argparser.py +235 -0
- flowtask/parsers/base.c +15155 -0
- flowtask/parsers/base.cpython-310-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/json.c +11968 -0
- flowtask/parsers/json.cpython-310-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/maps.py +49 -0
- flowtask/parsers/toml.c +11968 -0
- flowtask/parsers/toml.cpython-310-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-310-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-310-x86_64-linux-gnu.so +0 -0
- flowtask/utils/json.cpp +13349 -0
- flowtask/utils/json.cpython-310-x86_64-linux-gnu.so +0 -0
- flowtask/utils/mail.py +63 -0
- flowtask/utils/parseqs.c +13324 -0
- flowtask/utils/parserqs.cpython-310-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,201 @@
|
|
1
|
+
from abc import ABC
|
2
|
+
from collections.abc import Callable
|
3
|
+
import redis
|
4
|
+
from redis import asyncio as aioredis
|
5
|
+
from redis.exceptions import RedisError, ResponseError, ReadOnlyError
|
6
|
+
from navconfig.logging import logging
|
7
|
+
from ..exceptions import FlowTaskError
|
8
|
+
from ..conf import REDIS_URL
|
9
|
+
|
10
|
+
|
11
|
+
class CacheSupport(ABC):
|
12
|
+
"""
|
13
|
+
Very Basic Cache Support using Redis
|
14
|
+
"""
|
15
|
+
|
16
|
+
params: dict = {
|
17
|
+
"encoding": "utf-8",
|
18
|
+
"decode_responses": True,
|
19
|
+
"max_connections": 10,
|
20
|
+
}
|
21
|
+
|
22
|
+
def __init__(self, *args, **kwargs):
|
23
|
+
self.redis_url = kwargs.get('redis_url', REDIS_URL)
|
24
|
+
self._redis: Callable = None
|
25
|
+
self.expiration = self.parse_duration(kwargs.pop("every", "60m"))
|
26
|
+
super().__init__(
|
27
|
+
*args, **kwargs
|
28
|
+
)
|
29
|
+
|
30
|
+
async def __aenter__(self):
|
31
|
+
await self.open()
|
32
|
+
return self
|
33
|
+
|
34
|
+
async def __aexit__(self, exc_type, exc_value, traceback):
|
35
|
+
await self.close()
|
36
|
+
|
37
|
+
def __enter__(self):
|
38
|
+
self.connect()
|
39
|
+
return self
|
40
|
+
|
41
|
+
def __exit__(self, exc_type, exc_value, traceback):
|
42
|
+
self.disconnect()
|
43
|
+
|
44
|
+
def parse_duration(self, duration: str) -> int:
|
45
|
+
"""
|
46
|
+
Parse a duration string and return its value in seconds.
|
47
|
+
|
48
|
+
Supported formats:
|
49
|
+
- "Xs" for seconds
|
50
|
+
- "Xm" for minutes
|
51
|
+
- "Xh" for hours
|
52
|
+
"""
|
53
|
+
if duration is None:
|
54
|
+
return None
|
55
|
+
value = int(duration[:-1])
|
56
|
+
unit = duration[-1]
|
57
|
+
|
58
|
+
if unit == "s":
|
59
|
+
return value
|
60
|
+
elif unit == "m":
|
61
|
+
return value * 60
|
62
|
+
elif unit == "h":
|
63
|
+
return value * 3600
|
64
|
+
else:
|
65
|
+
raise ValueError(f"Unsupported duration unit: {unit}")
|
66
|
+
|
67
|
+
def set(self, key, value):
|
68
|
+
try:
|
69
|
+
return self._redis.set(key, value)
|
70
|
+
except ReadOnlyError as err:
|
71
|
+
raise FlowTaskError(f"Redis is Read Only: {err}") from err
|
72
|
+
except Exception as err:
|
73
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
74
|
+
|
75
|
+
def delete(self, key: str) -> None:
|
76
|
+
try:
|
77
|
+
self._redis.delete(key)
|
78
|
+
except RedisError as err:
|
79
|
+
raise FlowTaskError(f"Error deleting key {key}: {err}") from err
|
80
|
+
|
81
|
+
def exists(self, key, *keys):
|
82
|
+
try:
|
83
|
+
return bool(self._redis.exists(key, *keys))
|
84
|
+
except ResponseError as err:
|
85
|
+
raise FlowTaskError(f"Bad Response: {err}") from err
|
86
|
+
except RedisError as err:
|
87
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
88
|
+
except Exception as err:
|
89
|
+
raise FlowTaskError(f"Redis Exception: {err}") from err
|
90
|
+
|
91
|
+
def get(self, key):
|
92
|
+
try:
|
93
|
+
return self._redis.get(key)
|
94
|
+
except ResponseError as err:
|
95
|
+
raise FlowTaskError(f"Bad Response: {err}") from err
|
96
|
+
except RedisError as err:
|
97
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
98
|
+
except Exception as err:
|
99
|
+
raise FlowTaskError(f"Redis Exception: {err}") from err
|
100
|
+
|
101
|
+
def setexp(self, key, value, timeout: str = None):
|
102
|
+
"""
|
103
|
+
setexp
|
104
|
+
Set the value and expiration of a Key
|
105
|
+
params:
|
106
|
+
key: key Name
|
107
|
+
value: value of the key
|
108
|
+
timeout: expiration time in seconds
|
109
|
+
"""
|
110
|
+
if timeout is None:
|
111
|
+
timeout = self.expiration
|
112
|
+
elif isinstance(timeout, str):
|
113
|
+
timeout = self.parse_duration(timeout)
|
114
|
+
else:
|
115
|
+
try:
|
116
|
+
timeout = self.parse_duration(timeout)
|
117
|
+
except TypeError:
|
118
|
+
timeout = self.expiration
|
119
|
+
if timeout is None:
|
120
|
+
return
|
121
|
+
try:
|
122
|
+
logging.debug(
|
123
|
+
f"Cache: Set Cache {key} with expiration {timeout} secs"
|
124
|
+
)
|
125
|
+
self._redis.setex(key, timeout, value)
|
126
|
+
except ReadOnlyError as err:
|
127
|
+
raise FlowTaskError(f"Redis is Read Only: {err}") from err
|
128
|
+
except ResponseError as err:
|
129
|
+
raise FlowTaskError(f"Bad Response: {err}") from err
|
130
|
+
except RedisError as err:
|
131
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
132
|
+
except Exception as err:
|
133
|
+
raise FlowTaskError(f"Unknown Redis Error: {err}") from err
|
134
|
+
|
135
|
+
async def setex(self, key, value, timeout: str = None):
|
136
|
+
"""
|
137
|
+
setex
|
138
|
+
Set the value and expiration of a Key
|
139
|
+
params:
|
140
|
+
key: key Name
|
141
|
+
value: value of the key
|
142
|
+
timeout: expiration time in seconds
|
143
|
+
"""
|
144
|
+
if timeout is None:
|
145
|
+
timeout = self.expiration
|
146
|
+
elif isinstance(timeout, str):
|
147
|
+
timeout = self.parse_duration(timeout)
|
148
|
+
else:
|
149
|
+
try:
|
150
|
+
timeout = self.parse_duration(timeout)
|
151
|
+
except TypeError:
|
152
|
+
timeout = self.expiration
|
153
|
+
if timeout is None:
|
154
|
+
return
|
155
|
+
try:
|
156
|
+
logging.debug(
|
157
|
+
f"Cache: Set Cache {key} with expiration {timeout} secs"
|
158
|
+
)
|
159
|
+
await self._redis.setex(key, timeout, value)
|
160
|
+
except ReadOnlyError as err:
|
161
|
+
raise FlowTaskError(f"Redis is Read Only: {err}") from err
|
162
|
+
except ResponseError as err:
|
163
|
+
raise FlowTaskError(f"Bad Response: {err}") from err
|
164
|
+
except RedisError as err:
|
165
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
166
|
+
except Exception as err:
|
167
|
+
raise FlowTaskError(f"Unknown Redis Error: {err}") from err
|
168
|
+
|
169
|
+
async def open(self, url: str = None):
|
170
|
+
if not url:
|
171
|
+
url = self.redis_url
|
172
|
+
self._redis = await aioredis.from_url(
|
173
|
+
url, encoding="utf-8", decode_responses=True
|
174
|
+
)
|
175
|
+
return self
|
176
|
+
|
177
|
+
async def close(self):
|
178
|
+
try:
|
179
|
+
await self._redis.close()
|
180
|
+
await self._redis.connection_pool.disconnect()
|
181
|
+
except Exception:
|
182
|
+
pass
|
183
|
+
|
184
|
+
def connect(self):
|
185
|
+
try:
|
186
|
+
self._redis = redis.from_url(url=self.redis_url, **self.params)
|
187
|
+
except TimeoutError as err:
|
188
|
+
raise FlowTaskError(f"Redis Config: Redis Timeout: {err}") from err
|
189
|
+
except (RedisError, ConnectionError) as err:
|
190
|
+
raise FlowTaskError(
|
191
|
+
f"Redis Config: Unable to connect to Redis: {err}"
|
192
|
+
) from err
|
193
|
+
except Exception as err:
|
194
|
+
logging.exception(err)
|
195
|
+
raise FlowTaskError(f"Redis Error: {err}") from err
|
196
|
+
|
197
|
+
def disconnect(self):
|
198
|
+
try:
|
199
|
+
self._redis.close()
|
200
|
+
except Exception as err: # pylint: disable=W0703
|
201
|
+
logging.error(err)
|
@@ -0,0 +1,82 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
from abc import abstractmethod
|
3
|
+
from collections.abc import Callable
|
4
|
+
from tqdm import tqdm
|
5
|
+
from .credentials import CredentialsInterface
|
6
|
+
|
7
|
+
|
8
|
+
class ClientInterface(CredentialsInterface):
|
9
|
+
_credentials: dict = {"username": str, "password": str}
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
credentials: Optional[dict] = None,
|
14
|
+
host: str = None,
|
15
|
+
port: str = None,
|
16
|
+
**kwargs
|
17
|
+
) -> None:
|
18
|
+
|
19
|
+
# host and port (if needed)
|
20
|
+
self.no_host: bool = kwargs.get("no_host", False)
|
21
|
+
self.host: str = kwargs.pop('host', host)
|
22
|
+
self.port: int = kwargs.pop('port', port)
|
23
|
+
self._connection: Callable = None
|
24
|
+
# progress bar
|
25
|
+
self._pb: Callable = None
|
26
|
+
# any other argument
|
27
|
+
self._clientargs = {} # kwargs
|
28
|
+
super(ClientInterface, self).__init__(
|
29
|
+
credentials=credentials,
|
30
|
+
**kwargs
|
31
|
+
)
|
32
|
+
|
33
|
+
def define_host(self):
|
34
|
+
if self.no_host is False:
|
35
|
+
try:
|
36
|
+
self.host = self.credentials.get('host', self.host)
|
37
|
+
except (TypeError, AttributeError):
|
38
|
+
pass
|
39
|
+
try:
|
40
|
+
self.port = self.credentials.get('port', self.port)
|
41
|
+
except (TypeError, AttributeError):
|
42
|
+
pass
|
43
|
+
# getting from environment:
|
44
|
+
self.host = self.get_env_value(self.host, default=self.host)
|
45
|
+
self.port = self.get_env_value(str(self.port), default=self.port)
|
46
|
+
if self.host:
|
47
|
+
self._logger.debug(
|
48
|
+
f"<{__name__}>: HOST: {self.host}, PORT: {self.port}"
|
49
|
+
)
|
50
|
+
|
51
|
+
@abstractmethod
|
52
|
+
async def close(self, timeout: int = 5):
|
53
|
+
"""close.
|
54
|
+
Closing the connection.
|
55
|
+
"""
|
56
|
+
|
57
|
+
@abstractmethod
|
58
|
+
async def open(self, host: str = None, port: int = None, credentials: dict = None, **kwargs):
|
59
|
+
"""open.
|
60
|
+
Starts (open) a connection to external resource.
|
61
|
+
"""
|
62
|
+
|
63
|
+
async def __aenter__(self) -> "ClientInterface":
|
64
|
+
if not self._started:
|
65
|
+
await self.start()
|
66
|
+
await self.open(
|
67
|
+
host=self.host,
|
68
|
+
port=self.port,
|
69
|
+
credentials=self.credentials,
|
70
|
+
**self._clientargs,
|
71
|
+
)
|
72
|
+
return self
|
73
|
+
|
74
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
|
75
|
+
# clean up anything you need to clean up
|
76
|
+
return await self.close(timeout=1)
|
77
|
+
|
78
|
+
def start_progress(self, total: int = 1):
|
79
|
+
self._pb = tqdm(total=total)
|
80
|
+
|
81
|
+
def close_progress(self):
|
82
|
+
self._pb.close()
|