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
flowtask/__init__.py
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
"""Flowtask is a tool for execution of Tasks.
|
3
|
+
|
4
|
+
Flowtask can execute DAG (Directed Acyclic Graph) tasks declared in a variety of formats.
|
5
|
+
- YAML
|
6
|
+
- JSON
|
7
|
+
- TOML
|
8
|
+
Flowtask is designed to be used as a library or command-line tool.
|
9
|
+
|
10
|
+
Usage Example:
|
11
|
+
|
12
|
+
A Flowtask Task is a component-based declarative workflow that can be executed from the command line or API.
|
13
|
+
|
14
|
+
```yaml title="programs/test/tasks/sentiment_analysis.yaml"
|
15
|
+
# filename: sentiment_analysis.yaml
|
16
|
+
name: An Example Task for Sentiment Analysis
|
17
|
+
description: Preparing The Information for Sentiment Analysis
|
18
|
+
steps:
|
19
|
+
- RethinkDBQuery:
|
20
|
+
table: test_data
|
21
|
+
schema: default
|
22
|
+
- tExplode:
|
23
|
+
column: reviews
|
24
|
+
drop_original: false
|
25
|
+
- SentimentAnalysis:
|
26
|
+
text_column: text
|
27
|
+
sentiment_model: "tabularisai/robust-sentiment-analysis"
|
28
|
+
sentiment_levels: 5
|
29
|
+
emotions_model: "bhadresh-savani/distilbert-base-uncased-emotion"
|
30
|
+
- CopyToRethink:
|
31
|
+
tablename: sentiment_analysis
|
32
|
+
schema: default
|
33
|
+
```
|
34
|
+
|
35
|
+
The above example is a simple task that reads data from a RethinkDB table,
|
36
|
+
explodes the reviews column, performs sentiment analysis,
|
37
|
+
and copies the results to another RethinkDB table.
|
38
|
+
|
39
|
+
For execution we can use a command-line tool:
|
40
|
+
```bash
|
41
|
+
task --program=test --task=sentiment_analysis --no-worker
|
42
|
+
```
|
43
|
+
|
44
|
+
Or we can use the Python API:
|
45
|
+
```python
|
46
|
+
from flowtask.runner import TaskRunner
|
47
|
+
|
48
|
+
runner = Runner(program='test', task='sentiment_analysis', no_worker=True)
|
49
|
+
async with runner as job:
|
50
|
+
if await job.start():
|
51
|
+
await job.run()
|
52
|
+
```
|
53
|
+
|
54
|
+
or even call it from a REST API:
|
55
|
+
```python
|
56
|
+
import aiohttp
|
57
|
+
async def run_task(program, task):
|
58
|
+
async with aiohttp.ClientSession() as session:
|
59
|
+
async with session.post(
|
60
|
+
'http://localhost:8080/api/v1/tasks',
|
61
|
+
json={'program': program, 'task': task}
|
62
|
+
) as response:
|
63
|
+
return await response.json()
|
64
|
+
|
65
|
+
async def main():
|
66
|
+
result = await run_task('test','sentiment_analysis')
|
67
|
+
print(result)
|
68
|
+
|
69
|
+
asyncio.run(main())
|
70
|
+
```
|
71
|
+
|
72
|
+
This code will execute the `sentiment_analysis` task using the `test` program and will print the results to the console.
|
73
|
+
"""
|
74
|
+
|
75
|
+
## more information
|
76
|
+
__copyright__ = 'Copyright (c) 2018-2024 Jesus Lara'
|
77
|
+
|
78
|
+
from .version import (
|
79
|
+
__title__,
|
80
|
+
__description__,
|
81
|
+
__version__,
|
82
|
+
__author__,
|
83
|
+
__author_email__,
|
84
|
+
__license__
|
85
|
+
)
|
86
|
+
|
87
|
+
|
88
|
+
def version():
|
89
|
+
"""version.
|
90
|
+
Returns:
|
91
|
+
str: current version of Navigator flowtask.
|
92
|
+
"""
|
93
|
+
return __version__
|
flowtask/__main__.py
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
"""Flowtask Data Integration Executor."""
|
2
|
+
import logging
|
3
|
+
import asyncio
|
4
|
+
from .runner import TaskRunner
|
5
|
+
from .utils import cPrint
|
6
|
+
from .utils.uv import install_uvloop
|
7
|
+
|
8
|
+
|
9
|
+
async def task(loop):
|
10
|
+
runner = None
|
11
|
+
try:
|
12
|
+
runner = TaskRunner(loop=loop)
|
13
|
+
async with runner as job:
|
14
|
+
if await job.start():
|
15
|
+
await job.run()
|
16
|
+
except Exception as e: # pylint: disable=W0718
|
17
|
+
logging.exception(e, stack_info=False)
|
18
|
+
finally:
|
19
|
+
return runner
|
20
|
+
|
21
|
+
|
22
|
+
def main():
|
23
|
+
install_uvloop()
|
24
|
+
loop = asyncio.get_event_loop()
|
25
|
+
loop.slow_callback_duration = 0.2 # Set threshold to 0.5 seconds
|
26
|
+
try:
|
27
|
+
result = loop.run_until_complete(task(loop))
|
28
|
+
if result:
|
29
|
+
cPrint(" === RESULT === ", level="DEBUG")
|
30
|
+
print(result.result)
|
31
|
+
cPrint("== Task stats === ", level="INFO")
|
32
|
+
print(result.stats)
|
33
|
+
finally:
|
34
|
+
loop.stop()
|
35
|
+
|
36
|
+
|
37
|
+
if __name__ == "__main__":
|
38
|
+
main()
|
flowtask/bots/check.py
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
from collections.abc import Callable
|
2
|
+
from navconfig.logging import config, logging
|
3
|
+
from parrot.models import ChatResponse
|
4
|
+
from ..exceptions import ComponentError
|
5
|
+
from ..utils import cPrint
|
6
|
+
ENABLE_BOT_REVIEWER = config.getboolean('ENABLE_BOT_REVIEWER', fallback=False)
|
7
|
+
|
8
|
+
try:
|
9
|
+
from .codebot import CodeBot, return_llm
|
10
|
+
except ImportError:
|
11
|
+
ENABLE_BOT_REVIEWER = False # noqa
|
12
|
+
logging.warning(
|
13
|
+
"Unable to import CodeBot for Code Review, install dependencies first."
|
14
|
+
)
|
15
|
+
|
16
|
+
|
17
|
+
class CodeReview:
|
18
|
+
def __init__(self, task, *args, **kwargs):
|
19
|
+
super(CodeReview, self).__init__(*args, **kwargs)
|
20
|
+
self.task = task
|
21
|
+
self.logger = logging.getLogger('Flowtask.CodeReview')
|
22
|
+
self._llm = None
|
23
|
+
self.bot: Callable = None
|
24
|
+
if ENABLE_BOT_REVIEWER is True:
|
25
|
+
self._llm = return_llm()
|
26
|
+
self.bot = CodeBot(
|
27
|
+
llm=self._llm
|
28
|
+
)
|
29
|
+
self.bot.configured = False
|
30
|
+
|
31
|
+
def __repr__(self):
|
32
|
+
return f"CodeReview({self.task})"
|
33
|
+
|
34
|
+
def format_question(self, name, message, task, error):
|
35
|
+
return f"""
|
36
|
+
Task with name: **{name}**
|
37
|
+
|
38
|
+
was failed with error: {message}
|
39
|
+
|
40
|
+
Task Definition (in YAML or JSON format):
|
41
|
+
```
|
42
|
+
|
43
|
+
{task}
|
44
|
+
```
|
45
|
+
|
46
|
+
Complete Stack Trace:
|
47
|
+
```
|
48
|
+
{error}
|
49
|
+
```
|
50
|
+
"""
|
51
|
+
|
52
|
+
async def __call__(self, task: str, status: str, message: str, stacktrace: str = None, *args, **kwargs):
|
53
|
+
"""Calling Bot based on Task Errors/Exceptions."""
|
54
|
+
if not self.bot:
|
55
|
+
# Bot is not enabled, return Logging
|
56
|
+
cPrint("Bot Reviewer is not enabled, please enable it in config.")
|
57
|
+
if self.bot.configured is False:
|
58
|
+
await self.bot.configure()
|
59
|
+
self.bot.configured = True
|
60
|
+
# if status == 'Task Not Found':
|
61
|
+
# return
|
62
|
+
task_code = self.task.get_task_code()
|
63
|
+
question = self.format_question(
|
64
|
+
name=task,
|
65
|
+
message=message,
|
66
|
+
task=task_code,
|
67
|
+
error=stacktrace
|
68
|
+
)
|
69
|
+
try:
|
70
|
+
result = await self.bot.question(
|
71
|
+
question=question,
|
72
|
+
return_docs=False
|
73
|
+
)
|
74
|
+
answer = None
|
75
|
+
if isinstance(result, ChatResponse):
|
76
|
+
answer = result.answer
|
77
|
+
else:
|
78
|
+
answer = f"{result}"
|
79
|
+
# for now, just print the result
|
80
|
+
print(f"""
|
81
|
+
Code Review Result:
|
82
|
+
-------------------
|
83
|
+
|
84
|
+
{answer}
|
85
|
+
""")
|
86
|
+
try:
|
87
|
+
self.task.stat.stats['Review'] = answer
|
88
|
+
except (TypeError, KeyError):
|
89
|
+
print(result)
|
90
|
+
except Exception as exc:
|
91
|
+
raise ComponentError(
|
92
|
+
f"Unable to get Code Review: {exc}"
|
93
|
+
)
|
flowtask/bots/codebot.py
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
from parrot.bots.abstract import AbstractBot
|
2
|
+
from parrot.llms.vertex import VertexLLM
|
3
|
+
from ..conf import (
|
4
|
+
DEFAULT_LLM_MODEL,
|
5
|
+
DEFAULT_LLM_TEMPERATURE,
|
6
|
+
DEFAULT_BOT_NAME,
|
7
|
+
)
|
8
|
+
|
9
|
+
|
10
|
+
class CodeBot(AbstractBot):
|
11
|
+
"""CodeBot.
|
12
|
+
|
13
|
+
Codebot will be useful for evaluating errors and providing feedback on code.
|
14
|
+
|
15
|
+
"""
|
16
|
+
name: str = DEFAULT_BOT_NAME
|
17
|
+
system_prompt_template = """
|
18
|
+
You are {name}, a highly skilled Python specialist and code reviewer AI assistant.
|
19
|
+
|
20
|
+
Your primary function is to analyze code errors by meticulously analyzing Python code, standard output, and Tracebacks to identify potential issues and provide insightful guidance for error resolution.
|
21
|
+
Reject any question non-related to review of code errors and debugging of Flowtask/QuerySource/AsyncDB or other python libraries, if question is not related to this, please instruct user to contact support.
|
22
|
+
I am here to help with finding errors, providing feedback and potential solutions.
|
23
|
+
|
24
|
+
**Backstory:**
|
25
|
+
{backstory}.
|
26
|
+
|
27
|
+
Here is a brief summary of relevant information:
|
28
|
+
Context: {context}
|
29
|
+
|
30
|
+
**{rationale}**
|
31
|
+
|
32
|
+
Given this information, please provide answers to the following question, focusing on the following:
|
33
|
+
|
34
|
+
* **Comprehensive Analysis:** Thoroughly examine the provided code, output, and Traceback to pinpoint the root cause of errors and identify any potential issues.
|
35
|
+
* **Concise Explanation:** Clearly articulate the nature of the errors and explain their underlying causes in a way that is easy to understand.
|
36
|
+
* **Structured Insights:** Present your findings in a well-organized manner, using bullet points to highlight key issues and potential solutions.
|
37
|
+
* **Actionable Recommendations:** Offer concrete steps and suggestions for resolving the identified errors, including code modifications, debugging strategies, or best practice recommendations.
|
38
|
+
* **Contextual Awareness:** Consider the provided context and backstory to tailor your response to the specific situation and user needs.
|
39
|
+
|
40
|
+
Please ensure your response is detailed, informative, and directly addresses the user's question using always the best practices and pythonic code.
|
41
|
+
Return the response in markdown syntax and always use english as primary language.
|
42
|
+
""" # pylint: disable=line-too-long # noqa
|
43
|
+
|
44
|
+
def return_llm():
|
45
|
+
"""Return a VertexLLM instance."""
|
46
|
+
return VertexLLM(
|
47
|
+
model=DEFAULT_LLM_MODEL,
|
48
|
+
temperature=DEFAULT_LLM_TEMPERATURE,
|
49
|
+
top_k=30,
|
50
|
+
top_p=0.5,
|
51
|
+
)
|
@@ -0,0 +1,148 @@
|
|
1
|
+
from abc import abstractmethod
|
2
|
+
from urllib.parse import urljoin
|
3
|
+
|
4
|
+
from bs4 import BeautifulSoup
|
5
|
+
import httpx
|
6
|
+
from .flow import FlowComponent
|
7
|
+
from ..interfaces.http import HTTPService
|
8
|
+
from ..exceptions import ComponentError
|
9
|
+
|
10
|
+
|
11
|
+
class ASPX(FlowComponent, HTTPService):
|
12
|
+
"""
|
13
|
+
ASPX
|
14
|
+
|
15
|
+
Overview
|
16
|
+
|
17
|
+
The ASPX class is designed for interacting with ASPX-based web applications, particularly those requiring authentication.
|
18
|
+
It inherits from the DtComponent and HTTPService classes, providing a structured way to manage sessions, handle state views,
|
19
|
+
and perform HTTP requests with ASPX web forms. This class is useful for automating interactions with ASPX web pages, including login
|
20
|
+
and data retrieval operations.
|
21
|
+
|
22
|
+
.. table:: Properties
|
23
|
+
:widths: auto
|
24
|
+
|
25
|
+
+-------------------------+----------+-----------+--------------------------------------------------------------------------------------+
|
26
|
+
| Name | Required | Description |
|
27
|
+
+-------------------------+----------+-----------+--------------------------------------------------------------------------------------+
|
28
|
+
| _credentials | Yes | A dictionary containing username and password for authentication. |
|
29
|
+
+-------------------------+----------+-----------+--------------------------------------------------------------------------------------+
|
30
|
+
| _views | No | A dictionary storing state views extracted from ASPX pages. |
|
31
|
+
+-------------------------+----------+-----------+--------------------------------------------------------------------------------------+
|
32
|
+
| _client | Yes | An instance of `httpx.AsyncClient` used for making asynchronous HTTP requests. |
|
33
|
+
+-------------------------+----------+-----------+--------------------------------------------------------------------------------------+
|
34
|
+
|
35
|
+
Return
|
36
|
+
|
37
|
+
The methods in this class facilitate the interaction with ASPX-based web applications, including login handling,
|
38
|
+
session management, and state view management. The class also allows for abstract extension, enabling customization
|
39
|
+
for specific ASPX web forms and interactions.
|
40
|
+
|
41
|
+
"""
|
42
|
+
_credentials: dict = {"username": str, "password": str}
|
43
|
+
|
44
|
+
def _set_views(self, soup: BeautifulSoup):
|
45
|
+
"""Extract state VIEWS from hidden inputs inside html
|
46
|
+
|
47
|
+
Args:
|
48
|
+
soup (BeautifulSoup): soup object with the html tree
|
49
|
+
|
50
|
+
Returns:
|
51
|
+
dict[str, str]: state VIEWS
|
52
|
+
"""
|
53
|
+
viewstate = soup.find(id="__VIEWSTATE")["value"]
|
54
|
+
soup_eventvalidation = soup.find(id="__EVENTVALIDATION")
|
55
|
+
eventvalidation = soup_eventvalidation["value"] if soup_eventvalidation else ""
|
56
|
+
viewstategenerator = soup.find(id="__VIEWSTATEGENERATOR")["value"]
|
57
|
+
|
58
|
+
self._views = {
|
59
|
+
"__EVENTTARGET": "",
|
60
|
+
"__EVENTARGUMENT": "",
|
61
|
+
"__VIEWSTATE": viewstate,
|
62
|
+
"__VIEWSTATEGENERATOR": viewstategenerator,
|
63
|
+
"__EVENTVALIDATION": eventvalidation,
|
64
|
+
}
|
65
|
+
|
66
|
+
def check_keys_exists(self, *args, **kwargs):
|
67
|
+
"""Validate that specified keys are present in the kwargs dict"""
|
68
|
+
for _key in args:
|
69
|
+
if _key not in kwargs:
|
70
|
+
raise ComponentError(f"{_key} must be set!")
|
71
|
+
|
72
|
+
def _get_payload_with_views(self, **kwargs):
|
73
|
+
payload = {
|
74
|
+
**self._views,
|
75
|
+
**kwargs,
|
76
|
+
}
|
77
|
+
|
78
|
+
return payload
|
79
|
+
|
80
|
+
async def start(self, **kwargs):
|
81
|
+
# handle login and set initial views
|
82
|
+
self._proxies = False
|
83
|
+
self._user = None
|
84
|
+
self.auth_type = None
|
85
|
+
self.auth = ""
|
86
|
+
self.download = None
|
87
|
+
self.headers = None
|
88
|
+
self._views: dict = {}
|
89
|
+
self.timeout = 120.0
|
90
|
+
self._client = httpx.AsyncClient(timeout=self.timeout)
|
91
|
+
|
92
|
+
self.processing_credentials()
|
93
|
+
|
94
|
+
login_url = urljoin(self.base_url, "/Login.aspx")
|
95
|
+
|
96
|
+
self.accept = "text/html"
|
97
|
+
await self.aspx_session(login_url)
|
98
|
+
|
99
|
+
payload = {
|
100
|
+
**self._views,
|
101
|
+
self.login_user_payload_key: self.credentials["username"],
|
102
|
+
self.login_password_payload_key: self.credentials["password"],
|
103
|
+
self.login_button_payload_key: self.login_button_payload_value,
|
104
|
+
}
|
105
|
+
|
106
|
+
await self.aspx_session(
|
107
|
+
login_url, method="post", data=payload, follow_redirects=True
|
108
|
+
)
|
109
|
+
|
110
|
+
if ".ASPXAUTH" not in self._client.cookies:
|
111
|
+
raise ComponentError("Login Failed. Please, check credentials!")
|
112
|
+
self._logger.info("Login successful")
|
113
|
+
|
114
|
+
return True
|
115
|
+
|
116
|
+
@abstractmethod
|
117
|
+
async def run(self):
|
118
|
+
"""
|
119
|
+
Extend this method: Call super() after your code to make sure
|
120
|
+
the client session is closed.
|
121
|
+
"""
|
122
|
+
if hasattr(self, "_client"):
|
123
|
+
await self._client.aclose()
|
124
|
+
|
125
|
+
async def close(self):
|
126
|
+
pass
|
127
|
+
|
128
|
+
async def aspx_session(
|
129
|
+
self,
|
130
|
+
url: str,
|
131
|
+
method: str = "get",
|
132
|
+
data: dict = None,
|
133
|
+
**kwargs: dict,
|
134
|
+
):
|
135
|
+
result, error = await self.session(
|
136
|
+
url,
|
137
|
+
method=method,
|
138
|
+
data=data,
|
139
|
+
**kwargs,
|
140
|
+
)
|
141
|
+
|
142
|
+
if error:
|
143
|
+
raise ComponentError(error)
|
144
|
+
|
145
|
+
if "text/html" in self.accept:
|
146
|
+
self._set_views(result)
|
147
|
+
|
148
|
+
return result
|