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,93 @@
|
|
1
|
+
import asyncio
|
2
|
+
from typing import Union
|
3
|
+
from collections.abc import Callable
|
4
|
+
from ..exceptions import ComponentError, ConfigError
|
5
|
+
from .tPandas import tPandas
|
6
|
+
|
7
|
+
class tOrder(tPandas):
|
8
|
+
"""
|
9
|
+
tOrder
|
10
|
+
|
11
|
+
Overview
|
12
|
+
|
13
|
+
The `tOrder` class is a component designed to order a Pandas DataFrame by a specified column.
|
14
|
+
It allows sorting the DataFrame either in ascending or descending order based on the specified column.
|
15
|
+
|
16
|
+
Properties
|
17
|
+
|
18
|
+
.. table:: Properties
|
19
|
+
:widths: auto
|
20
|
+
|
21
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
22
|
+
| Name | Required | Type | Description |
|
23
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
24
|
+
| columns | Yes | str | The name of the column to sort the DataFrame by. |
|
25
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
26
|
+
| ascending | No | bool | Specifies whether to sort the DataFrame in ascending order. Defaults to True. |
|
27
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
28
|
+
|
29
|
+
Return
|
30
|
+
The dataframe ordinated by the column give it in the order_by either ascending or descending.
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
Example:
|
35
|
+
|
36
|
+
```yaml
|
37
|
+
tOrder:
|
38
|
+
columns:
|
39
|
+
- district_id
|
40
|
+
ascending: true
|
41
|
+
```
|
42
|
+
|
43
|
+
""" # noqa
|
44
|
+
|
45
|
+
def __init__(
|
46
|
+
self,
|
47
|
+
loop: asyncio.AbstractEventLoop = None,
|
48
|
+
job: Callable = None,
|
49
|
+
stat: Callable = None,
|
50
|
+
**kwargs,
|
51
|
+
):
|
52
|
+
"""Init Method."""
|
53
|
+
self._column: Union[str, list] = kwargs.pop("columns", None)
|
54
|
+
if isinstance(self._column, list):
|
55
|
+
ascending = [True for x in self._column]
|
56
|
+
elif isinstance(self._column, str):
|
57
|
+
ascending = [True]
|
58
|
+
self._column = [self._column]
|
59
|
+
self._ascending: Union[bool, list] = kwargs.pop("ascending", ascending)
|
60
|
+
if not self._column:
|
61
|
+
raise ConfigError(
|
62
|
+
"tOrder requires a column for ordering => **columns**"
|
63
|
+
)
|
64
|
+
super().__init__(loop=loop, job=job, stat=stat, **kwargs)
|
65
|
+
|
66
|
+
async def _run(self):
|
67
|
+
try:
|
68
|
+
# Check if the specified column exists in the DataFrame
|
69
|
+
columns = self.data.columns
|
70
|
+
for col in self._column:
|
71
|
+
if col not in columns:
|
72
|
+
self._logger.warning(
|
73
|
+
f"The column '{self._column}' does not exist in the DataFrame."
|
74
|
+
)
|
75
|
+
return self.data # Return the unsorted DataFrame
|
76
|
+
# Check if the specified column is empty
|
77
|
+
if self.data[self._column].empty:
|
78
|
+
self._logger.warning(
|
79
|
+
f"The column '{self._column}' is empty."
|
80
|
+
)
|
81
|
+
return self.data
|
82
|
+
# Sort the DataFrame by the specified column
|
83
|
+
df = self.data.sort_values(
|
84
|
+
by=self._column,
|
85
|
+
ascending=self._ascending,
|
86
|
+
**self.pd_args
|
87
|
+
).reset_index(drop=True)
|
88
|
+
self.add_metric('ORDER_BY', self._column)
|
89
|
+
return df
|
90
|
+
except Exception as err:
|
91
|
+
raise ComponentError(
|
92
|
+
f"Generic Error on Data: error: {err}"
|
93
|
+
) from err
|
@@ -0,0 +1,94 @@
|
|
1
|
+
import asyncio
|
2
|
+
from typing import Any, Union
|
3
|
+
from collections.abc import Callable
|
4
|
+
import pandas
|
5
|
+
from pandas import DataFrame
|
6
|
+
from ..exceptions import ComponentError, DataNotFound
|
7
|
+
from .flow import FlowComponent
|
8
|
+
|
9
|
+
|
10
|
+
class tPandas(FlowComponent):
|
11
|
+
"""
|
12
|
+
tPandas
|
13
|
+
|
14
|
+
Overview
|
15
|
+
|
16
|
+
The tPandas class is an abstract interface for performing various data transformations on Pandas DataFrames.
|
17
|
+
It provides foundational methods and structure for components that need to apply transformations, merges, or other
|
18
|
+
DataFrame operations within a task.
|
19
|
+
|
20
|
+
This interface provides methods to initialize, transform, and debug Pandas DataFrame operations.
|
21
|
+
Concrete implementations using `tPandas` can define specific transformations. On execution, metrics
|
22
|
+
for rows and columns are recorded, and any transformation errors or data mismatches are raised as exceptions
|
23
|
+
with detailed error messages for effective debugging.
|
24
|
+
"""
|
25
|
+
|
26
|
+
def __init__(
|
27
|
+
self,
|
28
|
+
loop: asyncio.AbstractEventLoop = None,
|
29
|
+
job: Callable = None,
|
30
|
+
stat: Callable = None,
|
31
|
+
**kwargs,
|
32
|
+
):
|
33
|
+
"""Init Method."""
|
34
|
+
self.df1: Union[DataFrame, Any] = None
|
35
|
+
self.df2: Union[DataFrame, Any] = None
|
36
|
+
self.type: str = None
|
37
|
+
self.condition: str = ''
|
38
|
+
# Pandas Arguments:
|
39
|
+
self.pd_args = kwargs.pop("pd_args", {})
|
40
|
+
super().__init__(loop=loop, job=job, stat=stat, **kwargs)
|
41
|
+
|
42
|
+
async def start(self, **kwargs):
|
43
|
+
if self.previous:
|
44
|
+
self.data: DataFrame = self.input
|
45
|
+
|
46
|
+
if hasattr(self, "_multi") and self._multi:
|
47
|
+
self.df1: DataFrame = self.previous[0].output()
|
48
|
+
try:
|
49
|
+
self.df2: DataFrame = self.previous[1].output()
|
50
|
+
except IndexError:
|
51
|
+
self.df2 = None
|
52
|
+
else:
|
53
|
+
if not isinstance(self.data, DataFrame):
|
54
|
+
raise ComponentError("Incompatible Pandas Dataframe", status=404)
|
55
|
+
else:
|
56
|
+
raise DataNotFound("Data Not Found", status=404)
|
57
|
+
|
58
|
+
await super().start(**kwargs)
|
59
|
+
return True
|
60
|
+
|
61
|
+
async def close(self):
|
62
|
+
pass
|
63
|
+
|
64
|
+
async def run(self):
|
65
|
+
self._result = self.data
|
66
|
+
try:
|
67
|
+
df = await self._run()
|
68
|
+
if df.empty:
|
69
|
+
raise DataNotFound(
|
70
|
+
f"Data not Found over {self.__name__}"
|
71
|
+
)
|
72
|
+
self._result = df
|
73
|
+
self.add_metric("NUM_ROWS", self._result.shape[0])
|
74
|
+
self.add_metric("NUM_COLUMNS", self._result.shape[1])
|
75
|
+
if self._debug:
|
76
|
+
print(f"Debugging: {self.__name__} ===")
|
77
|
+
print(self._result)
|
78
|
+
columns = list(self._result.columns)
|
79
|
+
for column in columns:
|
80
|
+
t = self._result[column].dtype
|
81
|
+
print(
|
82
|
+
column, "->", t, "->", self._result[column].iloc[0]
|
83
|
+
)
|
84
|
+
return self._result
|
85
|
+
except DataNotFound:
|
86
|
+
raise
|
87
|
+
except (ValueError, KeyError) as err:
|
88
|
+
raise ComponentError(
|
89
|
+
f"{self.__name__} Error: {err!s}"
|
90
|
+
) from err
|
91
|
+
except Exception as err:
|
92
|
+
raise ComponentError(
|
93
|
+
f"{self.__name__} Exception {err!s}"
|
94
|
+
) from err
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import asyncio
|
2
|
+
from typing import Union
|
3
|
+
from collections.abc import Callable
|
4
|
+
from ..exceptions import ComponentError, ConfigError
|
5
|
+
from .tPandas import tPandas
|
6
|
+
|
7
|
+
class tPivot(tPandas):
|
8
|
+
"""
|
9
|
+
tPivot
|
10
|
+
|
11
|
+
Overview
|
12
|
+
|
13
|
+
Pivoting a Dataframe to transpose a column into other columns.
|
14
|
+
|
15
|
+
Properties
|
16
|
+
|
17
|
+
.. table:: Properties
|
18
|
+
:widths: auto
|
19
|
+
|
20
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
21
|
+
| Name | Required | Type | Description |
|
22
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
23
|
+
| columns | Yes | list | The List of Columns to be Pivoted. |
|
24
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
25
|
+
| index | No | list | List of columns to be preserved, default to all columns less "values" |
|
26
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
27
|
+
| values | Yes | str | Columns that transpose the values for pivoted column(s). |
|
28
|
+
+------------------+----------+-----------+-----------------------------------------------------------------------------------+
|
29
|
+
|
30
|
+
Return
|
31
|
+
The dataframe Pivoted by "columns" with values using the list of "values".
|
32
|
+
|
33
|
+
""" # noqa
|
34
|
+
def __init__(
|
35
|
+
self,
|
36
|
+
loop: asyncio.AbstractEventLoop = None,
|
37
|
+
job: Callable = None,
|
38
|
+
stat: Callable = None,
|
39
|
+
**kwargs,
|
40
|
+
):
|
41
|
+
"""Init Method."""
|
42
|
+
self._columns: Union[str, list] = kwargs.pop("columns", None)
|
43
|
+
self._index: list = kwargs.pop("index", [])
|
44
|
+
self._values: list = kwargs.pop("values", [])
|
45
|
+
self._aggfunc: str = kwargs.pop('aggfunc', 'sum')
|
46
|
+
self._sort: list = kwargs.pop('sort_by', [])
|
47
|
+
super().__init__(
|
48
|
+
loop=loop, job=job, stat=stat, **kwargs
|
49
|
+
)
|
50
|
+
|
51
|
+
async def _run(self):
|
52
|
+
try:
|
53
|
+
df_pivot = self.data.pivot_table(
|
54
|
+
index=self._index,
|
55
|
+
columns=self._columns,
|
56
|
+
values=self._values,
|
57
|
+
aggfunc=self._aggfunc,
|
58
|
+
dropna=False
|
59
|
+
).reset_index()
|
60
|
+
# Renaming the columns to match the desired output
|
61
|
+
df_pivot.columns.name = None # Remove the index name
|
62
|
+
if self._sort:
|
63
|
+
df_pivot = df_pivot.sort_values(
|
64
|
+
by=self._sort,
|
65
|
+
ascending=True
|
66
|
+
).reset_index(drop=True)
|
67
|
+
return df_pivot
|
68
|
+
except Exception as err:
|
69
|
+
raise ComponentError(
|
70
|
+
f"Generic Error on Data: error: {err}"
|
71
|
+
) from err
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import asyncio
|
2
|
+
from typing import List
|
3
|
+
from collections.abc import Callable
|
4
|
+
import pandas
|
5
|
+
from ..exceptions import ComponentError
|
6
|
+
from .tPandas import tPandas
|
7
|
+
|
8
|
+
|
9
|
+
class tPluckCols(tPandas):
|
10
|
+
"""
|
11
|
+
tPluckCols
|
12
|
+
|
13
|
+
Overview
|
14
|
+
|
15
|
+
The tPluckCols class is a component for selecting a specific subset of columns from a Pandas DataFrame.
|
16
|
+
It provides a streamlined way to filter columns, allowing only specified columns to be retained in the output.
|
17
|
+
|
18
|
+
.. table:: Properties
|
19
|
+
:widths: auto
|
20
|
+
|
21
|
+
+-------------+----------+-----------+---------------------------------------------------------------+
|
22
|
+
| Name | Required | Summary |
|
23
|
+
+-------------+----------+-----------+---------------------------------------------------------------+
|
24
|
+
| columns | Yes | A list of column names to retain in the DataFrame. |
|
25
|
+
+-------------+----------+-----------+---------------------------------------------------------------+
|
26
|
+
|
27
|
+
Returns
|
28
|
+
|
29
|
+
This component returns a Pandas DataFrame containing only the specified columns listed in `columns`.
|
30
|
+
If no columns are provided, it raises an error. The resulting DataFrame is a copy to ensure
|
31
|
+
any modifications do not affect the original DataFrame.
|
32
|
+
|
33
|
+
|
34
|
+
Example:
|
35
|
+
|
36
|
+
```yaml
|
37
|
+
tPluckCols:
|
38
|
+
depends:
|
39
|
+
- TransformRows_11
|
40
|
+
columns:
|
41
|
+
- location_code
|
42
|
+
- ss_market
|
43
|
+
- store_id
|
44
|
+
- store_number
|
45
|
+
- company_id
|
46
|
+
- pt_ft
|
47
|
+
- is_covered
|
48
|
+
- endcap
|
49
|
+
- rev_band
|
50
|
+
- comparison_store
|
51
|
+
```
|
52
|
+
|
53
|
+
""" #noqa
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
def __init__(
|
58
|
+
self,
|
59
|
+
loop: asyncio.AbstractEventLoop = None,
|
60
|
+
job: Callable = None,
|
61
|
+
stat: Callable = None,
|
62
|
+
**kwargs,
|
63
|
+
):
|
64
|
+
"""Init Method."""
|
65
|
+
self.columns: List = None
|
66
|
+
super(tPluckCols, self).__init__(loop=loop, job=job, stat=stat, **kwargs)
|
67
|
+
|
68
|
+
async def start(self, **kwargs):
|
69
|
+
"""Obtain Pandas Dataframe."""
|
70
|
+
await super().start(**kwargs)
|
71
|
+
if not self.columns:
|
72
|
+
raise ComponentError("Error: need to specify a list of *columns*")
|
73
|
+
return True
|
74
|
+
|
75
|
+
async def _run(self):
|
76
|
+
return self.data[self.columns].copy()
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import asyncio
|
2
|
+
from collections.abc import Callable
|
3
|
+
from ..exceptions import ComponentError, ConfigError
|
4
|
+
from .tPandas import tPandas
|
5
|
+
|
6
|
+
|
7
|
+
class tUnnest(tPandas):
|
8
|
+
"""
|
9
|
+
tUnnest
|
10
|
+
|
11
|
+
Overview
|
12
|
+
|
13
|
+
The tUnnest class is a component for splitting a column in a DataFrame into multiple rows, based on a specified
|
14
|
+
separator. This component supports options to drop the original column after splitting and to define a new column
|
15
|
+
for the split values.
|
16
|
+
|
17
|
+
.. table:: Properties
|
18
|
+
:widths: auto
|
19
|
+
|
20
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
21
|
+
| Name | Required | Summary |
|
22
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
23
|
+
| source_column | Yes | The name of the column to split into multiple rows. |
|
24
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
25
|
+
| destination | No | The name of the column to store the split values. Defaults to source. |
|
26
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
27
|
+
| drop_source | No | Boolean indicating if the original column should be dropped after split.|
|
28
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
29
|
+
| separator | No | The separator used to split the values. Defaults to ", ". |
|
30
|
+
+----------------+----------+-----------+---------------------------------------------------------------+
|
31
|
+
|
32
|
+
Returns
|
33
|
+
|
34
|
+
This component returns a DataFrame where the specified `source_column` is split into multiple rows based on the
|
35
|
+
`separator`. If `drop_source` is set to True, the original column is removed after the split. Errors related to
|
36
|
+
column splitting are logged and raised as exceptions.
|
37
|
+
|
38
|
+
|
39
|
+
Example:
|
40
|
+
|
41
|
+
```yaml
|
42
|
+
tUnnest:
|
43
|
+
source_column: warehouse_store_ids
|
44
|
+
destination: store_id
|
45
|
+
drop_source: true
|
46
|
+
```
|
47
|
+
|
48
|
+
""" #noqa
|
49
|
+
def __init__(
|
50
|
+
self,
|
51
|
+
loop: asyncio.AbstractEventLoop = None,
|
52
|
+
job: Callable = None,
|
53
|
+
stat: Callable = None,
|
54
|
+
**kwargs,
|
55
|
+
):
|
56
|
+
"""Init Method."""
|
57
|
+
self.source_column: str = kwargs.pop('source_column', None)
|
58
|
+
self.destination: str = kwargs.get('destination', None)
|
59
|
+
self.drop_source: bool = kwargs.get('drop_source', False)
|
60
|
+
self.separator: str = kwargs.get('separator', ', ')
|
61
|
+
if not self.source_column:
|
62
|
+
raise ConfigError(
|
63
|
+
"Missing Source_column for making unnest."
|
64
|
+
)
|
65
|
+
super().__init__(loop=loop, job=job, stat=stat, **kwargs)
|
66
|
+
|
67
|
+
async def _run(self):
|
68
|
+
try:
|
69
|
+
# Split the column into multiple rows
|
70
|
+
df = self.data.assign(
|
71
|
+
**{
|
72
|
+
self.destination: self.data[self.source_column].str.split(self.separator)
|
73
|
+
}
|
74
|
+
).explode(self.destination)
|
75
|
+
if self.drop_source is True:
|
76
|
+
# Drop the original column
|
77
|
+
df = df.drop(columns=[self.source_column])
|
78
|
+
return df
|
79
|
+
except Exception as err:
|
80
|
+
raise ComponentError(
|
81
|
+
f"Unknown error {err!s}"
|
82
|
+
) from err
|