flowtask 5.8.4__cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-312-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-312-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/argparser.py +235 -0
- flowtask/parsers/base.c +15155 -0
- flowtask/parsers/base.cpython-312-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/json.c +11968 -0
- flowtask/parsers/json.cpython-312-x86_64-linux-gnu.so +0 -0
- flowtask/parsers/maps.py +49 -0
- flowtask/parsers/toml.c +11968 -0
- flowtask/parsers/toml.cpython-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- flowtask/utils/json.cpp +13349 -0
- flowtask/utils/json.cpython-312-x86_64-linux-gnu.so +0 -0
- flowtask/utils/mail.py +63 -0
- flowtask/utils/parseqs.c +13324 -0
- flowtask/utils/parserqs.cpython-312-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,154 @@
|
|
1
|
+
"""
|
2
|
+
SmartSheet.
|
3
|
+
|
4
|
+
Making operations over an Smartsheet Service.
|
5
|
+
|
6
|
+
"""
|
7
|
+
import random
|
8
|
+
from functools import partial
|
9
|
+
from pathlib import Path
|
10
|
+
import ssl
|
11
|
+
import aiofiles
|
12
|
+
import aiohttp
|
13
|
+
from ..exceptions import (
|
14
|
+
ComponentError,
|
15
|
+
ConfigError,
|
16
|
+
FileNotFound
|
17
|
+
)
|
18
|
+
from .credentials import CredentialsInterface
|
19
|
+
from ..interfaces.http import ua
|
20
|
+
|
21
|
+
|
22
|
+
class SmartSheetClient(CredentialsInterface):
|
23
|
+
_credentials: dict = {"token": str, "scheme": str}
|
24
|
+
|
25
|
+
def __init__(self, *args, **kwargs):
|
26
|
+
self.file_format: str = "application/vnd.ms-excel"
|
27
|
+
self.url: str = "https://api.smartsheet.com/2.0/sheets/"
|
28
|
+
self.create_destination: bool = True # by default
|
29
|
+
self.file_id: str = kwargs.pop('file_id', None)
|
30
|
+
api_key = self.get_env_value("SMARTSHEET_API_KEY")
|
31
|
+
self.api_key: str = kwargs.pop('api_key', api_key)
|
32
|
+
kwargs['no_host'] = True
|
33
|
+
super().__init__(*args, **kwargs)
|
34
|
+
if not self.api_key:
|
35
|
+
raise ComponentError(
|
36
|
+
f"SmartSheet: Invalid API Key name {self.api_key}"
|
37
|
+
)
|
38
|
+
self.ssl_certs = kwargs.get('ssl_certs', [])
|
39
|
+
self.ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
40
|
+
self.ssl_ctx.options &= ~ssl.OP_NO_SSLv3
|
41
|
+
self.ssl_ctx.minimum_version = ssl.TLSVersion.TLSv1_2
|
42
|
+
self.ssl_ctx.check_hostname = False
|
43
|
+
self.ssl_ctx.verify_mode = ssl.CERT_NONE
|
44
|
+
if self.ssl_certs:
|
45
|
+
self.ssl_ctx.load_cert_chain(*self.ssl_certs)
|
46
|
+
|
47
|
+
async def http_get(
|
48
|
+
self,
|
49
|
+
url: str = None,
|
50
|
+
credentials: dict = None,
|
51
|
+
headers: dict = {},
|
52
|
+
accept: str = 'application/vnd.ms-excel',
|
53
|
+
destination: Path = None
|
54
|
+
):
|
55
|
+
"""
|
56
|
+
session.
|
57
|
+
connect to an http source using aiohttp
|
58
|
+
"""
|
59
|
+
timeout = aiohttp.ClientTimeout(total=self.timeout)
|
60
|
+
if url is None:
|
61
|
+
url = self.url
|
62
|
+
# TODO: Auth, Data, etc
|
63
|
+
auth = {}
|
64
|
+
params = {}
|
65
|
+
headers = {
|
66
|
+
"Accept": accept,
|
67
|
+
"Accept-Encoding": "gzip, deflate",
|
68
|
+
"DNT": "1",
|
69
|
+
"Connection": "keep-alive",
|
70
|
+
"Upgrade-Insecure-Requests": "1",
|
71
|
+
"User-Agent": random.choice(ua),
|
72
|
+
**headers,
|
73
|
+
}
|
74
|
+
if credentials:
|
75
|
+
if "username" in credentials: # basic Authentication
|
76
|
+
auth = aiohttp.BasicAuth(
|
77
|
+
credentials["username"], credentials["password"]
|
78
|
+
)
|
79
|
+
params = {"auth": auth}
|
80
|
+
elif "token" in credentials:
|
81
|
+
headers["Authorization"] = "{scheme} {token}".format(
|
82
|
+
scheme=credentials["scheme"], token=credentials["token"]
|
83
|
+
)
|
84
|
+
async with aiohttp.ClientSession(**params) as session:
|
85
|
+
meth = getattr(session, 'get')
|
86
|
+
ssl = {"ssl": self.ssl_ctx, "verify_ssl": True}
|
87
|
+
fn = partial(
|
88
|
+
meth,
|
89
|
+
url,
|
90
|
+
headers=headers,
|
91
|
+
timeout=timeout,
|
92
|
+
allow_redirects=True,
|
93
|
+
**ssl,
|
94
|
+
)
|
95
|
+
try:
|
96
|
+
async with fn() as response:
|
97
|
+
if response.status in (200, 201, 202):
|
98
|
+
return await self.http_response(response, destination)
|
99
|
+
else:
|
100
|
+
print("ERROR RESPONSE >> ", response)
|
101
|
+
raise ComponentError(
|
102
|
+
f"Smartsheet: Error getting data from URL {response}"
|
103
|
+
)
|
104
|
+
except Exception as err:
|
105
|
+
raise ComponentError(
|
106
|
+
f"Smartsheet: Error Making an SSL Connection to ({self.url}): {err}"
|
107
|
+
) from err
|
108
|
+
except aiohttp.exceptions.HTTPError as err:
|
109
|
+
raise ComponentError(
|
110
|
+
f"Smartsheet: SSL Certificate Error: {err}"
|
111
|
+
) from err
|
112
|
+
|
113
|
+
async def http_response(self, response, destination: str):
|
114
|
+
# getting aiohttp response:
|
115
|
+
if response.status == 200:
|
116
|
+
try:
|
117
|
+
async with aiofiles.open(str(destination), mode="wb") as fp:
|
118
|
+
await fp.write(await response.read())
|
119
|
+
if destination.exists():
|
120
|
+
return response
|
121
|
+
else:
|
122
|
+
raise FileNotFound(
|
123
|
+
f"Error saving File {destination!s}"
|
124
|
+
)
|
125
|
+
except FileNotFound:
|
126
|
+
raise
|
127
|
+
except Exception as err:
|
128
|
+
raise FileNotFound(
|
129
|
+
f"Error saving File {err!s}"
|
130
|
+
)
|
131
|
+
else:
|
132
|
+
raise ComponentError(
|
133
|
+
f"DownloadFromSmartSheet: Wrong response from Smartsheet: {response!s}"
|
134
|
+
)
|
135
|
+
|
136
|
+
async def download_file(self, file_id: str = None, destination: Path = None):
|
137
|
+
if isinstance(destination, str):
|
138
|
+
destination = Path(destination)
|
139
|
+
if not file_id:
|
140
|
+
file_id = self.file_id
|
141
|
+
if not file_id:
|
142
|
+
raise ConfigError(
|
143
|
+
"SmartSheet: Unable to Download without FileId."
|
144
|
+
)
|
145
|
+
credentials = {"token": self.api_key, "scheme": "Bearer"}
|
146
|
+
url = f"{self.url}{file_id}"
|
147
|
+
if not destination:
|
148
|
+
destination = self.filename
|
149
|
+
if await self.http_get(
|
150
|
+
url=url,
|
151
|
+
credentials=credentials,
|
152
|
+
destination=destination
|
153
|
+
):
|
154
|
+
return True
|
@@ -0,0 +1,39 @@
|
|
1
|
+
from abc import ABC
|
2
|
+
from typing import Optional, ParamSpec, Any
|
3
|
+
import traceback
|
4
|
+
from ..utils.stats import TaskMonitor
|
5
|
+
|
6
|
+
P = ParamSpec("P")
|
7
|
+
|
8
|
+
class StatSupport(ABC):
|
9
|
+
"""StatSupport.
|
10
|
+
|
11
|
+
Adding Support for Task Monitor (Statistics Collector.)
|
12
|
+
"""
|
13
|
+
|
14
|
+
def __init__(
|
15
|
+
self,
|
16
|
+
*args: P.args,
|
17
|
+
**kwargs: P.kwargs
|
18
|
+
):
|
19
|
+
# stats object:
|
20
|
+
self._stat_: bool = True
|
21
|
+
stat: Optional[TaskMonitor] = kwargs.pop('stat', None)
|
22
|
+
if stat:
|
23
|
+
self.stat: Optional[TaskMonitor] = stat
|
24
|
+
else:
|
25
|
+
self.stat = None
|
26
|
+
self._stat_ = False
|
27
|
+
super().__init__(*args, **kwargs)
|
28
|
+
|
29
|
+
def save_traceback(self):
|
30
|
+
try:
|
31
|
+
self.stat.stacktrace(traceback.format_exc())
|
32
|
+
finally:
|
33
|
+
pass
|
34
|
+
|
35
|
+
def add_metric(self, name, value):
|
36
|
+
try:
|
37
|
+
self.stat.add_metric(name, value)
|
38
|
+
except AttributeError:
|
39
|
+
pass
|
@@ -0,0 +1,96 @@
|
|
1
|
+
"""
|
2
|
+
Flowtask Task Execution.
|
3
|
+
"""
|
4
|
+
from typing import Optional
|
5
|
+
from abc import ABC
|
6
|
+
import asyncio
|
7
|
+
from navconfig.logging import logging
|
8
|
+
# Queue Worker Client:
|
9
|
+
from qw.client import QClient
|
10
|
+
from qw.wrappers import TaskWrapper
|
11
|
+
# TODO: Dispatch tasks to docker container.
|
12
|
+
from ..tasks.task import Task
|
13
|
+
from ..exceptions import FlowTaskError, TaskFailed
|
14
|
+
|
15
|
+
|
16
|
+
class TaskSupport(ABC):
|
17
|
+
def __init__(self, *args, **kwargs):
|
18
|
+
self._name_ = self.__class__.__name__
|
19
|
+
self.program: str = kwargs.pop("program", "navigator")
|
20
|
+
self.task: str = kwargs.pop('task')
|
21
|
+
# No worker:
|
22
|
+
self._no_worker: bool = kwargs.pop("no_worker", False)
|
23
|
+
if self._no_worker is False:
|
24
|
+
self.worker: QClient = QClient() # auto-discovering of workers
|
25
|
+
else:
|
26
|
+
self.worker: Optional[QClient] = None
|
27
|
+
# self.worker = worker
|
28
|
+
self.priority = kwargs.pop("priority", None)
|
29
|
+
self.logger = logging.getLogger(
|
30
|
+
f"Task.{self.program}.{self.task}"
|
31
|
+
)
|
32
|
+
self._args = args
|
33
|
+
self._kwargs = kwargs
|
34
|
+
super().__init__(*args, **kwargs)
|
35
|
+
|
36
|
+
def __repr__(self):
|
37
|
+
return f"<Action.Task>: {self.program}.{self.task}"
|
38
|
+
|
39
|
+
async def run(self, *args, **kwargs):
|
40
|
+
if self._no_worker is False:
|
41
|
+
if self.priority == "pub":
|
42
|
+
# Using Channel Group mechanism (avoid queueing)
|
43
|
+
try:
|
44
|
+
result = await self.worker.publish(self.wrapper)
|
45
|
+
await asyncio.sleep(0.01)
|
46
|
+
return result
|
47
|
+
except asyncio.TimeoutError:
|
48
|
+
raise
|
49
|
+
except Exception as exc:
|
50
|
+
self.logger.error(f"{exc}")
|
51
|
+
raise
|
52
|
+
else:
|
53
|
+
try:
|
54
|
+
result = await self.worker.queue(self.wrapper)
|
55
|
+
await asyncio.sleep(0.01)
|
56
|
+
return result
|
57
|
+
except asyncio.TimeoutError:
|
58
|
+
raise
|
59
|
+
except Exception as exc:
|
60
|
+
self.logger.error(f"{exc}")
|
61
|
+
raise
|
62
|
+
else:
|
63
|
+
try:
|
64
|
+
await self.task.start()
|
65
|
+
except Exception as exc:
|
66
|
+
self.logger.error(exc)
|
67
|
+
raise TaskFailed(f"{exc!s}") from exc
|
68
|
+
try:
|
69
|
+
return await self.task.run()
|
70
|
+
except Exception as err:
|
71
|
+
raise TaskFailed(
|
72
|
+
f"Error: Task {self.program}.{self.task} failed: {err}"
|
73
|
+
) from err
|
74
|
+
finally:
|
75
|
+
await self.task.close()
|
76
|
+
|
77
|
+
async def close(self):
|
78
|
+
pass
|
79
|
+
|
80
|
+
async def open(self):
|
81
|
+
try:
|
82
|
+
if self._no_worker is False:
|
83
|
+
self.wrapper = TaskWrapper(
|
84
|
+
program=self.program,
|
85
|
+
task=self.task,
|
86
|
+
**self._kwargs
|
87
|
+
)
|
88
|
+
else:
|
89
|
+
self.task = Task(
|
90
|
+
task=self.task,
|
91
|
+
program=self.program,
|
92
|
+
debug=True
|
93
|
+
)
|
94
|
+
except Exception as exc:
|
95
|
+
self.logger.exception(str(exc), stack_info=True)
|
96
|
+
raise FlowTaskError(f"Error: {exc}") from exc
|
@@ -0,0 +1,118 @@
|
|
1
|
+
from abc import ABC
|
2
|
+
from pathlib import PurePath, Path
|
3
|
+
import aiofiles
|
4
|
+
from ..exceptions import FileError, FileNotFound
|
5
|
+
from ..template import getTemplateHandler, TemplateHandler
|
6
|
+
from ..conf import FILE_STORAGES, TASK_STORAGES, TASK_PATH
|
7
|
+
|
8
|
+
|
9
|
+
class TemplateSupport(ABC):
|
10
|
+
"""TemplateSupport.
|
11
|
+
|
12
|
+
Adding Support for Jinja2 Template parser on Components.
|
13
|
+
"""
|
14
|
+
use_template: bool = False
|
15
|
+
|
16
|
+
def __init__(self, *args, **kwargs):
|
17
|
+
self._filestore = None
|
18
|
+
self._taskstorage = None
|
19
|
+
# Use Template:
|
20
|
+
self.use_template: bool = kwargs.pop(
|
21
|
+
'use_template', self.use_template
|
22
|
+
)
|
23
|
+
self.from_templates_dir: bool = kwargs.pop(
|
24
|
+
'from_templates_dir', False
|
25
|
+
)
|
26
|
+
# Template directory
|
27
|
+
template_dir = kwargs.pop('template_dir', None)
|
28
|
+
try:
|
29
|
+
super().__init__(*args, *args)
|
30
|
+
except TypeError:
|
31
|
+
super().__init__()
|
32
|
+
# Template Parser:
|
33
|
+
self._templateparser: TemplateHandler = None
|
34
|
+
if self.use_template is True:
|
35
|
+
self._templateparser = getTemplateHandler(
|
36
|
+
newdir=template_dir
|
37
|
+
)
|
38
|
+
|
39
|
+
async def open_templatefile(
|
40
|
+
self,
|
41
|
+
file: PurePath,
|
42
|
+
program: str = None,
|
43
|
+
from_templates_dir: bool = False,
|
44
|
+
folder: str = 'templates',
|
45
|
+
**kwargs
|
46
|
+
) -> str:
|
47
|
+
"""
|
48
|
+
Open a file, replace masks and parse template if needed.
|
49
|
+
"""
|
50
|
+
if self._filestore is None:
|
51
|
+
# we need to calculate which is the filestore
|
52
|
+
self._filestore = FILE_STORAGES.get('default')
|
53
|
+
if self._taskstorage is None:
|
54
|
+
self._taskstorage = TASK_STORAGES.get('default')
|
55
|
+
if isinstance(file, str):
|
56
|
+
file = Path(file)
|
57
|
+
if not file.is_absolute():
|
58
|
+
# File is relative to TaskStorage:
|
59
|
+
if from_templates_dir is True:
|
60
|
+
directory = Path(TASK_PATH).parent.joinpath(folder)
|
61
|
+
else:
|
62
|
+
# Getting from default Task Storage:
|
63
|
+
directory = self._taskstorage.get_path().joinpath(program, folder)
|
64
|
+
if not directory.exists():
|
65
|
+
# Get Template From Task Path:
|
66
|
+
directory = Path(TASK_PATH).joinpath(program, folder)
|
67
|
+
if not directory.exists():
|
68
|
+
# Get Templates Dir from FileStore
|
69
|
+
directory = self._filestore.get_directory(folder, program=program)
|
70
|
+
file = directory.joinpath(file).resolve()
|
71
|
+
if file.exists() and file.is_file():
|
72
|
+
content = None
|
73
|
+
# open File:
|
74
|
+
try:
|
75
|
+
async with aiofiles.open(file, "r+") as afp:
|
76
|
+
content = await afp.read()
|
77
|
+
except Exception as exc:
|
78
|
+
raise FileError(
|
79
|
+
f"{__name__}: Error Opening File: {file}"
|
80
|
+
) from exc
|
81
|
+
if self.use_template is True:
|
82
|
+
content = self._templateparser.from_string(
|
83
|
+
content,
|
84
|
+
kwargs
|
85
|
+
)
|
86
|
+
elif hasattr(self, "masks"):
|
87
|
+
content = self.mask_replacement(content)
|
88
|
+
return content
|
89
|
+
else:
|
90
|
+
raise FileNotFound(
|
91
|
+
f"{__name__}: Missing File: {file}"
|
92
|
+
)
|
93
|
+
|
94
|
+
async def open_tmpfile(self, file: PurePath, **kwargs) -> str:
|
95
|
+
if file.exists() and file.is_file():
|
96
|
+
content = None
|
97
|
+
# open File:
|
98
|
+
try:
|
99
|
+
async with aiofiles.open(file, "r+") as afp:
|
100
|
+
content = await afp.read()
|
101
|
+
except Exception as exc:
|
102
|
+
raise FileError(
|
103
|
+
f"{self.__name__}: {exc}"
|
104
|
+
)
|
105
|
+
# check if we need to replace masks
|
106
|
+
if hasattr(self, "masks"):
|
107
|
+
self._logger.debug(
|
108
|
+
f"TemplateSupport Masks: {self.masks}"
|
109
|
+
)
|
110
|
+
if "{" in content:
|
111
|
+
content = self.mask_replacement(content)
|
112
|
+
if self.use_template is True:
|
113
|
+
content = self._templateparser.from_string(content, kwargs)
|
114
|
+
return content
|
115
|
+
else:
|
116
|
+
raise FileNotFound(
|
117
|
+
f"{self.__name__}: Missing File: {file}"
|
118
|
+
)
|
@@ -0,0 +1 @@
|
|
1
|
+
from .milvus import MilvusStore
|
@@ -0,0 +1,133 @@
|
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
import torch
|
3
|
+
from langchain_huggingface import (
|
4
|
+
HuggingFaceEmbeddings
|
5
|
+
)
|
6
|
+
from langchain_community.embeddings import (
|
7
|
+
HuggingFaceBgeEmbeddings
|
8
|
+
)
|
9
|
+
from navconfig.logging import logging
|
10
|
+
from ...conf import (
|
11
|
+
MAX_BATCH_SIZE,
|
12
|
+
EMBEDDING_DEVICE,
|
13
|
+
EMBEDDING_DEFAULT_MODEL
|
14
|
+
)
|
15
|
+
|
16
|
+
class AbstractStore(ABC):
|
17
|
+
"""AbstractStore class.
|
18
|
+
|
19
|
+
Args:
|
20
|
+
embedding_model (dict): Embeddings.
|
21
|
+
"""
|
22
|
+
def __init__(self, *args, **kwargs):
|
23
|
+
self.embedding_model: dict = kwargs.pop(
|
24
|
+
'embedding_model',
|
25
|
+
self._default_embedding_model()
|
26
|
+
)
|
27
|
+
self.logger = logging.getLogger(__name__)
|
28
|
+
self._metric_type: str = kwargs.pop("metric_type", self._default_metric())
|
29
|
+
self._index_type: str = kwargs.pop("index_type", self._default_index())
|
30
|
+
self._dimension: int = kwargs.pop('dimension', 768)
|
31
|
+
self.vector_field: str = kwargs.pop('vector_field', 'vector')
|
32
|
+
self.text_field: str = kwargs.pop('text_field', 'text')
|
33
|
+
self.database: str = kwargs.pop('database', 'default')
|
34
|
+
super().__init__(*args, **kwargs)
|
35
|
+
# Embedding Model
|
36
|
+
self._embed_ = None
|
37
|
+
self._connection = None
|
38
|
+
|
39
|
+
def _default_metric(self) -> str:
|
40
|
+
return 'COSINE'
|
41
|
+
|
42
|
+
def _default_index(self) -> str:
|
43
|
+
return 'IVF_FLAT'
|
44
|
+
|
45
|
+
def _default_embedding_model(self) -> dict:
|
46
|
+
return {
|
47
|
+
"model_name": "sentence-transformers/paraphrase-MiniLM-L6-v2",
|
48
|
+
"model_type": "transformers"
|
49
|
+
}
|
50
|
+
|
51
|
+
def _get_device(self, device_type: str = None, cuda_number: int = 0):
|
52
|
+
"""Get Default device for Torch and transformers.
|
53
|
+
|
54
|
+
"""
|
55
|
+
torch.backends.cudnn.deterministic = True
|
56
|
+
torch.backends.cudnn.benchmark = False
|
57
|
+
if device_type:
|
58
|
+
return torch.device(device_type)
|
59
|
+
if device_type == 'cpu' or EMBEDDING_DEVICE == 'cpu':
|
60
|
+
return torch.device('cpu')
|
61
|
+
if torch.cuda.is_available():
|
62
|
+
# Use CUDA GPU if available
|
63
|
+
return torch.device(f'cuda:{cuda_number}')
|
64
|
+
if torch.backends.mps.is_available():
|
65
|
+
# Use CUDA Multi-Processing Service if available
|
66
|
+
return torch.device("mps")
|
67
|
+
if EMBEDDING_DEVICE == 'cuda':
|
68
|
+
return torch.device(f'cuda:{cuda_number}')
|
69
|
+
else:
|
70
|
+
return torch.device(EMBEDDING_DEVICE)
|
71
|
+
|
72
|
+
def create_embedding(
|
73
|
+
self,
|
74
|
+
embedding_model: dict
|
75
|
+
):
|
76
|
+
encode_kwargs: str = {
|
77
|
+
'normalize_embeddings': True,
|
78
|
+
"batch_size": MAX_BATCH_SIZE
|
79
|
+
}
|
80
|
+
device = self._get_device()
|
81
|
+
model_kwargs: str = {'device': device}
|
82
|
+
model_name = embedding_model.get('model_name', EMBEDDING_DEFAULT_MODEL)
|
83
|
+
model_type = embedding_model.get('model_type', 'transformers')
|
84
|
+
if model_type == 'bge':
|
85
|
+
return HuggingFaceBgeEmbeddings(
|
86
|
+
model_name=model_name,
|
87
|
+
model_kwargs=model_kwargs,
|
88
|
+
encode_kwargs=encode_kwargs
|
89
|
+
)
|
90
|
+
else:
|
91
|
+
return HuggingFaceEmbeddings(
|
92
|
+
model_name=model_name,
|
93
|
+
model_kwargs=model_kwargs,
|
94
|
+
encode_kwargs=encode_kwargs
|
95
|
+
)
|
96
|
+
|
97
|
+
def get_default_embedding(
|
98
|
+
self,
|
99
|
+
model_name: str = EMBEDDING_DEFAULT_MODEL
|
100
|
+
):
|
101
|
+
return self.create_embedding(model_name=model_name)
|
102
|
+
|
103
|
+
@abstractmethod
|
104
|
+
async def load_documents(
|
105
|
+
self,
|
106
|
+
documents: list,
|
107
|
+
collection: str = None
|
108
|
+
):
|
109
|
+
pass
|
110
|
+
|
111
|
+
@abstractmethod
|
112
|
+
def connect(self) -> None:
|
113
|
+
pass
|
114
|
+
|
115
|
+
@abstractmethod
|
116
|
+
def disconnect(self) -> None:
|
117
|
+
pass
|
118
|
+
|
119
|
+
async def __aenter__(self):
|
120
|
+
if self._embed_ is None:
|
121
|
+
self._embed_ = self.create_embedding(
|
122
|
+
self.embedding_model
|
123
|
+
)
|
124
|
+
await self.connect()
|
125
|
+
return self
|
126
|
+
|
127
|
+
async def __aexit__(self, exc_type, exc_value, traceback):
|
128
|
+
# closing Embedding
|
129
|
+
self._embed_ = None
|
130
|
+
try:
|
131
|
+
await self.disconnect()
|
132
|
+
except RuntimeError:
|
133
|
+
pass
|