flowtask 5.12.0__tar.gz → 5.12.1__tar.gz
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-5.12.0 → flowtask-5.12.1}/PKG-INFO +2 -2
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CensusData.py +5 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToBigQuery.py +81 -1
- flowtask-5.12.1/flowtask/components/CopyToSharepoint.py +537 -0
- flowtask-5.12.1/flowtask/components/DownloadFromGamma.py +454 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleGeoCoding.py +84 -45
- flowtask-5.12.1/flowtask/components/OpenStreetMap.py +1198 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWithPandas.py +91 -14
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasToFile.py +28 -3
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RESTClient.py +42 -0
- flowtask-5.12.1/flowtask/components/Workday/__init__.py +43 -0
- flowtask-5.12.1/flowtask/components/Workday/models/__init__.py +17 -0
- flowtask-5.12.1/flowtask/components/Workday/models/applicant.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/candidate.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/cost_center.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/custom_punch_field_report.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/job_posting.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/job_posting_site.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/job_requisition.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/location.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/location_hierarchy_assignments.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/organizations.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/reference.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/time_block.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/time_off_balance.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/time_request.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/models/worker.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/__init__.py +3 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/applicant_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/candidate_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/cost_center_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/custom_punch_field_report_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/job_posting_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/job_posting_site_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/job_requisition_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/location_hierarchy_assignments_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/location_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/organization_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/reference_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/time_block_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/time_off_balance_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/time_request_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/parsers/worker_parsers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/__init__.py +19 -0
- flowtask-5.12.1/flowtask/components/Workday/types/applicants.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/base.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/candidates.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/cost_centers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/custom_punch_field_report.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/custom_punch_field_report_rest.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/custom_report.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/job_posting_sites.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/job_postings.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/job_requisitions.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/location_hierarchy_assignments.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/locations.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/organization_single.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/organizations.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/recruiting_agency_users.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/references.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/time_block_report.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/time_blocks.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/time_off_balances.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/time_requests.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/types/workers.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/utils/__init__.py +4 -0
- flowtask-5.12.1/flowtask/components/Workday/utils/utils.py +2 -0
- flowtask-5.12.1/flowtask/components/Workday/workday.py +641 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/pandas_io.py +14 -2
- flowtask-5.12.1/flowtask/components/tDictKey.py +115 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tExplode.py +13 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/tMap.py +9 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/conf.py +19 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/notify_event.py +6 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/teams.py +4 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/local.py +5 -2
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Sharepoint.py +117 -2
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/__init__.py +6 -0
- flowtask-5.12.1/flowtask/interfaces/gamma.py +408 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/http.py +11 -2
- flowtask-5.12.1/flowtask/interfaces/workday/__init__.py +15 -0
- flowtask-5.12.1/flowtask/interfaces/workday/config.py +221 -0
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/__init__.py +8 -0
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/applicants.py +11 -11
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/base.py +124 -8
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/candidates.py +10 -10
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/cost_centers.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_punch_field_report.py +2 -2
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_punch_field_report_rest.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_report.py +5 -5
- flowtask-5.12.1/flowtask/interfaces/workday/handlers/import_reported_time_blocks.py +170 -0
- flowtask-5.12.1/flowtask/interfaces/workday/handlers/import_time_clock_events.py +199 -0
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_posting_sites.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_postings.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_requisitions.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/location_hierarchy_assignments.py +3 -3
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/locations.py +1 -1
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/organization_single.py +2 -2
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/organizations.py +3 -3
- flowtask-5.12.1/flowtask/interfaces/workday/handlers/put_time_clock_events.py +188 -0
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/recruiting_agency_users.py +7 -7
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/references.py +2 -2
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_block_report.py +5 -5
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_blocks.py +1 -1
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_off_balances.py +1 -1
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_requests.py +1 -1
- {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/workers.py +10 -10
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/__init__.py +5 -0
- flowtask-5.12.1/flowtask/interfaces/workday/models/clock_event.py +164 -0
- flowtask-5.12.1/flowtask/interfaces/workday/models/time_block.py +52 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_requisition_parsers.py +1 -1
- flowtask-5.12.1/flowtask/interfaces/workday/service.py +579 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/runner.py +36 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/task.py +5 -0
- flowtask-5.12.1/flowtask/utils/msgraph_patch.py +61 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/version.py +1 -1
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/PKG-INFO +2 -2
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/SOURCES.txt +67 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/requires.txt +1 -1
- {flowtask-5.12.0 → flowtask-5.12.1}/pyproject.toml +3 -1
- flowtask-5.12.0/flowtask/components/CopyToSharepoint.py +0 -201
- flowtask-5.12.0/flowtask/components/OpenStreetMap.py +0 -582
- flowtask-5.12.0/flowtask/components/Workday/__init__.py +0 -5
- flowtask-5.12.0/flowtask/components/Workday/models/time_block.py +0 -47
- flowtask-5.12.0/flowtask/components/Workday/workday.py +0 -961
- {flowtask-5.12.0 → flowtask-5.12.1}/CONTRIBUTING.md +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/INSTALL +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/LICENSE +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/MANIFEST.in +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/README.md +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/__main__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/check.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/codebot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ASPX.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ATT.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AddDataset.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Amazon.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AutoTask.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Azure.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AzureUsers.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BaseAction.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BaseLoop.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BestBuy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CSVToGCS.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CallAnalysis.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CallSummary.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CensusVariables.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/explorium.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/leadiq.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/rocket.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/siccode.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/visualvisitor.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/zoominfo.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/scrapper.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromS3.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromSharepoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyTo.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToFileBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToMongoDB.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToPg.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToRethink.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToS3.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Costco.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateGCSBucket.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/CreateReport.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/bar.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/pie.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/utils.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CustomerSatisfaction.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DataInput.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DateList.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DbClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DialPad.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DispatchMe.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DocumentDBQuery.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFrom.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromD2L.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromFTP.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromIMAP.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromS3.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSFTP.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSharepoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSmartSheet.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSmartsheet.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadS3File.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Dummy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DuplicatePhoto.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/EmployeeEvaluation.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExecuteSQL.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExtractHTML.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExtractTranscript.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileCopy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileDelete.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileExists.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileIteratorDelete.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileList.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileOpen.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileRead.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileRename.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterIf.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/FilterRows.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/functions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GCSToBigQuery.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GenData.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleA4.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GooglePlaces.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleSearch.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/HTTPClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ICIMS.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IF.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IcimsFolderCopy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ImageFeatures/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ImageFeatures/process.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IteratorBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/LeadIQ.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Loop.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Lowes.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MS365Usage.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MSTeamsMessages.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MarkdownMaker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MarketClustering.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MergeFileList.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MergeFiles.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MilvusOutput.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NearByStores.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/account.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/district.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/events.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/forms.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/market.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/organization.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/photos.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/project.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/region.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/store.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/user.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/router.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinjaClaims.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NextStopAgent.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Odoo.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OdooInjector.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenFromXML.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWeather.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWithBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PDFGenerator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PGPDecrypt.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasIterator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasToPowerPoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Paradox.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParamIterator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParrotLoader/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParrotLoader/loader.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParseHTML.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PgVectorOutput.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PlacerStores.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PlanogramCompliance.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PodcastMaker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Pokemon.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PositiveBot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PowerPointSlide.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PrintMessage.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/bestbuy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/lowes.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/scrapper.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompliant.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/brother.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/canon.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/epson.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/hp.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/samsung.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/scraper.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductPricing.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductReportBot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QS.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QSBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryIterator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryToInsert.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryToPandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RethinkDBQuery.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Rsync.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RunSSH.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RunShell.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SAPExtraction.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SMSAnalysis.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SMSSummary.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SalesForce.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Sassie.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SaveImageBank/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SchedulingVisits.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapPage.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapSearch.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapTool.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendEmail.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/component.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/zoom.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SentimentAnalysis.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/costco.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/scrapper.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SetVariables.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SplitPDF.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Staples.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SubTask.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SuiteCRM.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Switch.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableBase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableDelete.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableInput.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableOutput/TableOutput.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableOutput/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableSchema.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Target.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ThumbnailGenerator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ToPandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/TransformRows.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/functions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransposeRows.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UPCDatabase.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UnGzip.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Uncompress.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UniqueRows.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Unzip.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UpdateOperationalVars.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadTo.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToS3.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToSFTP.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToSharepoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UserFunc.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/VideoUnderstanding.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/VivaTracker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/WSDLClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Wait.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Walmart.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/WorkdayReport.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Workplace.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/XMLToPandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zammad/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zammad/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zoom.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ZoomInfoScraper.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ZoomUs.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/cache.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/fetch.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/resolver.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/transform.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/flow.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/date_sequence.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/static_list.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/google.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/group.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/py.typed +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/reviewscrap.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tAddTotalRow.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tAutoincrement.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tConcat.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tConditionalMultiply.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tCrosstab.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFilter.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFilterCommonValues.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFrequencyWeights.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tGroup.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tJoin.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/functions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMelt.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMerge.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tOrder.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPivot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPluckCols.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tUnnest.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/user.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/categories.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/cli.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ASPX.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AddDataset.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AutoTask.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AzureUsers.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CallAnalysis.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CallSummary.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CompanyScraper.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyFromS3.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyFromSharepoint.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToBigQuery.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToMongoDB.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToPg.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToRethink.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToS3.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToSharepoint.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CustomerSatisfaction.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DataInput.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DateList.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DialPad.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromD2L.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromFTP.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromIMAP.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromS3.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSFTP.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSharepoint.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSmartSheet.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSmartsheet.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/EmployeeEvaluation.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ExecuteSQL.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ExtractTranscript.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileCopy.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileDelete.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileExists.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileIteratorDelete.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileList.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileOpen.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileRead.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileRename.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FilterIf.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FilterRows.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleA4.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleGeoCoding.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleSearch.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/HTTPClient.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ICIMS.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/IteratorBase.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/LeadIQ.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MS365Usage.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MSTeamsMessages.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MergeFileList.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MergeFiles.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/NetworkNinjaClaims.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Odoo.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OdooInjector.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenFromXML.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenWithBase.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenWithPandas.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PGPDecrypt.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PandasIterator.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PandasToFile.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Paradox.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ParamIterator.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PlacerStores.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Pokemon.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PositiveBot.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PowerPointSlide.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PrintMessage.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductCompliant.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductPricing.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductReportBot.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QS.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryIterator.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryToInsert.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryToPandas.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/RESTClient.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/RunShell.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SAPExtraction.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Sassie.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ScrapTool.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SendNotify.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SentimentAnalysis.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ServiceScrapper.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SetVariables.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SplitPDF.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SubTask.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SuiteCRM.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableDelete.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableInput.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableOutput.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableSchema.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ThumbnailGenerator.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TransformRows.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TransposeRows.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UnGzip.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Uncompress.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UniqueRows.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Unzip.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToS3.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToSFTP.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToSharepoint.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UserFunc.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Zoom.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ZoomInfoScraper.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tAutoincrement.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tConcat.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tConditionalMultiply.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tCrosstab.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tExplode.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFilter.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFilterCommonValues.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFrequencyWeights.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tGroup.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tJoin.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tMap.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tMelt.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tOrder.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tPivot.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tPluckCols.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tUnnest.doc.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/index.json +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/parser.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/schema.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/toolkit.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/download.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/colfunctions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/functions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/dummy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/exec.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/copy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/delete.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/credentials.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/notifications.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/jira.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/log.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/logerr.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/notify.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/publish.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/sendfile.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/task.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/webhook.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/manager.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/exceptions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/docker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/events.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/exceptions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/k8s.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/publish.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/qworker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/registry.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/resolver.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/component_docs.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/logging/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/agent.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/composer.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/parser.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/validator.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/handlers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/handlers/component.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/dummy.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/jira.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/rest.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/sampledata.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/sensor.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/task.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/ticket.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/zammad.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/zoom_event.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/hook.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/step.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/mqtt.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/rabbitmq.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/redis.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/sqs.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/fs.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/http.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/imap.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/jira.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/mail.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/postgres.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/responses/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/responses/base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/sharepoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/ssh.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/tagged.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/upload.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/watch.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/web.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/zoom.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/AzureClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/AzureGraph.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Boto3Client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/DropboxClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ExcelHandler.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/FTPClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleCalendar.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleDrive.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleGCS.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleGeocoding.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleLang.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GooglePub.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleSheet.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/IMAPClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/LLMClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/O365Calendar.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/O365Client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/OneDrive.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Outlook.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ParrotBot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ParrotTool.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/SOAPClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/SSHClient.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/azure_component.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/azureauth.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/base_action.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/base_loop.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/cache.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/compress.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_from_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_to.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_to_file_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/credentials.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/d2l.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/db.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/documentdb.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/rethink.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/arrow.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/dt.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/pandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/polars.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/db.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/db_client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/download_from.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/env.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/file_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/flow.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/func.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/google_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/group.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/locale.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/log.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/mask.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/notification.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/agent.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/client.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/pipelines/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/pipelines/parrot.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/playwright.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/powerpoint.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ppt.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/py.typed +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/qs.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/qs_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/result.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/sassie.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/options.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium_service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/smartsheet.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/stat.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/t_pandas.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/table_base.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/task.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/teams.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/template.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/tickets.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/upload_to.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/user.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/milvus.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/applicant.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/candidate.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/cost_center.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/custom_punch_field_report.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_posting.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_posting_site.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_requisition.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/location.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/location_hierarchy_assignments.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/organizations.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/reference.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/time_off_balance.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/time_request.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/worker.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/__init__.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/applicant_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/candidate_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/cost_center_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/custom_punch_field_report_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_posting_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_posting_site_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/location_hierarchy_assignments_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/location_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/organization_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/reference_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_block_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_off_balance_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_request_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/worker_parsers.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/utils/__init__.py +0 -0
- {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/utils/utils.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/zammad.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/zoom.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/_yaml.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/argparser.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/base.pxd +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/base.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/json.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/maps.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/checker.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/detector.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/registry.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/report.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/schema.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/toml.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/components_/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/handler/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/importer.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/sources/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/functions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/manager.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/models.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/notifications.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/scheduler.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/bots/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/bots/telegram.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/manager.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/model.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/jira/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/jira/jira_actions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/launcher.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/manager.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/service.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/task_manager.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/tasks.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/exceptions.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/filesystem.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/database.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/filesystem.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/github.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/memory.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/row.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/abstract.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/command.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/pile.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/py.typed +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/workers.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/template/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tests.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/types/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/types/typedefs.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/__init__.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/constants.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/encoders.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/executor.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/functions.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/json.pxi +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/json.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/mail.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/parseqs.pyx +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/stats.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/transformations.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/uv.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/validators.py +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/dependency_links.txt +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/entry_points.txt +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/top_level.txt +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/setup.cfg +0 -0
- {flowtask-5.12.0 → flowtask-5.12.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowtask
|
|
3
|
-
Version: 5.12.
|
|
3
|
+
Version: 5.12.1
|
|
4
4
|
Summary: Framework for Task orchestration
|
|
5
5
|
Author-email: Jesus Lara <jesuslarag@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -54,7 +54,7 @@ Requires-Dist: tzwhere==3.0.3
|
|
|
54
54
|
Requires-Dist: tabulate==0.9.0
|
|
55
55
|
Requires-Dist: python-magic==0.4.27
|
|
56
56
|
Requires-Dist: pytomlpp==1.0.13
|
|
57
|
-
Requires-Dist: psutil==
|
|
57
|
+
Requires-Dist: psutil==7.2.2
|
|
58
58
|
Requires-Dist: networkx>=3.4.1
|
|
59
59
|
Requires-Dist: watchdog>=6.0.0
|
|
60
60
|
Requires-Dist: hachiko==0.4.0
|
|
@@ -327,6 +327,11 @@ Output:
|
|
|
327
327
|
|
|
328
328
|
self._result = {"data": data_df, "variables": variables_df}
|
|
329
329
|
|
|
330
|
+
# When export_dataframe is set, expose only the data DataFrame so that
|
|
331
|
+
# downstream components like PandasToFile or TableOutput can consume it directly.
|
|
332
|
+
if getattr(self, "export_dataframe", False):
|
|
333
|
+
self._result = data_df
|
|
334
|
+
|
|
330
335
|
# Emit observability metrics.
|
|
331
336
|
rows_fetched = len(data_df) if not data_df.empty else 0
|
|
332
337
|
self.add_metric("census_rows_fetched", rows_fetched)
|
|
@@ -93,6 +93,9 @@ class CopyToBigQuery(CopyTo, PandasDataframe):
|
|
|
93
93
|
self._project_id: str = kwargs.pop('project_id', BIGQUERY_PROJECT_ID)
|
|
94
94
|
self._credentials: str = kwargs.pop('credentials', BIGQUERY_CREDENTIALS)
|
|
95
95
|
self._record_columns: dict = kwargs.pop('record_columns', {})
|
|
96
|
+
# Columns to be stored as native BigQuery JSON. Any column listed here
|
|
97
|
+
# (or any object column whose values are dict/list) is created as JSON.
|
|
98
|
+
self._json_columns: list = kwargs.pop('json_columns', []) or []
|
|
96
99
|
try:
|
|
97
100
|
self.multi = bool(kwargs["multi"])
|
|
98
101
|
del kwargs["multi"]
|
|
@@ -130,6 +133,31 @@ class CopyToBigQuery(CopyTo, PandasDataframe):
|
|
|
130
133
|
f"Error configuring BigQuery Connection: {err!s}"
|
|
131
134
|
) from err
|
|
132
135
|
|
|
136
|
+
def _detect_json_columns(self) -> set:
|
|
137
|
+
"""Return the set of DataFrame columns that must be stored as JSON.
|
|
138
|
+
|
|
139
|
+
A column is treated as JSON when it is explicitly declared in the
|
|
140
|
+
``json_columns`` option or when it is an ``object`` column whose
|
|
141
|
+
first non-null value is a ``dict`` or ``list``. BigQuery's STRING
|
|
142
|
+
type cannot ingest dict/list values via pyarrow, so these columns
|
|
143
|
+
require the native JSON type and the NDJSON loader.
|
|
144
|
+
"""
|
|
145
|
+
json_cols = set(self._json_columns)
|
|
146
|
+
if self.data is None:
|
|
147
|
+
return json_cols
|
|
148
|
+
for column, dtype in self.data.dtypes.items():
|
|
149
|
+
if column in json_cols:
|
|
150
|
+
continue
|
|
151
|
+
if str(dtype) != 'object':
|
|
152
|
+
continue
|
|
153
|
+
non_null = self.data[column].dropna()
|
|
154
|
+
if non_null.empty:
|
|
155
|
+
continue
|
|
156
|
+
sample = non_null.iloc[0]
|
|
157
|
+
if isinstance(sample, (dict, list)):
|
|
158
|
+
json_cols.add(column)
|
|
159
|
+
return json_cols
|
|
160
|
+
|
|
133
161
|
def _build_record_schema(self) -> list:
|
|
134
162
|
"""Build schema including RECORD type columns."""
|
|
135
163
|
type_mapping = {
|
|
@@ -226,11 +254,18 @@ class CopyToBigQuery(CopyTo, PandasDataframe):
|
|
|
226
254
|
'date': 'DATE'
|
|
227
255
|
}
|
|
228
256
|
|
|
257
|
+
# Columns that hold dict/list values (or are declared via
|
|
258
|
+
# json_columns) must be created as native BigQuery JSON.
|
|
259
|
+
json_columns = self._detect_json_columns()
|
|
260
|
+
|
|
229
261
|
# Build DDL for debugging
|
|
230
262
|
ddl_columns = []
|
|
231
263
|
|
|
232
264
|
for column, dtype in self.data.dtypes.items():
|
|
233
|
-
|
|
265
|
+
if column in json_columns:
|
|
266
|
+
bq_type = 'JSON'
|
|
267
|
+
else:
|
|
268
|
+
bq_type = type_mapping.get(str(dtype), 'STRING')
|
|
234
269
|
# Create SchemaField object directly
|
|
235
270
|
field = bigquery.SchemaField(column, bq_type, mode="NULLABLE")
|
|
236
271
|
bq_schema.append(field)
|
|
@@ -635,11 +670,56 @@ class CopyToBigQuery(CopyTo, PandasDataframe):
|
|
|
635
670
|
if pd.api.types.is_datetime64_any_dtype(converted_df[col]):
|
|
636
671
|
converted_df[col] = converted_df[col].dt.tz_localize(None)
|
|
637
672
|
|
|
673
|
+
# Handle INTEGER type (GoogleSQL: INT64; legacy: INTEGER)
|
|
674
|
+
elif bq_type in ("INT64", "INTEGER"):
|
|
675
|
+
if not pd.api.types.is_integer_dtype(converted_df[col]):
|
|
676
|
+
converted_df[col] = pd.to_numeric(
|
|
677
|
+
converted_df[col], errors="coerce"
|
|
678
|
+
).astype("Int64")
|
|
679
|
+
self._logger.debug(
|
|
680
|
+
f'CopyTo: Coerced {col} to Int64 (BigQuery {bq_type})'
|
|
681
|
+
)
|
|
682
|
+
|
|
683
|
+
# Handle FLOAT / NUMERIC types
|
|
684
|
+
elif bq_type in (
|
|
685
|
+
"FLOAT64", "FLOAT", "NUMERIC", "BIGNUMERIC", "DECIMAL", "BIGDECIMAL"
|
|
686
|
+
):
|
|
687
|
+
if not pd.api.types.is_float_dtype(converted_df[col]):
|
|
688
|
+
converted_df[col] = pd.to_numeric(
|
|
689
|
+
converted_df[col], errors="coerce"
|
|
690
|
+
).astype("Float64")
|
|
691
|
+
self._logger.debug(
|
|
692
|
+
f'CopyTo: Coerced {col} to Float64 (BigQuery {bq_type})'
|
|
693
|
+
)
|
|
694
|
+
|
|
695
|
+
# Handle BOOLEAN type
|
|
696
|
+
elif bq_type in ("BOOL", "BOOLEAN"):
|
|
697
|
+
if not pd.api.types.is_bool_dtype(converted_df[col]):
|
|
698
|
+
converted_df[col] = converted_df[col].astype("boolean")
|
|
699
|
+
self._logger.debug(
|
|
700
|
+
f'CopyTo: Coerced {col} to boolean (BigQuery {bq_type})'
|
|
701
|
+
)
|
|
702
|
+
|
|
638
703
|
# Handle STRING type
|
|
639
704
|
elif bq_type == "STRING":
|
|
640
705
|
if pd.api.types.is_datetime64_any_dtype(converted_df[col]):
|
|
641
706
|
converted_df[col] = converted_df[col].astype(str).replace('NaT', None)
|
|
642
707
|
self._logger.debug(f'CopyTo: Converted {col} to STRING (from datetime for BigQuery schema)')
|
|
708
|
+
elif not (
|
|
709
|
+
converted_df[col].dtype == object
|
|
710
|
+
or pd.api.types.is_string_dtype(converted_df[col])
|
|
711
|
+
):
|
|
712
|
+
# numeric/bool source -> string, preserving NA as None.
|
|
713
|
+
# Cast integers via Int64 first to avoid a trailing ".0".
|
|
714
|
+
series = converted_df[col]
|
|
715
|
+
if pd.api.types.is_integer_dtype(series):
|
|
716
|
+
series = series.astype("Int64")
|
|
717
|
+
converted_df[col] = series.astype(str).where(
|
|
718
|
+
pd.notnull(converted_df[col]), None
|
|
719
|
+
)
|
|
720
|
+
self._logger.debug(
|
|
721
|
+
f'CopyTo: Converted {col} to STRING (BigQuery {bq_type})'
|
|
722
|
+
)
|
|
643
723
|
|
|
644
724
|
return converted_df
|
|
645
725
|
|
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CopyToSharepoint — write a Pandas DataFrame directly to one SharePoint file.
|
|
3
|
+
|
|
4
|
+
Serializes the DataFrame to a temporary file (CSV / Excel / Parquet / JSON)
|
|
5
|
+
via ``CopyToFileBase.run()`` and then uploads it to SharePoint via the
|
|
6
|
+
existing ``SharepointClient.upload_files`` helper. The temporary file is
|
|
7
|
+
deleted unconditionally by the base class after the upload completes or
|
|
8
|
+
fails.
|
|
9
|
+
|
|
10
|
+
Usage example:
|
|
11
|
+
|
|
12
|
+
.. code-block:: yaml
|
|
13
|
+
|
|
14
|
+
CopyToSharepoint:
|
|
15
|
+
credentials:
|
|
16
|
+
client_id: SHAREPOINT_APP_ID
|
|
17
|
+
client_secret: SHAREPOINT_APP_SECRET
|
|
18
|
+
tenant_id: SHAREPOINT_TENANT_ID
|
|
19
|
+
tenant: symbits
|
|
20
|
+
site: Navigator-Navigator-dev
|
|
21
|
+
destination:
|
|
22
|
+
directory: Reports/2026-05/
|
|
23
|
+
filename: monthly-report.xlsx
|
|
24
|
+
format: xlsx
|
|
25
|
+
sheet_name: Summary
|
|
26
|
+
|
|
27
|
+
Append rows to an existing Excel file (preserves formatting / formulas /
|
|
28
|
+
other sheets via openpyxl):
|
|
29
|
+
|
|
30
|
+
.. code-block:: yaml
|
|
31
|
+
|
|
32
|
+
CopyToSharepoint:
|
|
33
|
+
credentials:
|
|
34
|
+
client_id: SHAREPOINT_APP_ID
|
|
35
|
+
client_secret: SHAREPOINT_APP_SECRET
|
|
36
|
+
tenant_id: SHAREPOINT_TENANT_ID
|
|
37
|
+
tenant: symbits
|
|
38
|
+
site: Navigator-Navigator-dev
|
|
39
|
+
destination:
|
|
40
|
+
directory: Reports/2026-05/
|
|
41
|
+
filename: ventas.xlsx
|
|
42
|
+
format: xlsx
|
|
43
|
+
sheet_name: Ventas
|
|
44
|
+
mode: append # write (default) | append
|
|
45
|
+
create_if_missing: true # create the file if it does not exist
|
|
46
|
+
on_schema_mismatch: error # error (default) | reorder | ignore
|
|
47
|
+
|
|
48
|
+
Target a user's personal OneDrive instead of a SharePoint site library by
|
|
49
|
+
adding a ``drive`` block (works in both write and append modes):
|
|
50
|
+
|
|
51
|
+
.. code-block:: yaml
|
|
52
|
+
|
|
53
|
+
CopyToSharepoint:
|
|
54
|
+
credentials: { client_id: ..., client_secret: ..., tenant_id: ... }
|
|
55
|
+
tenant: symbits
|
|
56
|
+
drive:
|
|
57
|
+
type: onedrive # site (default) | onedrive
|
|
58
|
+
user: someone@symbits.com # UPN, user-id, or "me" (delegated auth)
|
|
59
|
+
destination:
|
|
60
|
+
directory: Documents/Reports/
|
|
61
|
+
filename: ventas.xlsx
|
|
62
|
+
format: xlsx
|
|
63
|
+
mode: append
|
|
64
|
+
"""
|
|
65
|
+
from __future__ import annotations
|
|
66
|
+
|
|
67
|
+
import shutil
|
|
68
|
+
import tempfile
|
|
69
|
+
from collections.abc import Callable
|
|
70
|
+
from datetime import datetime
|
|
71
|
+
from pathlib import Path
|
|
72
|
+
from typing import Any, List, Optional
|
|
73
|
+
|
|
74
|
+
import pandas
|
|
75
|
+
|
|
76
|
+
from ..exceptions import ComponentError, DataNotFound, FileError, FileNotFound
|
|
77
|
+
from ..interfaces.Sharepoint import SharepointClient
|
|
78
|
+
from ..interfaces.copy_to_file_base import CopyToFileBase
|
|
79
|
+
|
|
80
|
+
_APPEND_MODES = {"write", "append"}
|
|
81
|
+
_SCHEMA_POLICIES = {"error", "reorder", "ignore"}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class CopyToSharepoint(SharepointClient, CopyToFileBase):
|
|
85
|
+
"""Upload a DataFrame to a single SharePoint file in CSV / Excel / Parquet / JSON format.
|
|
86
|
+
|
|
87
|
+
Inherits from ``SharepointClient`` (left) and ``CopyToFileBase`` (right),
|
|
88
|
+
mirroring the inheritance order of
|
|
89
|
+
``UploadToSharepoint(SharepointClient, UploadToBase)``.
|
|
90
|
+
|
|
91
|
+
The v1 implementation uses the tempfile fallback path:
|
|
92
|
+
``CopyToFileBase.run()`` falls back to ``_put_from_tempfile()`` when
|
|
93
|
+
``_put_from_bytes()`` raises ``NotImplementedError`` (the default).
|
|
94
|
+
|
|
95
|
+
Properties (in addition to CopyToFileBase write options):
|
|
96
|
+
|
|
97
|
+
.. table::
|
|
98
|
+
:widths: auto
|
|
99
|
+
|
|
100
|
+
+------------------+-----+-------------------------------------------------------+
|
|
101
|
+
| credentials | Yes | SharePoint credentials (app or user auth). |
|
|
102
|
+
+------------------+-----+-------------------------------------------------------+
|
|
103
|
+
| tenant | Yes | SharePoint tenant name (e.g. ``symbits``). |
|
|
104
|
+
+------------------+-----+-------------------------------------------------------+
|
|
105
|
+
| site | Yes | SharePoint site name. |
|
|
106
|
+
+------------------+-----+-------------------------------------------------------+
|
|
107
|
+
| destination | Yes | Dict ``{ directory: <path>, filename: <name> }`` |
|
|
108
|
+
| | | — single file only in v1. |
|
|
109
|
+
+------------------+-----+-------------------------------------------------------+
|
|
110
|
+
| format | No | Output format: ``csv`` (default), ``xlsx``, |
|
|
111
|
+
| | | ``parquet``, ``json``. |
|
|
112
|
+
+------------------+-----+-------------------------------------------------------+
|
|
113
|
+
|
|
114
|
+
Note:
|
|
115
|
+
Single-file only in v1. For multi-file uploads use ``UploadToSharepoint``.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
_version = "1.0.0"
|
|
119
|
+
|
|
120
|
+
_credentials: dict = {
|
|
121
|
+
"client_id": str,
|
|
122
|
+
"client_secret": str,
|
|
123
|
+
"tenant_id": str,
|
|
124
|
+
"username": str,
|
|
125
|
+
"password": str,
|
|
126
|
+
"tenant": str,
|
|
127
|
+
"site": str,
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
def __init__(
|
|
131
|
+
self,
|
|
132
|
+
loop=None,
|
|
133
|
+
job: Optional[Callable] = None,
|
|
134
|
+
stat: Optional[Callable] = None,
|
|
135
|
+
**kwargs,
|
|
136
|
+
) -> None:
|
|
137
|
+
"""Initialise, forwarding kwargs through the MRO chain.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
loop: Unused; accepted for API parity.
|
|
141
|
+
job: Optional job callable.
|
|
142
|
+
stat: Optional stat callable.
|
|
143
|
+
**kwargs: All component configuration, including ``credentials``,
|
|
144
|
+
``tenant``, ``site``, ``destination``, ``format``,
|
|
145
|
+
and all CopyToFileBase write options.
|
|
146
|
+
"""
|
|
147
|
+
self.url: Optional[str] = None
|
|
148
|
+
self.context = None
|
|
149
|
+
self.destination_dir: str = "Shared Documents/"
|
|
150
|
+
self.destination_filename: Optional[str] = None
|
|
151
|
+
|
|
152
|
+
# Append-mode options (consumed here so they are not forwarded as
|
|
153
|
+
# arbitrary FlowComponent attributes).
|
|
154
|
+
self.mode: str = (kwargs.pop("mode", "write") or "write").strip().lower()
|
|
155
|
+
if self.mode not in _APPEND_MODES:
|
|
156
|
+
raise ComponentError(
|
|
157
|
+
f"CopyToSharepoint: invalid mode {self.mode!r}. "
|
|
158
|
+
f"Expected one of {sorted(_APPEND_MODES)}."
|
|
159
|
+
)
|
|
160
|
+
self.create_if_missing: bool = bool(kwargs.pop("create_if_missing", True))
|
|
161
|
+
self.on_schema_mismatch: str = (
|
|
162
|
+
kwargs.pop("on_schema_mismatch", "error") or "error"
|
|
163
|
+
).strip().lower()
|
|
164
|
+
if self.on_schema_mismatch not in _SCHEMA_POLICIES:
|
|
165
|
+
raise ComponentError(
|
|
166
|
+
f"CopyToSharepoint: invalid on_schema_mismatch "
|
|
167
|
+
f"{self.on_schema_mismatch!r}. Expected one of "
|
|
168
|
+
f"{sorted(_SCHEMA_POLICIES)}."
|
|
169
|
+
)
|
|
170
|
+
self.write_header_if_empty: bool = bool(
|
|
171
|
+
kwargs.pop("write_header_if_empty", True)
|
|
172
|
+
)
|
|
173
|
+
super().__init__(loop=loop, job=job, stat=stat, **kwargs)
|
|
174
|
+
|
|
175
|
+
async def start(self, **kwargs) -> bool:
|
|
176
|
+
"""Prepare the component, resolving the destination path and filename.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
**kwargs: Forwarded to super().start().
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
``True`` on success.
|
|
183
|
+
|
|
184
|
+
Raises:
|
|
185
|
+
ComponentError: When ``destination.filename`` is missing or a list.
|
|
186
|
+
"""
|
|
187
|
+
await super().start(**kwargs)
|
|
188
|
+
|
|
189
|
+
dest = getattr(self, "destination", None) or {}
|
|
190
|
+
|
|
191
|
+
# Resolve directory prefix
|
|
192
|
+
directory = dest.get("directory", "Shared Documents") or "Shared Documents"
|
|
193
|
+
if "{" in directory:
|
|
194
|
+
directory = self.mask_replacement(directory)
|
|
195
|
+
if not directory.endswith("/"):
|
|
196
|
+
directory += "/"
|
|
197
|
+
self.destination_dir = directory
|
|
198
|
+
|
|
199
|
+
# Resolve filename — single file only
|
|
200
|
+
filename = dest.get("filename")
|
|
201
|
+
if isinstance(filename, list):
|
|
202
|
+
raise ComponentError(
|
|
203
|
+
"CopyToSharepoint: single-file only in v1. "
|
|
204
|
+
"Use UploadToSharepoint for multi-file uploads."
|
|
205
|
+
)
|
|
206
|
+
if not filename:
|
|
207
|
+
raise ComponentError(
|
|
208
|
+
"CopyToSharepoint: missing destination.filename. "
|
|
209
|
+
"Provide `destination: { directory: <path>, filename: <name> }`."
|
|
210
|
+
)
|
|
211
|
+
if isinstance(filename, str) and "{" in filename:
|
|
212
|
+
filename = self.mask_replacement(filename)
|
|
213
|
+
self.destination_filename = filename
|
|
214
|
+
return True
|
|
215
|
+
|
|
216
|
+
async def _put_from_tempfile(self, path: Path) -> None:
|
|
217
|
+
"""Upload the serialised DataFrame tempfile to SharePoint.
|
|
218
|
+
|
|
219
|
+
Called by ``CopyToFileBase.run()`` after writing the DataFrame to a
|
|
220
|
+
temporary file. The base class deletes the tempfile unconditionally
|
|
221
|
+
after this method returns.
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
path: Path to the temporary file containing the serialised
|
|
225
|
+
DataFrame.
|
|
226
|
+
|
|
227
|
+
Raises:
|
|
228
|
+
FileError: When ``upload_files`` reports errors.
|
|
229
|
+
"""
|
|
230
|
+
async with self.connection():
|
|
231
|
+
await self.verify_sharepoint_access()
|
|
232
|
+
if not self.context:
|
|
233
|
+
self.context = self.get_context(self.url)
|
|
234
|
+
result = await self.upload_files(
|
|
235
|
+
filenames=[path],
|
|
236
|
+
destination=self.destination_dir,
|
|
237
|
+
destination_filenames=[self.destination_filename],
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
# Validate the result — upload_files may return a dict with an "errors" key
|
|
241
|
+
if isinstance(result, dict) and result.get("errors"):
|
|
242
|
+
raise FileError(
|
|
243
|
+
f"CopyToSharepoint: upload errors for "
|
|
244
|
+
f"'{self.destination_filename}' → '{self.destination_dir}': "
|
|
245
|
+
f"{result['errors']}"
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
self.add_metric(
|
|
249
|
+
"SHAREPOINT_UPLOADED",
|
|
250
|
+
{self.destination_filename: self.destination_dir},
|
|
251
|
+
)
|
|
252
|
+
self._logger.info(
|
|
253
|
+
"CopyToSharepoint: uploaded %s to %s",
|
|
254
|
+
self.destination_filename,
|
|
255
|
+
self.destination_dir,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
# ------------------------------------------------------------------
|
|
259
|
+
# Append mode (xlsx-only in v1, openpyxl strategy)
|
|
260
|
+
# ------------------------------------------------------------------
|
|
261
|
+
|
|
262
|
+
async def run(self) -> pandas.DataFrame:
|
|
263
|
+
"""Dispatch to write (default) or append behaviour.
|
|
264
|
+
|
|
265
|
+
``mode: write`` keeps the original ``CopyToFileBase.run()`` pipeline
|
|
266
|
+
(full-file replace). ``mode: append`` downloads the existing Excel
|
|
267
|
+
file, appends the input rows with openpyxl (preserving formatting,
|
|
268
|
+
formulas and other sheets) and re-uploads it.
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
The input ``pandas.DataFrame`` unchanged.
|
|
272
|
+
"""
|
|
273
|
+
if self.mode != "append":
|
|
274
|
+
return await super().run()
|
|
275
|
+
return await self._run_append()
|
|
276
|
+
|
|
277
|
+
async def _run_append(self) -> pandas.DataFrame:
|
|
278
|
+
"""Download → append rows (openpyxl) → re-upload the target xlsx.
|
|
279
|
+
|
|
280
|
+
Raises:
|
|
281
|
+
DataNotFound: When ``self.data`` is ``None`` or empty.
|
|
282
|
+
ComponentError: When ``format`` is not ``xlsx``.
|
|
283
|
+
FileNotFound: When the target is missing and
|
|
284
|
+
``create_if_missing`` is ``False``.
|
|
285
|
+
FileError: On schema mismatch (``on_schema_mismatch='error'``)
|
|
286
|
+
or upload failure.
|
|
287
|
+
|
|
288
|
+
Note:
|
|
289
|
+
The download-modify-upload cycle is NOT atomic. Concurrent appends
|
|
290
|
+
to the same file may lose rows; serialise them at the task level.
|
|
291
|
+
"""
|
|
292
|
+
df = getattr(self, "data", None)
|
|
293
|
+
if df is None or (hasattr(df, "empty") and df.empty):
|
|
294
|
+
raise DataNotFound(f"{self.__class__.__name__}: no input DataFrame")
|
|
295
|
+
if self.format != "xlsx":
|
|
296
|
+
raise ComponentError(
|
|
297
|
+
"CopyToSharepoint: mode=append only supports format=xlsx in v1."
|
|
298
|
+
)
|
|
299
|
+
|
|
300
|
+
async with self.connection():
|
|
301
|
+
await self.verify_sharepoint_access()
|
|
302
|
+
if not self.context:
|
|
303
|
+
self.context = self.get_context(self.url)
|
|
304
|
+
|
|
305
|
+
tmpdir = Path(tempfile.mkdtemp(prefix="appendto-sharepoint-"))
|
|
306
|
+
try:
|
|
307
|
+
existing = await self._download_existing(tmpdir)
|
|
308
|
+
|
|
309
|
+
if existing is None:
|
|
310
|
+
if not self.create_if_missing:
|
|
311
|
+
raise FileNotFound(
|
|
312
|
+
f"CopyToSharepoint: target "
|
|
313
|
+
f"'{self.destination_filename}' not found in "
|
|
314
|
+
f"'{self.destination_dir}' and create_if_missing=False."
|
|
315
|
+
)
|
|
316
|
+
# Create a fresh workbook from the DataFrame and upload it.
|
|
317
|
+
out = tmpdir / self.destination_filename
|
|
318
|
+
df.to_excel(
|
|
319
|
+
out, sheet_name=self.sheet_name, index=self.index
|
|
320
|
+
)
|
|
321
|
+
await self._upload(out)
|
|
322
|
+
self.add_metric(
|
|
323
|
+
"SHAREPOINT_APPENDED",
|
|
324
|
+
{
|
|
325
|
+
self.destination_filename: self.destination_dir,
|
|
326
|
+
"rows": int(len(df)),
|
|
327
|
+
"created": True,
|
|
328
|
+
},
|
|
329
|
+
)
|
|
330
|
+
self._logger.info(
|
|
331
|
+
"CopyToSharepoint: created %s in %s (%d rows)",
|
|
332
|
+
self.destination_filename,
|
|
333
|
+
self.destination_dir,
|
|
334
|
+
len(df),
|
|
335
|
+
)
|
|
336
|
+
else:
|
|
337
|
+
appended = self._append_rows(existing, df)
|
|
338
|
+
await self._upload(existing)
|
|
339
|
+
self.add_metric(
|
|
340
|
+
"SHAREPOINT_APPENDED",
|
|
341
|
+
{
|
|
342
|
+
self.destination_filename: self.destination_dir,
|
|
343
|
+
"rows": int(appended),
|
|
344
|
+
"created": False,
|
|
345
|
+
},
|
|
346
|
+
)
|
|
347
|
+
self._logger.info(
|
|
348
|
+
"CopyToSharepoint: appended %d rows to %s in %s",
|
|
349
|
+
appended,
|
|
350
|
+
self.destination_filename,
|
|
351
|
+
self.destination_dir,
|
|
352
|
+
)
|
|
353
|
+
finally:
|
|
354
|
+
shutil.rmtree(tmpdir, ignore_errors=True)
|
|
355
|
+
|
|
356
|
+
self._result = df
|
|
357
|
+
return df
|
|
358
|
+
|
|
359
|
+
async def _download_existing(self, tmpdir: Path) -> Optional[Path]:
|
|
360
|
+
"""Download the append target into ``tmpdir`` if it exists.
|
|
361
|
+
|
|
362
|
+
Reuses ``SharepointClient.file_search`` + ``download_found_files``
|
|
363
|
+
(the same primitives ``CopyFromSharepoint`` relies on).
|
|
364
|
+
|
|
365
|
+
Returns:
|
|
366
|
+
Path to the downloaded file, or ``None`` when the target does not
|
|
367
|
+
exist in SharePoint.
|
|
368
|
+
"""
|
|
369
|
+
# file_search reads these; directory is where downloads land.
|
|
370
|
+
self._srcfiles = [
|
|
371
|
+
{
|
|
372
|
+
"filename": self.destination_filename,
|
|
373
|
+
"directory": self.destination_dir,
|
|
374
|
+
"recursive": False,
|
|
375
|
+
}
|
|
376
|
+
]
|
|
377
|
+
self.directory = str(tmpdir)
|
|
378
|
+
self._filenames = None # keep original names on download
|
|
379
|
+
|
|
380
|
+
try:
|
|
381
|
+
found = await self.file_search()
|
|
382
|
+
except (FileError, FileNotFound):
|
|
383
|
+
# file_search raises FileError when nothing matches.
|
|
384
|
+
return None
|
|
385
|
+
|
|
386
|
+
if not found:
|
|
387
|
+
return None
|
|
388
|
+
|
|
389
|
+
await self.download_found_files(found)
|
|
390
|
+
|
|
391
|
+
candidates = [p for p in tmpdir.iterdir() if p.is_file()]
|
|
392
|
+
if not candidates:
|
|
393
|
+
return None
|
|
394
|
+
exact = [p for p in candidates if p.name == self.destination_filename]
|
|
395
|
+
return exact[0] if exact else candidates[0]
|
|
396
|
+
|
|
397
|
+
def _append_rows(self, path: Path, df: pandas.DataFrame) -> int:
|
|
398
|
+
"""Append ``df`` rows to ``path`` (xlsx) with openpyxl, in place.
|
|
399
|
+
|
|
400
|
+
Preserves existing formatting, formulas and other sheets. Reconciles
|
|
401
|
+
columns against the existing header per ``on_schema_mismatch``.
|
|
402
|
+
|
|
403
|
+
Returns:
|
|
404
|
+
Number of data rows appended.
|
|
405
|
+
"""
|
|
406
|
+
from openpyxl import load_workbook
|
|
407
|
+
|
|
408
|
+
if self.index:
|
|
409
|
+
df = df.reset_index()
|
|
410
|
+
|
|
411
|
+
wb = load_workbook(path) # data_only=False → keep formulas/styles
|
|
412
|
+
if self.sheet_name in wb.sheetnames:
|
|
413
|
+
ws = wb[self.sheet_name]
|
|
414
|
+
else:
|
|
415
|
+
ws = wb.create_sheet(self.sheet_name)
|
|
416
|
+
|
|
417
|
+
columns = [str(c) for c in df.columns]
|
|
418
|
+
|
|
419
|
+
# Is there a usable header row already? A freshly-created/empty sheet
|
|
420
|
+
# still reports max_row == 1 with all-None cells, so check values.
|
|
421
|
+
has_data = ws.max_row >= 1 and any(
|
|
422
|
+
cell.value is not None for cell in ws[1]
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
# Use an explicit row cursor with ws.cell() rather than ws.append():
|
|
426
|
+
# append() writes after max_row, which on an empty sheet (phantom
|
|
427
|
+
# max_row == 1) would leave a blank first row.
|
|
428
|
+
if has_data:
|
|
429
|
+
existing_header = [
|
|
430
|
+
cell.value for cell in ws[1] if cell.value is not None
|
|
431
|
+
]
|
|
432
|
+
df = self._reconcile_schema(df, existing_header)
|
|
433
|
+
columns = [str(c) for c in df.columns]
|
|
434
|
+
next_row = ws.max_row + 1
|
|
435
|
+
else:
|
|
436
|
+
next_row = 1
|
|
437
|
+
if self.write_header_if_empty:
|
|
438
|
+
for col_idx, col in enumerate(columns, start=1):
|
|
439
|
+
ws.cell(row=next_row, column=col_idx, value=col)
|
|
440
|
+
next_row += 1
|
|
441
|
+
|
|
442
|
+
appended = 0
|
|
443
|
+
for row in df.itertuples(index=False, name=None):
|
|
444
|
+
for col_idx, value in enumerate(row, start=1):
|
|
445
|
+
ws.cell(row=next_row, column=col_idx, value=self._coerce(value))
|
|
446
|
+
next_row += 1
|
|
447
|
+
appended += 1
|
|
448
|
+
|
|
449
|
+
wb.save(path)
|
|
450
|
+
return appended
|
|
451
|
+
|
|
452
|
+
def _reconcile_schema(
|
|
453
|
+
self, df: pandas.DataFrame, existing_header: List[Any]
|
|
454
|
+
) -> pandas.DataFrame:
|
|
455
|
+
"""Align ``df`` columns to the existing sheet header.
|
|
456
|
+
|
|
457
|
+
Policy (``on_schema_mismatch``):
|
|
458
|
+
- ``error`` : raise if column *sets* differ (missing/extra).
|
|
459
|
+
- ``reorder``: reorder to the existing header; missing → blank,
|
|
460
|
+
extra columns dropped.
|
|
461
|
+
- ``ignore`` : append positionally, leaving ``df`` untouched.
|
|
462
|
+
"""
|
|
463
|
+
header = [str(h) for h in existing_header]
|
|
464
|
+
df_cols = [str(c) for c in df.columns]
|
|
465
|
+
|
|
466
|
+
if self.on_schema_mismatch == "ignore":
|
|
467
|
+
return df
|
|
468
|
+
|
|
469
|
+
missing = [h for h in header if h not in df_cols] # in sheet, not in df
|
|
470
|
+
extra = [c for c in df_cols if c not in header] # in df, not in sheet
|
|
471
|
+
|
|
472
|
+
if self.on_schema_mismatch == "error":
|
|
473
|
+
if missing or extra:
|
|
474
|
+
raise FileError(
|
|
475
|
+
"CopyToSharepoint: append schema mismatch for "
|
|
476
|
+
f"'{self.destination_filename}'. "
|
|
477
|
+
f"Missing in data: {missing}; unexpected in data: {extra}. "
|
|
478
|
+
"Set on_schema_mismatch='reorder' or 'ignore' to override."
|
|
479
|
+
)
|
|
480
|
+
# Same set — reorder to the existing header order.
|
|
481
|
+
return df.reindex(columns=header)
|
|
482
|
+
|
|
483
|
+
# reorder: align to header, fill missing with blanks, drop extras.
|
|
484
|
+
return df.reindex(columns=header)
|
|
485
|
+
|
|
486
|
+
@staticmethod
|
|
487
|
+
def _coerce(value: Any) -> Any:
|
|
488
|
+
"""Coerce a pandas/numpy scalar into an openpyxl-friendly Python value.
|
|
489
|
+
|
|
490
|
+
NaN/NaT → ``None``; ``pandas.Timestamp`` → ``datetime``; numpy scalars
|
|
491
|
+
→ native Python via ``.item()``.
|
|
492
|
+
"""
|
|
493
|
+
if value is None:
|
|
494
|
+
return None
|
|
495
|
+
try:
|
|
496
|
+
if pandas.isna(value):
|
|
497
|
+
return None
|
|
498
|
+
except (TypeError, ValueError):
|
|
499
|
+
pass
|
|
500
|
+
if isinstance(value, pandas.Timestamp):
|
|
501
|
+
return value.to_pydatetime()
|
|
502
|
+
if isinstance(value, datetime):
|
|
503
|
+
return value
|
|
504
|
+
item = getattr(value, "item", None)
|
|
505
|
+
if callable(item):
|
|
506
|
+
try:
|
|
507
|
+
return item()
|
|
508
|
+
except Exception: # pragma: no cover - defensive
|
|
509
|
+
return value
|
|
510
|
+
return value
|
|
511
|
+
|
|
512
|
+
async def _upload(self, path: Path) -> None:
|
|
513
|
+
"""Upload ``path`` to the configured destination (replace), with checks."""
|
|
514
|
+
result = await self.upload_files(
|
|
515
|
+
filenames=[path],
|
|
516
|
+
destination=self.destination_dir,
|
|
517
|
+
destination_filenames=[self.destination_filename],
|
|
518
|
+
)
|
|
519
|
+
if isinstance(result, dict) and result.get("errors"):
|
|
520
|
+
raise FileError(
|
|
521
|
+
f"CopyToSharepoint: upload errors for "
|
|
522
|
+
f"'{self.destination_filename}' → '{self.destination_dir}': "
|
|
523
|
+
f"{result['errors']}"
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
async def close(self) -> None:
|
|
527
|
+
"""Close the SharePoint connection gracefully.
|
|
528
|
+
|
|
529
|
+
Wraps ``SharepointClient.close()`` and suppresses errors so that
|
|
530
|
+
cleanup does not mask the primary exception from ``run()``.
|
|
531
|
+
"""
|
|
532
|
+
try:
|
|
533
|
+
await super().close()
|
|
534
|
+
except Exception:
|
|
535
|
+
self._logger.warning(
|
|
536
|
+
"CopyToSharepoint: error during close()", exc_info=True
|
|
537
|
+
)
|