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.
Files changed (825) hide show
  1. {flowtask-5.12.0 → flowtask-5.12.1}/PKG-INFO +2 -2
  2. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CensusData.py +5 -0
  3. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToBigQuery.py +81 -1
  4. flowtask-5.12.1/flowtask/components/CopyToSharepoint.py +537 -0
  5. flowtask-5.12.1/flowtask/components/DownloadFromGamma.py +454 -0
  6. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleGeoCoding.py +84 -45
  7. flowtask-5.12.1/flowtask/components/OpenStreetMap.py +1198 -0
  8. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWithPandas.py +91 -14
  9. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasToFile.py +28 -3
  10. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RESTClient.py +42 -0
  11. flowtask-5.12.1/flowtask/components/Workday/__init__.py +43 -0
  12. flowtask-5.12.1/flowtask/components/Workday/models/__init__.py +17 -0
  13. flowtask-5.12.1/flowtask/components/Workday/models/applicant.py +2 -0
  14. flowtask-5.12.1/flowtask/components/Workday/models/candidate.py +2 -0
  15. flowtask-5.12.1/flowtask/components/Workday/models/cost_center.py +2 -0
  16. flowtask-5.12.1/flowtask/components/Workday/models/custom_punch_field_report.py +2 -0
  17. flowtask-5.12.1/flowtask/components/Workday/models/job_posting.py +2 -0
  18. flowtask-5.12.1/flowtask/components/Workday/models/job_posting_site.py +2 -0
  19. flowtask-5.12.1/flowtask/components/Workday/models/job_requisition.py +2 -0
  20. flowtask-5.12.1/flowtask/components/Workday/models/location.py +2 -0
  21. flowtask-5.12.1/flowtask/components/Workday/models/location_hierarchy_assignments.py +2 -0
  22. flowtask-5.12.1/flowtask/components/Workday/models/organizations.py +2 -0
  23. flowtask-5.12.1/flowtask/components/Workday/models/reference.py +2 -0
  24. flowtask-5.12.1/flowtask/components/Workday/models/time_block.py +2 -0
  25. flowtask-5.12.1/flowtask/components/Workday/models/time_off_balance.py +2 -0
  26. flowtask-5.12.1/flowtask/components/Workday/models/time_request.py +2 -0
  27. flowtask-5.12.1/flowtask/components/Workday/models/worker.py +2 -0
  28. flowtask-5.12.1/flowtask/components/Workday/parsers/__init__.py +3 -0
  29. flowtask-5.12.1/flowtask/components/Workday/parsers/applicant_parsers.py +2 -0
  30. flowtask-5.12.1/flowtask/components/Workday/parsers/candidate_parsers.py +2 -0
  31. flowtask-5.12.1/flowtask/components/Workday/parsers/cost_center_parsers.py +2 -0
  32. flowtask-5.12.1/flowtask/components/Workday/parsers/custom_punch_field_report_parsers.py +2 -0
  33. flowtask-5.12.1/flowtask/components/Workday/parsers/job_posting_parsers.py +2 -0
  34. flowtask-5.12.1/flowtask/components/Workday/parsers/job_posting_site_parsers.py +2 -0
  35. flowtask-5.12.1/flowtask/components/Workday/parsers/job_requisition_parsers.py +2 -0
  36. flowtask-5.12.1/flowtask/components/Workday/parsers/location_hierarchy_assignments_parsers.py +2 -0
  37. flowtask-5.12.1/flowtask/components/Workday/parsers/location_parsers.py +2 -0
  38. flowtask-5.12.1/flowtask/components/Workday/parsers/organization_parsers.py +2 -0
  39. flowtask-5.12.1/flowtask/components/Workday/parsers/reference_parsers.py +2 -0
  40. flowtask-5.12.1/flowtask/components/Workday/parsers/time_block_parsers.py +2 -0
  41. flowtask-5.12.1/flowtask/components/Workday/parsers/time_off_balance_parsers.py +2 -0
  42. flowtask-5.12.1/flowtask/components/Workday/parsers/time_request_parsers.py +2 -0
  43. flowtask-5.12.1/flowtask/components/Workday/parsers/worker_parsers.py +2 -0
  44. flowtask-5.12.1/flowtask/components/Workday/types/__init__.py +19 -0
  45. flowtask-5.12.1/flowtask/components/Workday/types/applicants.py +2 -0
  46. flowtask-5.12.1/flowtask/components/Workday/types/base.py +2 -0
  47. flowtask-5.12.1/flowtask/components/Workday/types/candidates.py +2 -0
  48. flowtask-5.12.1/flowtask/components/Workday/types/cost_centers.py +2 -0
  49. flowtask-5.12.1/flowtask/components/Workday/types/custom_punch_field_report.py +2 -0
  50. flowtask-5.12.1/flowtask/components/Workday/types/custom_punch_field_report_rest.py +2 -0
  51. flowtask-5.12.1/flowtask/components/Workday/types/custom_report.py +2 -0
  52. flowtask-5.12.1/flowtask/components/Workday/types/job_posting_sites.py +2 -0
  53. flowtask-5.12.1/flowtask/components/Workday/types/job_postings.py +2 -0
  54. flowtask-5.12.1/flowtask/components/Workday/types/job_requisitions.py +2 -0
  55. flowtask-5.12.1/flowtask/components/Workday/types/location_hierarchy_assignments.py +2 -0
  56. flowtask-5.12.1/flowtask/components/Workday/types/locations.py +2 -0
  57. flowtask-5.12.1/flowtask/components/Workday/types/organization_single.py +2 -0
  58. flowtask-5.12.1/flowtask/components/Workday/types/organizations.py +2 -0
  59. flowtask-5.12.1/flowtask/components/Workday/types/recruiting_agency_users.py +2 -0
  60. flowtask-5.12.1/flowtask/components/Workday/types/references.py +2 -0
  61. flowtask-5.12.1/flowtask/components/Workday/types/time_block_report.py +2 -0
  62. flowtask-5.12.1/flowtask/components/Workday/types/time_blocks.py +2 -0
  63. flowtask-5.12.1/flowtask/components/Workday/types/time_off_balances.py +2 -0
  64. flowtask-5.12.1/flowtask/components/Workday/types/time_requests.py +2 -0
  65. flowtask-5.12.1/flowtask/components/Workday/types/workers.py +2 -0
  66. flowtask-5.12.1/flowtask/components/Workday/utils/__init__.py +4 -0
  67. flowtask-5.12.1/flowtask/components/Workday/utils/utils.py +2 -0
  68. flowtask-5.12.1/flowtask/components/Workday/workday.py +641 -0
  69. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/pandas_io.py +14 -2
  70. flowtask-5.12.1/flowtask/components/tDictKey.py +115 -0
  71. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tExplode.py +13 -0
  72. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/tMap.py +9 -0
  73. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/conf.py +19 -0
  74. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/notify_event.py +6 -0
  75. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/teams.py +4 -0
  76. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/local.py +5 -2
  77. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Sharepoint.py +117 -2
  78. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/__init__.py +6 -0
  79. flowtask-5.12.1/flowtask/interfaces/gamma.py +408 -0
  80. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/http.py +11 -2
  81. flowtask-5.12.1/flowtask/interfaces/workday/__init__.py +15 -0
  82. flowtask-5.12.1/flowtask/interfaces/workday/config.py +221 -0
  83. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/__init__.py +8 -0
  84. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/applicants.py +11 -11
  85. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/base.py +124 -8
  86. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/candidates.py +10 -10
  87. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/cost_centers.py +7 -7
  88. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_punch_field_report.py +2 -2
  89. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_punch_field_report_rest.py +7 -7
  90. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/custom_report.py +5 -5
  91. flowtask-5.12.1/flowtask/interfaces/workday/handlers/import_reported_time_blocks.py +170 -0
  92. flowtask-5.12.1/flowtask/interfaces/workday/handlers/import_time_clock_events.py +199 -0
  93. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_posting_sites.py +7 -7
  94. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_postings.py +7 -7
  95. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/job_requisitions.py +7 -7
  96. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/location_hierarchy_assignments.py +3 -3
  97. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/locations.py +1 -1
  98. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/organization_single.py +2 -2
  99. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/organizations.py +3 -3
  100. flowtask-5.12.1/flowtask/interfaces/workday/handlers/put_time_clock_events.py +188 -0
  101. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/recruiting_agency_users.py +7 -7
  102. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/references.py +2 -2
  103. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_block_report.py +5 -5
  104. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_blocks.py +1 -1
  105. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_off_balances.py +1 -1
  106. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/time_requests.py +1 -1
  107. {flowtask-5.12.0/flowtask/components/Workday/types → flowtask-5.12.1/flowtask/interfaces/workday/handlers}/workers.py +10 -10
  108. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/__init__.py +5 -0
  109. flowtask-5.12.1/flowtask/interfaces/workday/models/clock_event.py +164 -0
  110. flowtask-5.12.1/flowtask/interfaces/workday/models/time_block.py +52 -0
  111. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_requisition_parsers.py +1 -1
  112. flowtask-5.12.1/flowtask/interfaces/workday/service.py +579 -0
  113. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/runner.py +36 -0
  114. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/task.py +5 -0
  115. flowtask-5.12.1/flowtask/utils/msgraph_patch.py +61 -0
  116. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/version.py +1 -1
  117. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/PKG-INFO +2 -2
  118. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/SOURCES.txt +67 -0
  119. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/requires.txt +1 -1
  120. {flowtask-5.12.0 → flowtask-5.12.1}/pyproject.toml +3 -1
  121. flowtask-5.12.0/flowtask/components/CopyToSharepoint.py +0 -201
  122. flowtask-5.12.0/flowtask/components/OpenStreetMap.py +0 -582
  123. flowtask-5.12.0/flowtask/components/Workday/__init__.py +0 -5
  124. flowtask-5.12.0/flowtask/components/Workday/models/time_block.py +0 -47
  125. flowtask-5.12.0/flowtask/components/Workday/workday.py +0 -961
  126. {flowtask-5.12.0 → flowtask-5.12.1}/CONTRIBUTING.md +0 -0
  127. {flowtask-5.12.0 → flowtask-5.12.1}/INSTALL +0 -0
  128. {flowtask-5.12.0 → flowtask-5.12.1}/LICENSE +0 -0
  129. {flowtask-5.12.0 → flowtask-5.12.1}/MANIFEST.in +0 -0
  130. {flowtask-5.12.0 → flowtask-5.12.1}/README.md +0 -0
  131. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/__init__.py +0 -0
  132. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/__main__.py +0 -0
  133. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/__init__.py +0 -0
  134. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/check.py +0 -0
  135. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/bots/codebot.py +0 -0
  136. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ASPX.py +0 -0
  137. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ATT.py +0 -0
  138. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AddDataset.py +0 -0
  139. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Amazon.py +0 -0
  140. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AutoTask.py +0 -0
  141. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Azure.py +0 -0
  142. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/AzureUsers.py +0 -0
  143. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BaseAction.py +0 -0
  144. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BaseLoop.py +0 -0
  145. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/BestBuy.py +0 -0
  146. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CSVToGCS.py +0 -0
  147. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CallAnalysis.py +0 -0
  148. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CallSummary.py +0 -0
  149. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CensusVariables.py +0 -0
  150. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/__init__.py +0 -0
  151. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/__init__.py +0 -0
  152. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/base.py +0 -0
  153. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/explorium.py +0 -0
  154. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/leadiq.py +0 -0
  155. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/rocket.py +0 -0
  156. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/siccode.py +0 -0
  157. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/visualvisitor.py +0 -0
  158. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/parsers/zoominfo.py +0 -0
  159. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CompanyScraper/scrapper.py +0 -0
  160. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromBase.py +0 -0
  161. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromS3.py +0 -0
  162. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyFromSharepoint.py +0 -0
  163. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyTo.py +0 -0
  164. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToFileBase.py +0 -0
  165. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToMongoDB.py +0 -0
  166. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToPg.py +0 -0
  167. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToRethink.py +0 -0
  168. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CopyToS3.py +0 -0
  169. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Costco.py +0 -0
  170. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateGCSBucket.py +0 -0
  171. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/CreateReport.py +0 -0
  172. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/__init__.py +0 -0
  173. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/__init__.py +0 -0
  174. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/bar.py +0 -0
  175. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/base.py +0 -0
  176. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/charts/pie.py +0 -0
  177. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CreateReport/utils.py +0 -0
  178. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/CustomerSatisfaction.py +0 -0
  179. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DataInput.py +0 -0
  180. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DateList.py +0 -0
  181. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DbClient.py +0 -0
  182. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DialPad.py +0 -0
  183. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DispatchMe.py +0 -0
  184. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DocumentDBQuery.py +0 -0
  185. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFrom.py +0 -0
  186. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromD2L.py +0 -0
  187. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromFTP.py +0 -0
  188. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromIMAP.py +0 -0
  189. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromS3.py +0 -0
  190. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSFTP.py +0 -0
  191. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSharepoint.py +0 -0
  192. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSmartSheet.py +0 -0
  193. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadFromSmartsheet.py +0 -0
  194. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DownloadS3File.py +0 -0
  195. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Dummy.py +0 -0
  196. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/DuplicatePhoto.py +0 -0
  197. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/EmployeeEvaluation.py +0 -0
  198. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExecuteSQL.py +0 -0
  199. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExtractHTML.py +0 -0
  200. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ExtractTranscript.py +0 -0
  201. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileBase.py +0 -0
  202. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileCopy.py +0 -0
  203. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileDelete.py +0 -0
  204. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileExists.py +0 -0
  205. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileIteratorDelete.py +0 -0
  206. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileList.py +0 -0
  207. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileOpen.py +0 -0
  208. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileRead.py +0 -0
  209. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FileRename.py +0 -0
  210. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterIf.py +0 -0
  211. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/FilterRows.py +0 -0
  212. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/__init__.py +0 -0
  213. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/FilterRows/functions.py +0 -0
  214. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GCSToBigQuery.py +0 -0
  215. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GenData.py +0 -0
  216. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleA4.py +0 -0
  217. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GooglePlaces.py +0 -0
  218. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/GoogleSearch.py +0 -0
  219. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/HTTPClient.py +0 -0
  220. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ICIMS.py +0 -0
  221. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IF.py +0 -0
  222. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IcimsFolderCopy.py +0 -0
  223. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ImageFeatures/__init__.py +0 -0
  224. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ImageFeatures/process.py +0 -0
  225. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/IteratorBase.py +0 -0
  226. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/LeadIQ.py +0 -0
  227. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Loop.py +0 -0
  228. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Lowes.py +0 -0
  229. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MS365Usage.py +0 -0
  230. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MSTeamsMessages.py +0 -0
  231. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MarkdownMaker.py +0 -0
  232. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MarketClustering.py +0 -0
  233. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MergeFileList.py +0 -0
  234. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MergeFiles.py +0 -0
  235. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/MilvusOutput.py +0 -0
  236. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NearByStores.py +0 -0
  237. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/__init__.py +0 -0
  238. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/__init__.py +0 -0
  239. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/abstract.py +0 -0
  240. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/account.py +0 -0
  241. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/client.py +0 -0
  242. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/district.py +0 -0
  243. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/events.py +0 -0
  244. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/forms.py +0 -0
  245. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/market.py +0 -0
  246. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/organization.py +0 -0
  247. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/photos.py +0 -0
  248. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/project.py +0 -0
  249. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/region.py +0 -0
  250. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/store.py +0 -0
  251. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/models/user.py +0 -0
  252. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinja/router.py +0 -0
  253. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NetworkNinjaClaims.py +0 -0
  254. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/NextStopAgent.py +0 -0
  255. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Odoo.py +0 -0
  256. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OdooInjector.py +0 -0
  257. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenFromXML.py +0 -0
  258. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWeather.py +0 -0
  259. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/OpenWithBase.py +0 -0
  260. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PDFGenerator.py +0 -0
  261. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PGPDecrypt.py +0 -0
  262. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasIterator.py +0 -0
  263. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PandasToPowerPoint.py +0 -0
  264. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Paradox.py +0 -0
  265. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParamIterator.py +0 -0
  266. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParrotLoader/__init__.py +0 -0
  267. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParrotLoader/loader.py +0 -0
  268. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ParseHTML.py +0 -0
  269. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PgVectorOutput.py +0 -0
  270. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PlacerStores.py +0 -0
  271. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PlanogramCompliance.py +0 -0
  272. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PodcastMaker.py +0 -0
  273. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Pokemon.py +0 -0
  274. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PositiveBot.py +0 -0
  275. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PowerPointSlide.py +0 -0
  276. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/PrintMessage.py +0 -0
  277. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/__init__.py +0 -0
  278. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/__init__.py +0 -0
  279. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/base.py +0 -0
  280. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/bestbuy.py +0 -0
  281. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/parsers/lowes.py +0 -0
  282. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompetitors/scrapper.py +0 -0
  283. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductCompliant.py +0 -0
  284. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/__init__.py +0 -0
  285. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/__init__.py +0 -0
  286. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/base.py +0 -0
  287. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/brother.py +0 -0
  288. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/canon.py +0 -0
  289. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/epson.py +0 -0
  290. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/hp.py +0 -0
  291. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/parsers/samsung.py +0 -0
  292. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductInfo/scraper.py +0 -0
  293. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductPricing.py +0 -0
  294. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ProductReportBot.py +0 -0
  295. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QS.py +0 -0
  296. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QSBase.py +0 -0
  297. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryIterator.py +0 -0
  298. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryToInsert.py +0 -0
  299. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/QueryToPandas.py +0 -0
  300. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RethinkDBQuery.py +0 -0
  301. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Rsync.py +0 -0
  302. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RunSSH.py +0 -0
  303. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/RunShell.py +0 -0
  304. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SAPExtraction.py +0 -0
  305. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SMSAnalysis.py +0 -0
  306. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SMSSummary.py +0 -0
  307. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SalesForce.py +0 -0
  308. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Sassie.py +0 -0
  309. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SaveImageBank/__init__.py +0 -0
  310. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SchedulingVisits.py +0 -0
  311. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapPage.py +0 -0
  312. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapSearch.py +0 -0
  313. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ScrapTool.py +0 -0
  314. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendEmail.py +0 -0
  315. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/__init__.py +0 -0
  316. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/component.py +0 -0
  317. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/__init__.py +0 -0
  318. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/abstract.py +0 -0
  319. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SendNotify/models/zoom.py +0 -0
  320. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SentimentAnalysis.py +0 -0
  321. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/__init__.py +0 -0
  322. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/__init__.py +0 -0
  323. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/base.py +0 -0
  324. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/parsers/costco.py +0 -0
  325. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ServiceScrapper/scrapper.py +0 -0
  326. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SetVariables.py +0 -0
  327. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SplitPDF.py +0 -0
  328. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Staples.py +0 -0
  329. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SubTask.py +0 -0
  330. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/SuiteCRM.py +0 -0
  331. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Switch.py +0 -0
  332. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableBase.py +0 -0
  333. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableDelete.py +0 -0
  334. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableInput.py +0 -0
  335. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableOutput/TableOutput.py +0 -0
  336. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableOutput/__init__.py +0 -0
  337. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TableSchema.py +0 -0
  338. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Target.py +0 -0
  339. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ThumbnailGenerator.py +0 -0
  340. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ToPandas.py +0 -0
  341. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/TransformRows.py +0 -0
  342. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/__init__.py +0 -0
  343. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransformRows/functions.py +0 -0
  344. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/TransposeRows.py +0 -0
  345. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UPCDatabase.py +0 -0
  346. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UnGzip.py +0 -0
  347. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Uncompress.py +0 -0
  348. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UniqueRows.py +0 -0
  349. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Unzip.py +0 -0
  350. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UpdateOperationalVars.py +0 -0
  351. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadTo.py +0 -0
  352. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToS3.py +0 -0
  353. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToSFTP.py +0 -0
  354. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UploadToSharepoint.py +0 -0
  355. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/UserFunc.py +0 -0
  356. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/VideoUnderstanding.py +0 -0
  357. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/VivaTracker.py +0 -0
  358. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/WSDLClient.py +0 -0
  359. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Wait.py +0 -0
  360. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Walmart.py +0 -0
  361. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/WorkdayReport.py +0 -0
  362. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Workplace.py +0 -0
  363. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/XMLToPandas.py +0 -0
  364. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zammad/__init__.py +0 -0
  365. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zammad/models.py +0 -0
  366. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/Zoom.py +0 -0
  367. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ZoomInfoScraper.py +0 -0
  368. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/ZoomUs.py +0 -0
  369. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/__init__.py +0 -0
  370. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/__init__.py +0 -0
  371. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/cache.py +0 -0
  372. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/fetch.py +0 -0
  373. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/resolver.py +0 -0
  374. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/_census/transform.py +0 -0
  375. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/abstract.py +0 -0
  376. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/flow.py +0 -0
  377. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/__init__.py +0 -0
  378. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/date_sequence.py +0 -0
  379. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/gendata/static_list.py +0 -0
  380. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/google.py +0 -0
  381. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/group.py +0 -0
  382. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/py.typed +0 -0
  383. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/reviewscrap.py +0 -0
  384. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tAddTotalRow.py +0 -0
  385. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tAutoincrement.py +0 -0
  386. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tConcat.py +0 -0
  387. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tConditionalMultiply.py +0 -0
  388. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tCrosstab.py +0 -0
  389. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFilter.py +0 -0
  390. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFilterCommonValues.py +0 -0
  391. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tFrequencyWeights.py +0 -0
  392. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tGroup.py +0 -0
  393. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tJoin.py +0 -0
  394. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/__init__.py +0 -0
  395. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMap/functions.py +0 -0
  396. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMelt.py +0 -0
  397. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tMerge.py +0 -0
  398. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tOrder.py +0 -0
  399. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPandas.py +0 -0
  400. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPivot.py +0 -0
  401. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tPluckCols.py +0 -0
  402. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/tUnnest.py +0 -0
  403. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/components/user.py +0 -0
  404. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/__init__.py +0 -0
  405. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/categories.json +0 -0
  406. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/cli.py +0 -0
  407. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ASPX.doc.json +0 -0
  408. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AddDataset.doc.json +0 -0
  409. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AutoTask.doc.json +0 -0
  410. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/AzureUsers.doc.json +0 -0
  411. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CallAnalysis.doc.json +0 -0
  412. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CallSummary.doc.json +0 -0
  413. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CompanyScraper.doc.json +0 -0
  414. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyFromS3.doc.json +0 -0
  415. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyFromSharepoint.doc.json +0 -0
  416. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToBigQuery.doc.json +0 -0
  417. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToMongoDB.doc.json +0 -0
  418. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToPg.doc.json +0 -0
  419. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToRethink.doc.json +0 -0
  420. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToS3.doc.json +0 -0
  421. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CopyToSharepoint.doc.json +0 -0
  422. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/CustomerSatisfaction.doc.json +0 -0
  423. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DataInput.doc.json +0 -0
  424. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DateList.doc.json +0 -0
  425. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DialPad.doc.json +0 -0
  426. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromD2L.doc.json +0 -0
  427. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromFTP.doc.json +0 -0
  428. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromIMAP.doc.json +0 -0
  429. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromS3.doc.json +0 -0
  430. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSFTP.doc.json +0 -0
  431. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSharepoint.doc.json +0 -0
  432. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSmartSheet.doc.json +0 -0
  433. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/DownloadFromSmartsheet.doc.json +0 -0
  434. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/EmployeeEvaluation.doc.json +0 -0
  435. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ExecuteSQL.doc.json +0 -0
  436. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ExtractTranscript.doc.json +0 -0
  437. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileCopy.doc.json +0 -0
  438. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileDelete.doc.json +0 -0
  439. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileExists.doc.json +0 -0
  440. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileIteratorDelete.doc.json +0 -0
  441. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileList.doc.json +0 -0
  442. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileOpen.doc.json +0 -0
  443. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileRead.doc.json +0 -0
  444. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FileRename.doc.json +0 -0
  445. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FilterIf.doc.json +0 -0
  446. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/FilterRows.doc.json +0 -0
  447. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleA4.doc.json +0 -0
  448. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleGeoCoding.doc.json +0 -0
  449. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/GoogleSearch.doc.json +0 -0
  450. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/HTTPClient.doc.json +0 -0
  451. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ICIMS.doc.json +0 -0
  452. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/IteratorBase.doc.json +0 -0
  453. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/LeadIQ.doc.json +0 -0
  454. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MS365Usage.doc.json +0 -0
  455. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MSTeamsMessages.doc.json +0 -0
  456. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MergeFileList.doc.json +0 -0
  457. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/MergeFiles.doc.json +0 -0
  458. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/NetworkNinjaClaims.doc.json +0 -0
  459. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Odoo.doc.json +0 -0
  460. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OdooInjector.doc.json +0 -0
  461. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenFromXML.doc.json +0 -0
  462. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenWithBase.doc.json +0 -0
  463. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/OpenWithPandas.doc.json +0 -0
  464. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PGPDecrypt.doc.json +0 -0
  465. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PandasIterator.doc.json +0 -0
  466. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PandasToFile.doc.json +0 -0
  467. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Paradox.doc.json +0 -0
  468. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ParamIterator.doc.json +0 -0
  469. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PlacerStores.doc.json +0 -0
  470. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Pokemon.doc.json +0 -0
  471. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PositiveBot.doc.json +0 -0
  472. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PowerPointSlide.doc.json +0 -0
  473. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/PrintMessage.doc.json +0 -0
  474. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductCompliant.doc.json +0 -0
  475. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductPricing.doc.json +0 -0
  476. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ProductReportBot.doc.json +0 -0
  477. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QS.doc.json +0 -0
  478. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryIterator.doc.json +0 -0
  479. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryToInsert.doc.json +0 -0
  480. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/QueryToPandas.doc.json +0 -0
  481. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/RESTClient.doc.json +0 -0
  482. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/RunShell.doc.json +0 -0
  483. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SAPExtraction.doc.json +0 -0
  484. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Sassie.doc.json +0 -0
  485. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ScrapTool.doc.json +0 -0
  486. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SendNotify.doc.json +0 -0
  487. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SentimentAnalysis.doc.json +0 -0
  488. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ServiceScrapper.doc.json +0 -0
  489. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SetVariables.doc.json +0 -0
  490. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SplitPDF.doc.json +0 -0
  491. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SubTask.doc.json +0 -0
  492. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/SuiteCRM.doc.json +0 -0
  493. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableDelete.doc.json +0 -0
  494. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableInput.doc.json +0 -0
  495. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableOutput.doc.json +0 -0
  496. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TableSchema.doc.json +0 -0
  497. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ThumbnailGenerator.doc.json +0 -0
  498. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TransformRows.doc.json +0 -0
  499. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/TransposeRows.doc.json +0 -0
  500. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UnGzip.doc.json +0 -0
  501. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Uncompress.doc.json +0 -0
  502. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UniqueRows.doc.json +0 -0
  503. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Unzip.doc.json +0 -0
  504. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToS3.doc.json +0 -0
  505. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToSFTP.doc.json +0 -0
  506. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UploadToSharepoint.doc.json +0 -0
  507. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/UserFunc.doc.json +0 -0
  508. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/Zoom.doc.json +0 -0
  509. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/ZoomInfoScraper.doc.json +0 -0
  510. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tAutoincrement.doc.json +0 -0
  511. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tConcat.doc.json +0 -0
  512. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tConditionalMultiply.doc.json +0 -0
  513. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tCrosstab.doc.json +0 -0
  514. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tExplode.doc.json +0 -0
  515. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFilter.doc.json +0 -0
  516. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFilterCommonValues.doc.json +0 -0
  517. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tFrequencyWeights.doc.json +0 -0
  518. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tGroup.doc.json +0 -0
  519. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tJoin.doc.json +0 -0
  520. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tMap.doc.json +0 -0
  521. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tMelt.doc.json +0 -0
  522. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tOrder.doc.json +0 -0
  523. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tPivot.doc.json +0 -0
  524. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tPluckCols.doc.json +0 -0
  525. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/components/tUnnest.doc.json +0 -0
  526. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generated/index.json +0 -0
  527. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/generator.py +0 -0
  528. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/models.py +0 -0
  529. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/parser.py +0 -0
  530. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/schema.py +0 -0
  531. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/documentation/toolkit.py +0 -0
  532. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/download.py +0 -0
  533. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/__init__.py +0 -0
  534. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/__init__.py +0 -0
  535. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/abstract.py +0 -0
  536. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/__init__.py +0 -0
  537. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/colfunctions.py +0 -0
  538. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/alerts/functions.py +0 -0
  539. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/dummy.py +0 -0
  540. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/exec.py +0 -0
  541. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/__init__.py +0 -0
  542. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/base.py +0 -0
  543. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/copy.py +0 -0
  544. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/file/delete.py +0 -0
  545. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/__init__.py +0 -0
  546. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/client.py +0 -0
  547. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/credentials.py +0 -0
  548. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/interfaces/notifications.py +0 -0
  549. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/jira.py +0 -0
  550. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/log.py +0 -0
  551. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/logerr.py +0 -0
  552. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/notify.py +0 -0
  553. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/publish.py +0 -0
  554. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/sendfile.py +0 -0
  555. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/task.py +0 -0
  556. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/events/webhook.py +0 -0
  557. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/events/manager.py +0 -0
  558. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/exceptions.py +0 -0
  559. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/__init__.py +0 -0
  560. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/base.py +0 -0
  561. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/docker.py +0 -0
  562. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/events.py +0 -0
  563. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/exceptions.py +0 -0
  564. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/k8s.py +0 -0
  565. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/models.py +0 -0
  566. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/publish.py +0 -0
  567. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/qworker.py +0 -0
  568. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/registry.py +0 -0
  569. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/executors/resolver.py +0 -0
  570. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/__init__.py +0 -0
  571. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/abstract.py +0 -0
  572. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/component_docs.py +0 -0
  573. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/extensions/logging/__init__.py +0 -0
  574. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/__init__.py +0 -0
  575. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/agent.py +0 -0
  576. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/composer.py +0 -0
  577. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/parser.py +0 -0
  578. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/factory/validator.py +0 -0
  579. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/handlers/__init__.py +0 -0
  580. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/handlers/component.py +0 -0
  581. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/__init__.py +0 -0
  582. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/__init__.py +0 -0
  583. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/abstract.py +0 -0
  584. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/dummy.py +0 -0
  585. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/jira.py +0 -0
  586. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/rest.py +0 -0
  587. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/sampledata.py +0 -0
  588. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/sensor.py +0 -0
  589. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/task.py +0 -0
  590. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/ticket.py +0 -0
  591. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/zammad.py +0 -0
  592. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/actions/zoom_event.py +0 -0
  593. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/hook.py +0 -0
  594. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/models.py +0 -0
  595. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/service.py +0 -0
  596. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/step.py +0 -0
  597. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/__init__.py +0 -0
  598. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/base.py +0 -0
  599. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/__init__.py +0 -0
  600. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/base.py +0 -0
  601. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/mqtt.py +0 -0
  602. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/rabbitmq.py +0 -0
  603. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/redis.py +0 -0
  604. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/brokers/sqs.py +0 -0
  605. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/fs.py +0 -0
  606. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/http.py +0 -0
  607. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/imap.py +0 -0
  608. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/jira.py +0 -0
  609. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/mail.py +0 -0
  610. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/postgres.py +0 -0
  611. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/responses/__init__.py +0 -0
  612. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/responses/base.py +0 -0
  613. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/sharepoint.py +0 -0
  614. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/ssh.py +0 -0
  615. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/tagged.py +0 -0
  616. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/upload.py +0 -0
  617. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/watch.py +0 -0
  618. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/web.py +0 -0
  619. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/hooks/types/zoom.py +0 -0
  620. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/AzureClient.py +0 -0
  621. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/AzureGraph.py +0 -0
  622. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Boto3Client.py +0 -0
  623. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/DropboxClient.py +0 -0
  624. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ExcelHandler.py +0 -0
  625. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/FTPClient.py +0 -0
  626. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleCalendar.py +0 -0
  627. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleClient.py +0 -0
  628. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleDrive.py +0 -0
  629. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleGCS.py +0 -0
  630. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleGeocoding.py +0 -0
  631. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleLang.py +0 -0
  632. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GooglePub.py +0 -0
  633. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/GoogleSheet.py +0 -0
  634. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/IMAPClient.py +0 -0
  635. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/LLMClient.py +0 -0
  636. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/O365Calendar.py +0 -0
  637. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/O365Client.py +0 -0
  638. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/OneDrive.py +0 -0
  639. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/Outlook.py +0 -0
  640. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ParrotBot.py +0 -0
  641. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ParrotTool.py +0 -0
  642. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/SOAPClient.py +0 -0
  643. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/SSHClient.py +0 -0
  644. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/abstract.py +0 -0
  645. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/azure_component.py +0 -0
  646. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/azureauth.py +0 -0
  647. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/base_action.py +0 -0
  648. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/base_loop.py +0 -0
  649. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/cache.py +0 -0
  650. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/client.py +0 -0
  651. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/compress.py +0 -0
  652. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_from_base.py +0 -0
  653. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_to.py +0 -0
  654. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/copy_to_file_base.py +0 -0
  655. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/credentials.py +0 -0
  656. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/d2l.py +0 -0
  657. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/__init__.py +0 -0
  658. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/db.py +0 -0
  659. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/documentdb.py +0 -0
  660. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/databases/rethink.py +0 -0
  661. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/__init__.py +0 -0
  662. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/abstract.py +0 -0
  663. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/arrow.py +0 -0
  664. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/dt.py +0 -0
  665. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/pandas.py +0 -0
  666. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/dataframes/polars.py +0 -0
  667. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/db.py +0 -0
  668. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/db_client.py +0 -0
  669. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/download_from.py +0 -0
  670. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/env.py +0 -0
  671. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/file_base.py +0 -0
  672. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/flow.py +0 -0
  673. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/func.py +0 -0
  674. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/google_base.py +0 -0
  675. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/group.py +0 -0
  676. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/locale.py +0 -0
  677. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/log.py +0 -0
  678. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/mask.py +0 -0
  679. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/notification.py +0 -0
  680. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/__init__.py +0 -0
  681. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/agent.py +0 -0
  682. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/parrot/client.py +0 -0
  683. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/pipelines/__init__.py +0 -0
  684. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/pipelines/parrot.py +0 -0
  685. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/playwright.py +0 -0
  686. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/powerpoint.py +0 -0
  687. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/ppt.py +0 -0
  688. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/py.typed +0 -0
  689. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/qs.py +0 -0
  690. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/qs_base.py +0 -0
  691. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/result.py +0 -0
  692. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/sassie.py +0 -0
  693. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/__init__.py +0 -0
  694. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/options.py +0 -0
  695. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium/service.py +0 -0
  696. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/selenium_service.py +0 -0
  697. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/smartsheet.py +0 -0
  698. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/stat.py +0 -0
  699. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/t_pandas.py +0 -0
  700. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/table_base.py +0 -0
  701. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/task.py +0 -0
  702. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/teams.py +0 -0
  703. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/template.py +0 -0
  704. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/tickets.py +0 -0
  705. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/upload_to.py +0 -0
  706. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/user.py +0 -0
  707. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/__init__.py +0 -0
  708. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/abstract.py +0 -0
  709. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/vectorstores/milvus.py +0 -0
  710. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/applicant.py +0 -0
  711. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/candidate.py +0 -0
  712. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/cost_center.py +0 -0
  713. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/custom_punch_field_report.py +0 -0
  714. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_posting.py +0 -0
  715. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_posting_site.py +0 -0
  716. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/job_requisition.py +0 -0
  717. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/location.py +0 -0
  718. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/location_hierarchy_assignments.py +0 -0
  719. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/organizations.py +0 -0
  720. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/reference.py +0 -0
  721. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/time_off_balance.py +0 -0
  722. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/time_request.py +0 -0
  723. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/models/worker.py +0 -0
  724. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/__init__.py +0 -0
  725. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/applicant_parsers.py +0 -0
  726. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/candidate_parsers.py +0 -0
  727. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/cost_center_parsers.py +0 -0
  728. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/custom_punch_field_report_parsers.py +0 -0
  729. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_posting_parsers.py +0 -0
  730. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/job_posting_site_parsers.py +0 -0
  731. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/location_hierarchy_assignments_parsers.py +0 -0
  732. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/location_parsers.py +0 -0
  733. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/organization_parsers.py +0 -0
  734. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/reference_parsers.py +0 -0
  735. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_block_parsers.py +0 -0
  736. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_off_balance_parsers.py +0 -0
  737. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/time_request_parsers.py +0 -0
  738. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/parsers/worker_parsers.py +0 -0
  739. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/utils/__init__.py +0 -0
  740. {flowtask-5.12.0/flowtask/components/Workday → flowtask-5.12.1/flowtask/interfaces/workday}/utils/utils.py +0 -0
  741. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/zammad.py +0 -0
  742. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/interfaces/zoom.py +0 -0
  743. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/models.py +0 -0
  744. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/__init__.py +0 -0
  745. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/_yaml.pyx +0 -0
  746. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/argparser.py +0 -0
  747. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/base.pxd +0 -0
  748. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/base.pyx +0 -0
  749. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/json.pyx +0 -0
  750. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/maps.py +0 -0
  751. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/__init__.py +0 -0
  752. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/checker.py +0 -0
  753. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/detector.py +0 -0
  754. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/registry.py +0 -0
  755. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/report.py +0 -0
  756. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/syntax/schema.py +0 -0
  757. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/parsers/toml.pyx +0 -0
  758. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/__init__.py +0 -0
  759. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/components_/__init__.py +0 -0
  760. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/handler/__init__.py +0 -0
  761. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/importer.py +0 -0
  762. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/plugins/sources/__init__.py +0 -0
  763. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/__init__.py +0 -0
  764. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/functions.py +0 -0
  765. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/__init__.py +0 -0
  766. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/manager.py +0 -0
  767. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/models.py +0 -0
  768. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/handlers/service.py +0 -0
  769. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/notifications.py +0 -0
  770. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/scheduler/scheduler.py +0 -0
  771. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/__init__.py +0 -0
  772. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/bots/__init__.py +0 -0
  773. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/bots/telegram.py +0 -0
  774. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/__init__.py +0 -0
  775. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/manager.py +0 -0
  776. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/model.py +0 -0
  777. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/files/service.py +0 -0
  778. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/jira/__init__.py +0 -0
  779. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/jira/jira_actions.py +0 -0
  780. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/__init__.py +0 -0
  781. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/launcher.py +0 -0
  782. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/manager.py +0 -0
  783. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/service.py +0 -0
  784. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/task_manager.py +0 -0
  785. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/services/tasks/tasks.py +0 -0
  786. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/__init__.py +0 -0
  787. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/exceptions.py +0 -0
  788. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/__init__.py +0 -0
  789. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/abstract.py +0 -0
  790. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/files/filesystem.py +0 -0
  791. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/__init__.py +0 -0
  792. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/abstract.py +0 -0
  793. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/database.py +0 -0
  794. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/filesystem.py +0 -0
  795. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/github.py +0 -0
  796. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/memory.py +0 -0
  797. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/storages/tasks/row.py +0 -0
  798. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/__init__.py +0 -0
  799. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/abstract.py +0 -0
  800. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/command.py +0 -0
  801. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/pile.py +0 -0
  802. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/py.typed +0 -0
  803. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tasks/workers.py +0 -0
  804. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/template/__init__.py +0 -0
  805. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/tests.py +0 -0
  806. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/types/__init__.py +0 -0
  807. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/types/typedefs.pyx +0 -0
  808. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/__init__.py +0 -0
  809. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/constants.py +0 -0
  810. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/encoders.py +0 -0
  811. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/executor.py +0 -0
  812. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/functions.pyx +0 -0
  813. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/json.pxi +0 -0
  814. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/json.pyx +0 -0
  815. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/mail.py +0 -0
  816. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/parseqs.pyx +0 -0
  817. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/stats.py +0 -0
  818. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/transformations.py +0 -0
  819. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/uv.py +0 -0
  820. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask/utils/validators.py +0 -0
  821. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/dependency_links.txt +0 -0
  822. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/entry_points.txt +0 -0
  823. {flowtask-5.12.0 → flowtask-5.12.1}/flowtask.egg-info/top_level.txt +0 -0
  824. {flowtask-5.12.0 → flowtask-5.12.1}/setup.cfg +0 -0
  825. {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.0
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==6.0.0
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
- bq_type = type_mapping.get(str(dtype), 'STRING')
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
+ )