recurvedata-lib 0.1.492__tar.gz → 0.1.496__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.

Potentially problematic release.


This version of recurvedata-lib might be problematic. Click here for more details.

Files changed (335) hide show
  1. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/PKG-INFO +2 -1
  2. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/pyproject.toml +1 -292
  3. recurvedata_lib-0.1.496/recurvedata/__version__.py +1 -0
  4. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/client/client.py +7 -94
  5. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/config_schema.py +20 -0
  6. recurvedata_lib-0.1.496/recurvedata/connectors/connectors/wecom.py +66 -0
  7. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/dbapi.py +17 -9
  8. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/airflow_db_process.py +25 -15
  9. recurvedata_lib-0.1.492/recurvedata/__version__.py +0 -1
  10. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/.gitignore +0 -0
  11. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/README.md +0 -0
  12. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/__init__.py +0 -0
  13. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/client/__init__.py +0 -0
  14. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/client/server_client.py +0 -0
  15. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/config.py +0 -0
  16. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/__init__.py +0 -0
  17. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/_register.py +0 -0
  18. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/base.py +0 -0
  19. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/__init__.py +0 -0
  20. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/aliyun_access_key.py +0 -0
  21. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/auth.py +0 -0
  22. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/azure_blob.py +0 -0
  23. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/azure_synapse.py +0 -0
  24. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/bigquery.py +0 -0
  25. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/clickhouse.py +0 -0
  26. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/dingtalk.py +0 -0
  27. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/doris.py +0 -0
  28. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/es.py +0 -0
  29. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/feishu.py +0 -0
  30. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/ftp.py +0 -0
  31. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/generic.py +0 -0
  32. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/google_cloud_storage.py +0 -0
  33. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/google_service_account.py +0 -0
  34. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/hive.py +0 -0
  35. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/impala.py +0 -0
  36. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/jenkins.py +0 -0
  37. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/mail.py +0 -0
  38. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/microsoft_fabric.py +0 -0
  39. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/mongo.py +0 -0
  40. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/mssql.py +0 -0
  41. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/mysql.py +0 -0
  42. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/n8n.py +0 -0
  43. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/oss.py +0 -0
  44. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/owncloud.py +0 -0
  45. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/phoenix.py +0 -0
  46. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/postgres.py +0 -0
  47. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/python.py +0 -0
  48. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/redshift.py +0 -0
  49. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/s3.py +0 -0
  50. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/sftp.py +0 -0
  51. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/slack.py +0 -0
  52. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/spark.py +0 -0
  53. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/starrocks.py +0 -0
  54. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/tencent_cos.py +0 -0
  55. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/connectors/tidb.py +0 -0
  56. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/const.py +0 -0
  57. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/datasource.py +0 -0
  58. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/fs.py +0 -0
  59. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/ftp.py +0 -0
  60. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/object_store.py +0 -0
  61. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/pigeon.py +0 -0
  62. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/proxy.py +0 -0
  63. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/service.py +0 -0
  64. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/connectors/utils.py +0 -0
  65. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/consts.py +0 -0
  66. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/__init__.py +0 -0
  67. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/config.py +0 -0
  68. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/configurable.py +0 -0
  69. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/consts.py +0 -0
  70. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/templating.py +0 -0
  71. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/tracing.py +0 -0
  72. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/transformer.py +0 -0
  73. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/core/translation.py +0 -0
  74. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/client.py +0 -0
  75. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/consts.py +0 -0
  76. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/cosmos_utils.py +0 -0
  77. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/error_codes.py +0 -0
  78. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/schemas.py +0 -0
  79. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/service.py +0 -0
  80. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/dbt/utils.py +0 -0
  81. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/error_codes.py +0 -0
  82. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/exceptions.py +0 -0
  83. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/__init__.py +0 -0
  84. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/cli/__init__.py +0 -0
  85. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/cli/connector.py +0 -0
  86. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/cli/dbt.py +0 -0
  87. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/cli/main.py +0 -0
  88. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/cli/parameters.py +0 -0
  89. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/client.py +0 -0
  90. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/consts.py +0 -0
  91. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/debug_executor.py +0 -0
  92. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/executor.py +0 -0
  93. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/link_executor.py +0 -0
  94. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/models.py +0 -0
  95. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/schemas.py +0 -0
  96. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/service/__init__.py +0 -0
  97. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/service/connector.py +0 -0
  98. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/executors/utils.py +0 -0
  99. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/__init__.py +0 -0
  100. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/_factory.py +0 -0
  101. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/backends/__init__.py +0 -0
  102. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/backends/fsspec.py +0 -0
  103. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/backends/local.py +0 -0
  104. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/backends/oss.py +0 -0
  105. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/filestorage/interface.py +0 -0
  106. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/__init__.py +0 -0
  107. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/base.py +0 -0
  108. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/config.py +0 -0
  109. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/context.py +0 -0
  110. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/dbt_operator/__init__.py +0 -0
  111. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/dbt_operator/model_pipeline_link_operator.py +0 -0
  112. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/dbt_operator/operator.py +0 -0
  113. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/link_operator/__init__.py +0 -0
  114. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/link_operator/operator.py +0 -0
  115. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/models.py +0 -0
  116. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/notify_operator/__init__.py +0 -0
  117. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/notify_operator/operator.py +0 -0
  118. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/operator.py +0 -0
  119. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/python_operator/__init__.py +0 -0
  120. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/python_operator/operator.py +0 -0
  121. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/sensor_operator/__init__.py +0 -0
  122. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/sensor_operator/airflow_utils.py +0 -0
  123. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/sensor_operator/operator.py +0 -0
  124. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/spark_operator/__init__.py +0 -0
  125. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/spark_operator/operator.py +0 -0
  126. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/spark_operator/spark_sample.py +0 -0
  127. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/sql_operator/__init__.py +0 -0
  128. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/sql_operator/operator.py +0 -0
  129. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/task.py +0 -0
  130. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/__init__.py +0 -0
  131. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/const.py +0 -0
  132. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_aliyun_sls.py +0 -0
  133. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_sheet_task_base.py +0 -0
  134. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_cass.py +0 -0
  135. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_dbapi.py +0 -0
  136. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_es.py +0 -0
  137. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_feishu_sheet.py +0 -0
  138. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_ftp.py +0 -0
  139. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_google_sheet.py +0 -0
  140. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_mongodb.py +0 -0
  141. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_oss.py +0 -0
  142. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_python.py +0 -0
  143. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_s3.py +0 -0
  144. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/dump_task_sftp.py +0 -0
  145. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_aliyun_oss.py +0 -0
  146. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_azure_blob.py +0 -0
  147. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_azure_synapse.py +0 -0
  148. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_clickhouse.py +0 -0
  149. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_doris.py +0 -0
  150. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_email.py +0 -0
  151. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_es.py +0 -0
  152. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_filebrowser.py +0 -0
  153. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_ftp.py +0 -0
  154. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_google_bigquery.py +0 -0
  155. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_google_cloud_storage.py +0 -0
  156. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_google_sheet.py +0 -0
  157. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_hive.py +0 -0
  158. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_microsoft_fabric.py +0 -0
  159. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_mssql.py +0 -0
  160. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_mysql.py +0 -0
  161. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_owncloud.py +0 -0
  162. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_postgresql.py +0 -0
  163. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_qcloud_cos.py +0 -0
  164. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_recurve_data_prep.py +0 -0
  165. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_redshift.py +0 -0
  166. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_s3.py +0 -0
  167. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_sftp.py +0 -0
  168. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_starrocks.py +0 -0
  169. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/load_task_yicrowds.py +0 -0
  170. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/mixin.py +0 -0
  171. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/operator.py +0 -0
  172. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/task.py +0 -0
  173. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/transfer_operator/utils.py +0 -0
  174. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/ui.py +0 -0
  175. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/utils/__init__.py +0 -0
  176. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/utils/file_factory.py +0 -0
  177. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/utils/fs.py +0 -0
  178. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/utils/lineage.py +0 -0
  179. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/operators/web_init.py +0 -0
  180. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/__init__.py +0 -0
  181. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/_registry.py +0 -0
  182. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/aliyun_oss.py +0 -0
  183. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/awss3.py +0 -0
  184. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/azure_blob.py +0 -0
  185. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/azure_synapse.py +0 -0
  186. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/cass.py +0 -0
  187. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/clickhouse.py +0 -0
  188. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/clickhouse_native.py +0 -0
  189. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/dbapi.py +0 -0
  190. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/doris.py +0 -0
  191. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/es.py +0 -0
  192. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/feishu.py +0 -0
  193. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/ftp.py +0 -0
  194. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/google_bigquery.py +0 -0
  195. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/google_cloud_storage.py +0 -0
  196. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/hbase_phoenix.py +0 -0
  197. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/hdfs.py +0 -0
  198. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/hive_impala.py +0 -0
  199. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/microsoft_fabric.py +0 -0
  200. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/mongodb.py +0 -0
  201. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/mssql.py +0 -0
  202. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/mysql.py +0 -0
  203. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/owncloud.py +0 -0
  204. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/postgresql.py +0 -0
  205. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/power_bi.py +0 -0
  206. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/qcloud_cos.py +0 -0
  207. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/redshift.py +0 -0
  208. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/sftp.py +0 -0
  209. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/sqlite.py +0 -0
  210. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/starrocks.py +0 -0
  211. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/connector/tableau.py +0 -0
  212. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/const.py +0 -0
  213. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/csv.py +0 -0
  214. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/docs/datasources-example.json +0 -0
  215. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/docs/images/pigeon_design.png +0 -0
  216. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/docs/lightweight-data-sync-solution.md +0 -0
  217. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/__init__.py +0 -0
  218. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/aliyun_sls.py +0 -0
  219. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/base.py +0 -0
  220. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/cass.py +0 -0
  221. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/dbapi.py +0 -0
  222. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/es.py +0 -0
  223. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/ftp.py +0 -0
  224. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/dumper/mongodb.py +0 -0
  225. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/handler/__init__.py +0 -0
  226. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/handler/base.py +0 -0
  227. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/handler/csv_handler.py +0 -0
  228. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/__init__.py +0 -0
  229. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/base.py +0 -0
  230. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_azure_synapse.py +0 -0
  231. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_clickhouse.py +0 -0
  232. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_doris.py +0 -0
  233. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_es.py +0 -0
  234. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_google_bigquery.py +0 -0
  235. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_hive.py +0 -0
  236. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_microsoft_fabric.py +0 -0
  237. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_mssql.py +0 -0
  238. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_mysql.py +0 -0
  239. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_postgresql.py +0 -0
  240. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_redshift.py +0 -0
  241. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/loader/csv_to_starrocks.py +0 -0
  242. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/meta.py +0 -0
  243. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/row_factory.py +0 -0
  244. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/schema/__init__.py +0 -0
  245. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/schema/types.py +0 -0
  246. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/sync.py +0 -0
  247. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/transformer.py +0 -0
  248. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/__init__.py +0 -0
  249. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/bloomfilter.py +0 -0
  250. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/date_time.py +0 -0
  251. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/escape.py +0 -0
  252. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/fs.py +0 -0
  253. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/json.py +0 -0
  254. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/keyed_tuple.py +0 -0
  255. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/mp.py +0 -0
  256. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/sql.py +0 -0
  257. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/pigeon/utils/timing.py +0 -0
  258. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/provider_manager.py +0 -0
  259. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/providers/__init__.py +0 -0
  260. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/providers/dbapi/__init__.py +0 -0
  261. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/providers/flywheel/__init__.py +0 -0
  262. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/providers/mysql/__init__.py +0 -0
  263. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/__init__.py +0 -0
  264. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/airflow.py +0 -0
  265. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/airflow_operators.py +0 -0
  266. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/airflow_plugin.py +0 -0
  267. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/airflow_trigger_dag_patch.py +0 -0
  268. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/base.py +0 -0
  269. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/cli.py +0 -0
  270. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/client.py +0 -0
  271. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/consts.py +0 -0
  272. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/debug_celery.py +0 -0
  273. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/model.py +0 -0
  274. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/schemas.py +0 -0
  275. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/service.py +0 -0
  276. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/system_dags.py +0 -0
  277. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/task_status.py +0 -0
  278. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schedulers/utils.py +0 -0
  279. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schema/__init__.py +0 -0
  280. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schema/field.py +0 -0
  281. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schema/schema.py +0 -0
  282. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schema/types.py +0 -0
  283. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/schema.py +0 -0
  284. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/__init__.py +0 -0
  285. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/app.py +0 -0
  286. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/connector/__init__.py +0 -0
  287. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/connector/api.py +0 -0
  288. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/connector/schemas.py +0 -0
  289. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/__init__.py +0 -0
  290. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/api.py +0 -0
  291. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/client.py +0 -0
  292. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/consts.py +0 -0
  293. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/schemas.py +0 -0
  294. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/data_service/service.py +0 -0
  295. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/dbt/__init__.py +0 -0
  296. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/dbt/api.py +0 -0
  297. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/error_code.py +0 -0
  298. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/exceptions.py +0 -0
  299. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/executor/__init__.py +0 -0
  300. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/executor/api.py +0 -0
  301. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/executor/schemas.py +0 -0
  302. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/executor/service.py +0 -0
  303. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/main.py +0 -0
  304. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/schedulers/__init__.py +0 -0
  305. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/schedulers/api.py +0 -0
  306. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/schedulers/schemas.py +0 -0
  307. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/server/schemas.py +0 -0
  308. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/__init__.py +0 -0
  309. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/_typer.py +0 -0
  310. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/attrdict.py +0 -0
  311. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/command_helper.py +0 -0
  312. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/compat.py +0 -0
  313. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/compression.py +0 -0
  314. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/crontab.py +0 -0
  315. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/crypto_util.py +0 -0
  316. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/dataclass.py +0 -0
  317. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/date_time.py +0 -0
  318. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/dispatch.py +0 -0
  319. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/email_util.py +0 -0
  320. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/files.py +0 -0
  321. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/helpers.py +0 -0
  322. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/httputil.py +0 -0
  323. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/imports.py +0 -0
  324. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/json.py +0 -0
  325. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/log.py +0 -0
  326. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/log_capture.py +0 -0
  327. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/mp.py +0 -0
  328. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/normalizer.py +0 -0
  329. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/redis_lock.py +0 -0
  330. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/registry.py +0 -0
  331. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/shell.py +0 -0
  332. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/singleton.py +0 -0
  333. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/sql.py +0 -0
  334. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/timeout.py +0 -0
  335. {recurvedata_lib-0.1.492 → recurvedata_lib-0.1.496}/recurvedata/utils/tracing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: recurvedata-lib
3
- Version: 0.1.492
3
+ Version: 0.1.496
4
4
  Summary: Common Library for ReOrc Data Platform
5
5
  Author-email: Reorc Team <contact@recurvedata.com>
6
6
  Requires-Dist: croniter
@@ -77,6 +77,7 @@ Requires-Dist: dbt-duckdb==1.8.4; extra == 'dbt'
77
77
  Requires-Dist: dbt-extractor==0.5.1; extra == 'dbt'
78
78
  Requires-Dist: dbt-fabric==1.9.4; extra == 'dbt'
79
79
  Requires-Dist: dbt-impala==1.8.0; extra == 'dbt'
80
+ Requires-Dist: dbt-mysql==1.8.0+recurve.1; extra == 'dbt'
80
81
  Requires-Dist: dbt-postgres==1.8.2; extra == 'dbt'
81
82
  Requires-Dist: dbt-redshift==1.8.1; extra == 'dbt'
82
83
  Requires-Dist: dbt-semantic-interfaces==0.5.1; extra == 'dbt'
@@ -114,298 +114,6 @@ type = "confirm"
114
114
  name = "show_message"
115
115
  message = "Do you want to add body message in commit?"
116
116
 
117
- [dependency-groups]
118
- public = [
119
- "adlfs==2025.8.0",
120
- "aenum==3.1.16",
121
- "agate==1.9.1",
122
- "aiobotocore==2.24.2",
123
- "aiohappyeyeballs==2.6.1",
124
- "aiohttp==3.10.5",
125
- "aioitertools==0.12.0",
126
- "aiooss2==0.2.11",
127
- "aiosignal==1.4.0",
128
- "aiosmtplib==4.0.2",
129
- "alembic==1.16.5",
130
- "aliyun-log-python-sdk==0.9.32",
131
- "aliyun-python-sdk-core==2.16.0",
132
- "aliyun-python-sdk-kms==2.16.5",
133
- "annotated-types==0.7.0",
134
- "anyio==4.11.0",
135
- "apache-airflow==2.10.3",
136
- "apache-airflow-providers-common-compat==1.7.4",
137
- "apache-airflow-providers-common-io==1.6.3",
138
- "apache-airflow-providers-common-sql==1.28.1",
139
- "apache-airflow-providers-fab==1.5.3",
140
- "apache-airflow-providers-ftp==3.13.2",
141
- "apache-airflow-providers-http==5.3.2",
142
- "apache-airflow-providers-imap==3.9.2",
143
- "apache-airflow-providers-smtp==2.3.1",
144
- "apache-airflow-providers-sqlite==4.1.2",
145
- "apispec==6.8.4",
146
- "argcomplete==3.6.2",
147
- "asgiref==3.9.2",
148
- "asn1crypto==1.5.1",
149
- "astronomer-cosmos==1.6.0",
150
- "asynch==0.2.4",
151
- "attrs==25.3.0",
152
- "azure-core==1.35.1",
153
- "azure-datalake-store==0.0.53",
154
- "azure-identity==1.25.0",
155
- "azure-storage-blob==12.26.0",
156
- "babel==2.17.0",
157
- "backoff==2.2.1",
158
- "bcrypt==5.0.0",
159
- "beautifulsoup4==4.13.5",
160
- "bitarray==3.7.1",
161
- "blinker==1.9.0",
162
- "boto3==1.40.18",
163
- "botocore==1.40.18",
164
- "cachelib==0.13.0",
165
- "cachetools==5.5.2",
166
- "certifi==2025.8.3",
167
- "cffi==2.0.0",
168
- "chardet==5.2.0",
169
- "charset-normalizer==3.4.3",
170
- "ciso8601==2.3.3",
171
- "click==8.3.0",
172
- "clickclick==20.10.2",
173
- "clickhouse-cityhash==1.0.2.4",
174
- "clickhouse-driver==0.2.9",
175
- "clickhouse-sqlalchemy==0.2.9",
176
- "colorama==0.4.6",
177
- "colorlog==6.9.0",
178
- "configupdater==3.2",
179
- "connexion==2.14.2",
180
- "cos-python-sdk-v5==1.9.38",
181
- "crcmod==1.7",
182
- "cron-descriptor==2.0.6",
183
- "croniter==6.0.0",
184
- "cryptography==46.0.1",
185
- "cssselect==1.3.0",
186
- "cssutils==2.11.1",
187
- "cython==3.1.4",
188
- "cytoolz==1.0.1",
189
- "daff==1.4.2",
190
- "dateparser==1.2.2",
191
- "db-dtypes==1.4.3",
192
- "dbt-adapters==1.9.0",
193
- "dbt-bigquery==1.8.3",
194
- "dbt-common==1.12.0",
195
- "dbt-core==1.8.0",
196
- "dbt-doris==0.4.0",
197
- "dbt-duckdb==1.8.4",
198
- "dbt-extractor==0.6.0",
199
- "dbt-fabric==1.9.6",
200
- "dbt-impala==1.8.0",
201
- "dbt-postgres==1.8.2",
202
- "dbt-redshift==1.8.1",
203
- "dbt-semantic-interfaces==0.5.1",
204
- "dbt-starrocks==1.7.0",
205
- "deepdiff==7.0.1",
206
- "deprecated==1.2.18",
207
- "dill==0.4.0",
208
- "distlib==0.4.0",
209
- "dnspython==2.8.0",
210
- "duckdb==1.4.0",
211
- "elastic-transport==9.1.0",
212
- "elasticsearch==9.1.1",
213
- "email-validator==2.3.0",
214
- "emails==0.6",
215
- "et-xmlfile==2.0.0",
216
- "fastapi==0.117.1",
217
- "filelock==3.19.1",
218
- "flask==2.2.5",
219
- "flask-appbuilder==4.5.3",
220
- "flask-babel==2.0.0",
221
- "flask-caching==2.3.1",
222
- "flask-jwt-extended==4.7.1",
223
- "flask-limiter==3.13",
224
- "flask-login==0.6.3",
225
- "flask-session==0.5.0",
226
- "flask-sqlalchemy==2.5.1",
227
- "flask-wtf==1.2.2",
228
- "frozenlist==1.7.0",
229
- "fsspec[adl,s3,sftp]==2025.9.0",
230
- "future==1.0.0",
231
- "google-api-core==2.24.0",
232
- "google-auth==2.40.3",
233
- "google-auth-oauthlib==1.2.2",
234
- "google-cloud-bigquery-storage==2.33.1",
235
- "google-cloud-bigquery[bqstorage]==3.38.0",
236
- "google-cloud-core==2.4.3",
237
- "google-cloud-dataproc==5.22.0",
238
- "google-cloud-storage==2.19.0",
239
- "google-crc32c==1.7.1",
240
- "google-re2==1.1.20250805",
241
- "google-resumable-media==2.7.2",
242
- "googleapis-common-protos==1.70.0",
243
- "greenlet==3.2.4 ; platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'",
244
- "grpc-google-iam-v1==0.14.2",
245
- "grpcio==1.75.0",
246
- "grpcio-status==1.62.3",
247
- "gspread==6.2.1",
248
- "gunicorn==23.0.0",
249
- "h11==0.16.0",
250
- "httpcore==1.0.9",
251
- "httpx==0.28.1",
252
- "humanize==4.13.0",
253
- "idna==3.10",
254
- "importlib-metadata==6.11.0",
255
- "impyla==0.18.0",
256
- "inflection==0.5.1",
257
- "invoke==2.2.0",
258
- "isodate==0.6.1",
259
- "itsdangerous==2.2.0",
260
- "jinja2==3.1.6",
261
- "jmespath==0.10.0",
262
- "jsonschema==4.25.1",
263
- "jsonschema-specifications==2025.9.1",
264
- "larksuite-oapi==1.0.34",
265
- "lazy-object-proxy==1.12.0",
266
- "leather==0.4.0",
267
- "leb128==1.0.8",
268
- "limits==5.5.0",
269
- "linkify-it-py==2.0.3",
270
- "lockfile==0.12.2",
271
- "logbook==1.5.3",
272
- "loguru==0.7.3",
273
- "lxml==6.0.2",
274
- "lz4==4.4.4",
275
- "mako==1.3.10",
276
- "markdown-it-py==4.0.0",
277
- "markupsafe==3.0.2",
278
- "marshmallow==3.26.1",
279
- "marshmallow-oneofschema==3.2.0",
280
- "marshmallow-sqlalchemy==0.28.2",
281
- "mashumaro==3.16",
282
- "mdit-py-plugins==0.5.0",
283
- "mdurl==0.1.2",
284
- "methodtools==0.4.7",
285
- "minimal-snowplow-tracker==0.0.2",
286
- "more-itertools==10.8.0",
287
- "msal==1.34.0",
288
- "msal-extensions==1.3.1",
289
- "msgpack==1.1.1",
290
- "multidict==6.6.4",
291
- "mysql-connector-python==8.2.0",
292
- "networkx==3.5",
293
- "numpy==2.3.3",
294
- "oauthlib==3.3.1",
295
- "openpyxl==3.1.5",
296
- "opentelemetry-api==1.37.0",
297
- "opentelemetry-exporter-otlp==1.15.0",
298
- "opentelemetry-exporter-otlp-proto-grpc==1.15.0",
299
- "opentelemetry-exporter-otlp-proto-http==1.15.0",
300
- "opentelemetry-proto==1.15.0",
301
- "opentelemetry-sdk==1.37.0",
302
- "opentelemetry-semantic-conventions==0.58b0",
303
- "ordered-set==4.1.0",
304
- "orjson==3.11.3",
305
- "oss2==2.18.4",
306
- "ossfs==2025.5.0",
307
- "packaging==25.0",
308
- "pandas==2.3.2",
309
- "pandas-gbq==0.29.2",
310
- "paramiko==4.0.0",
311
- "parsedatetime==2.6",
312
- "pathspec==0.12.1",
313
- "pendulum==3.1.0",
314
- "platformdirs==4.4.0",
315
- "pluggy==1.6.0",
316
- "premailer==3.10.0",
317
- "prison==0.2.1",
318
- "propcache==0.3.2",
319
- "proto-plus==1.26.1",
320
- "protobuf==4.21.12",
321
- "psutil==7.1.0",
322
- "psycopg2-binary==2.9.10",
323
- "pure-sasl==0.6.2",
324
- "pyarrow==21.0.0",
325
- "pyasn1==0.6.1",
326
- "pyasn1-modules==0.4.2",
327
- "pycparser==2.23 ; implementation_name != 'PyPy'",
328
- "pycryptodome==3.23.0",
329
- "pydantic==2.11.9",
330
- "pydantic-core==2.33.2",
331
- "pydata-google-auth==1.9.1",
332
- "pygments==2.19.2",
333
- "pyhive==0.7.0",
334
- "pyjwt==2.10.1",
335
- "pymongo==4.15.1",
336
- "pymysql==1.1.2",
337
- "pynacl==1.6.0",
338
- "pyocclient==0.6",
339
- "pyodbc==5.2.0",
340
- "python-daemon==3.1.2",
341
- "python-dateutil==2.9.0.post0",
342
- "python-decouple==3.8",
343
- "python-nvd3==0.16.0",
344
- "python-slugify==8.0.4",
345
- "pytimeparse==1.1.8",
346
- "pytz==2025.2",
347
- "pywebhdfs==0.4.1",
348
- "pyyaml==6.0.3",
349
- "redis==6.4.0",
350
- "redshift-connector==2.0.917",
351
- "referencing==0.36.2",
352
- "regex==2025.9.18",
353
- "requests==2.32.5",
354
- "requests-oauthlib==2.0.0",
355
- "requests-toolbelt==1.0.0",
356
- "rfc3339-validator==0.1.4",
357
- "rich==14.1.0",
358
- "rich-argparse==1.7.1",
359
- "rpds-py==0.27.1",
360
- "rsa==4.9.1",
361
- "s3fs==2025.9.0",
362
- "s3transfer==0.13.1",
363
- "scramp==1.4.6",
364
- "setproctitle==1.3.7",
365
- "setuptools==80.9.0",
366
- "shellingham==1.5.4",
367
- "six==1.17.0",
368
- "sniffio==1.3.1",
369
- "soupsieve==2.8",
370
- "sqlalchemy==1.4.54",
371
- "sqlalchemy-bigquery==1.15.0",
372
- "sqlalchemy-doris[pymysql]==0.2.2",
373
- "sqlalchemy-jsonfield==1.0.2",
374
- "sqlalchemy-redshift==0.8.14",
375
- "sqlalchemy-utils==0.42.0",
376
- "sqlglot==27.18.0",
377
- "sqlparse==0.5.3",
378
- "sshtunnel==0.4.0",
379
- "starlette==0.48.0",
380
- "tabulate==0.9.0",
381
- "tenacity==8.5.0",
382
- "termcolor==3.1.0",
383
- "text-unidecode==1.3",
384
- "thrift==0.16.0",
385
- "thrift-sasl==0.4.3",
386
- "toolz==1.0.0",
387
- "typer==0.19.2",
388
- "typing-extensions==4.15.0",
389
- "typing-inspection==0.4.1",
390
- "tzdata==2025.2",
391
- "tzlocal==5.3.1",
392
- "uc-micro-py==1.0.3",
393
- "ujson==5.11.0",
394
- "universal-pathlib==0.2.6",
395
- "urllib3==1.26.20",
396
- "uvicorn==0.37.0",
397
- "virtualenv==20.34.0",
398
- "werkzeug==2.2.3",
399
- "win32-setctime==1.2.0 ; sys_platform == 'win32'",
400
- "wirerope==1.0.0",
401
- "wrapt==1.17.3",
402
- "wtforms==3.2.1",
403
- "xmltodict==1.0.2",
404
- "yarl==1.20.1",
405
- "zipp==3.23.0",
406
- "zstd==1.5.7.2",
407
- ]
408
-
409
117
  [project.optional-dependencies]
410
118
  # Dependencies are managed through requirements files and automatically updated
411
119
  # See requirements/worker.in and requirements/dbt.in
@@ -655,6 +363,7 @@ dbt = [
655
363
  "dbt-redshift==1.8.1",
656
364
  "dbt-semantic-interfaces==0.5.1",
657
365
  "dbt-starrocks==1.7.0",
366
+ "dbt-mysql==1.8.0+recurve.1",
658
367
  "deepdiff==7.0.1",
659
368
  "deprecated==1.2.15",
660
369
  "distlib==0.3.9",
@@ -0,0 +1 @@
1
+ __version__ = "0.1.496"
@@ -1,8 +1,6 @@
1
1
  import json
2
2
  import logging
3
- import os
4
3
  import time
5
- from pathlib import Path
6
4
  from typing import Any, TypeVar, overload
7
5
 
8
6
  import httpx
@@ -26,90 +24,13 @@ class Client:
26
24
  config = AgentConfig.load()
27
25
  self.set_config(config)
28
26
 
29
- @property
30
- def is_offline_mode(self) -> bool:
31
- """Check if offline mode is enabled via environment variable"""
32
- return os.environ.get("RECURVE_OFFLINE_MODE", "").lower() in ("true", "1")
33
-
34
- @property
35
- def offline_data_path(self) -> Path:
36
- """Get the offline data directory path"""
37
- offline_path = os.environ.get("RECURVE_OFFLINE_DATA_PATH", "offline_data")
38
- return Path(offline_path)
39
-
40
27
  def set_config(self, config: AgentConfig):
41
28
  self._config = config
42
- # Only create HTTP client if not in offline mode
43
- if not self.is_offline_mode:
44
- self._client = httpx.Client(
45
- base_url=config.server_url,
46
- timeout=config.request_timeout,
47
- headers={"User-Agent": f"RecurveLib/{__version__}"},
48
- )
49
- else:
50
- self._client = None
51
-
52
- def _resolve_offline_file_path(self, path: str, **kwargs) -> Path:
53
- """Convert API path to local file path with parameterized support"""
54
- # Remove leading /api/ prefix: /api/executor/connection -> executor/connection
55
- if path.startswith("/api/"):
56
- clean_path = path[5:] # Remove "/api/" prefix
57
- else:
58
- clean_path = path.lstrip("/")
59
-
60
- # Extract parameters from kwargs
61
- params = kwargs.get("params", {})
62
-
63
- # CORE OPERATOR APIs with parameter-based file structure:
64
-
65
- # 1. get_connection() API - parameterized by project_id + connection_name
66
- if clean_path == "executor/connection":
67
- project_id = params.get("project_id", "0")
68
- connection_name = params.get("name", "default")
69
- return self.offline_data_path / "executor/connection" / str(project_id) / f"{connection_name}.json"
70
-
71
- # 2. get_py_conn_configs() API - parameterized by project_id + project_connection_name
72
- elif clean_path == "executor/python-conn-configs":
73
- project_id = params.get("project_id", "0")
74
- # Python configs use project_connection_name as the key (fallback to other param names for compatibility)
75
- # Handle empty strings properly - treat them as None/missing
76
- project_connection_name = (params.get("project_connection_name") or
77
- params.get("project_conn_name") or
78
- params.get("pyenv_name") or
79
- "default")
80
- return self.offline_data_path / "executor/python-conn-configs" / str(project_id) / f"{project_connection_name}.json"
81
-
82
- # For any other APIs, raise error do not support offline mode
83
- raise APIError(f"Offline mode: {path} is not supported")
84
-
85
- def _read_offline_data(self, method: str, path: str, response_model_class: type[ResponseModelType] | None = None, **kwargs) -> Any:
86
- """Read API response from local JSON file"""
87
- file_path = self._resolve_offline_file_path(path, **kwargs)
88
-
89
- logger.info(f"🔌 Offline mode: Reading from {file_path}")
90
-
91
- try:
92
- if not file_path.exists():
93
- logger.error(f"Offline data file not found: {file_path}")
94
- raise APIError(f"Offline mode: Required data file not found: {file_path}")
95
-
96
- with open(file_path, 'r') as f:
97
- resp_content = json.load(f)
98
-
99
- # Handle response model validation (same logic as online mode)
100
- if response_model_class is not None:
101
- if "code" in resp_content:
102
- return response_model_class.model_validate(resp_content["data"])
103
- return response_model_class.model_validate(resp_content)
104
-
105
- return resp_content.get("data", resp_content)
106
-
107
- except APIError:
108
- raise # Re-raise APIError as-is
109
- except Exception as e:
110
- logger.error(f"Error reading offline data from {file_path}: {e}")
111
- raise APIError(f"Offline mode: Failed to read data file {file_path}: {e}")
112
-
29
+ self._client = httpx.Client(
30
+ base_url=config.server_url,
31
+ timeout=config.request_timeout,
32
+ headers={"User-Agent": f"RecurveLib/{__version__}"},
33
+ )
113
34
 
114
35
  @overload
115
36
  def request(self, method: str, path: str, response_model_class: None = None, retries: int = 3, **kwargs) -> Any:
@@ -135,11 +56,6 @@ class Client:
135
56
  retries: int = 1,
136
57
  **kwargs,
137
58
  ) -> Any:
138
- # Route to offline mode if enabled
139
- if self.is_offline_mode:
140
- return self._read_offline_data(method, path, response_model_class, **kwargs)
141
-
142
- # Original online mode logic
143
59
  self.prepare_header(kwargs)
144
60
  pre_err: httpx.HTTPStatusError | None = None
145
61
  for attempt in range(retries):
@@ -227,11 +143,8 @@ class Client:
227
143
  )
228
144
 
229
145
  def close(self):
230
- if self._client:
231
- self._client.close()
146
+ self._client.close()
232
147
 
233
148
  @property
234
149
  def base_url(self) -> str:
235
- if self.is_offline_mode:
236
- return "offline://localhost"
237
- return str(self._client.base_url) if self._client else ""
150
+ return str(self._client.base_url)
@@ -1570,6 +1570,26 @@ ALL_CONFIG_SCHEMA_DCT = {
1570
1570
  "group": ["destination"],
1571
1571
  "test_required": True,
1572
1572
  },
1573
+ "recurvedata.connectors.connectors.wecom": {
1574
+ "type": "wecom",
1575
+ "ui_type": "WeCom",
1576
+ "category": ["others"],
1577
+ "config_schema": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "webhook_url": {"type": "string", "title": _l("WeCom Webhook URL")},
1581
+ },
1582
+ "order": [
1583
+ "webhook_url",
1584
+ ],
1585
+ "required": [
1586
+ "webhook_url",
1587
+ ],
1588
+ },
1589
+ "enabled": True,
1590
+ "group": ["integration"],
1591
+ "test_required": True,
1592
+ },
1573
1593
  }
1574
1594
 
1575
1595
  # auto generated finish
@@ -0,0 +1,66 @@
1
+ from urllib.parse import urlparse
2
+
3
+ import requests
4
+
5
+ from recurvedata.connectors._register import register_connector_class
6
+ from recurvedata.connectors.base import RecurveConnectorBase
7
+ from recurvedata.consts import ConnectorGroup
8
+ from recurvedata.core.translation import _l
9
+
10
+ CONNECTION_TYPE = "wecom"
11
+ UI_CONNECTION_TYPE = "WeCom"
12
+
13
+
14
+ @register_connector_class([CONNECTION_TYPE, UI_CONNECTION_TYPE])
15
+ class WeCom(RecurveConnectorBase):
16
+ connection_type = CONNECTION_TYPE
17
+ ui_connection_type = UI_CONNECTION_TYPE
18
+ group = [ConnectorGroup.INTEGRATION]
19
+
20
+ config_schema = {
21
+ "type": "object",
22
+ "properties": {
23
+ "webhook_url": {"type": "string", "title": _l("WeCom Webhook URL")},
24
+ },
25
+ "order": [
26
+ "webhook_url",
27
+ ],
28
+ "required": [
29
+ "webhook_url",
30
+ ],
31
+ }
32
+
33
+ @property
34
+ def webhook_url(self):
35
+ return self.conf["webhook_url"]
36
+
37
+ @property
38
+ def wecom_conf(self):
39
+ if hasattr(self, "_wecom_conf"):
40
+ return self._wecom_conf
41
+ self.init_config()
42
+ return self._wecom_conf
43
+
44
+ def test_connection(self):
45
+ """
46
+ Test WeCom webhook connection.
47
+ Validate URL format and network connectivity without sending actual messages.
48
+ """
49
+ # Validate URL format
50
+ parsed_url = urlparse(self.webhook_url)
51
+ if not parsed_url.scheme or not parsed_url.netloc:
52
+ raise ValueError("Invalid webhook URL format")
53
+
54
+ if parsed_url.scheme != "https":
55
+ raise ValueError("WeCom webhook URL must use HTTPS")
56
+
57
+ # Verify WeCom domain
58
+ if "qyapi.weixin.qq.com" not in parsed_url.netloc:
59
+ raise ValueError("Invalid WeCom webhook URL domain")
60
+
61
+ # Test network connectivity (use HEAD request without sending message body)
62
+ try:
63
+ requests.head(self.webhook_url, timeout=10, allow_redirects=True)
64
+ # Connection test only, status code not checked (HEAD may return 405)
65
+ except requests.exceptions.RequestException as e:
66
+ raise ValueError(f"Failed to connect to WeCom webhook: {str(e)}")
@@ -397,19 +397,27 @@ class DBAPIBase(RecurveConnectorBase):
397
397
  set_env_dbt_password(self.password or "")
398
398
 
399
399
  @classmethod
400
- def order_sql(cls, sql: str, orders: list[dict[str, str]] = None, return_sql: bool = True):
401
- """
402
- order the sql by the orders
403
- """
400
+ def get_dialect(cls):
404
401
  # dialect impala -> hive, cuz there is no dialect 'impala' in sqlglot
405
- dialect = "hive" if cls.connection_type == "impala" else (cls.connection_type or None)
402
+ return "hive" if cls.connection_type == "impala" else (cls.connection_type or None)
403
+
404
+ @classmethod
405
+ def clean_sql(cls, sql):
406
+ dialect = cls.get_dialect()
406
407
  # Parse the SQL query
407
408
  parsed = sqlglot.parse_one(sql, read=dialect)
408
409
  # since some sql dialects have special identifier, we need to use the dialect to generate the clean sql
409
- clean_sql = parsed.sql(dialect=dialect, comments=False)
410
+ return parsed.sql(dialect=dialect, comments=False)
411
+
412
+ @classmethod
413
+ def order_sql(cls, sql: str, orders: list[dict[str, str]] = None, return_sql: bool = True):
414
+ """
415
+ order the sql by the orders
416
+ """
417
+ dialect = cls.get_dialect()
410
418
  # Wrap the entire query with a subquery
411
419
  alias = "_recurve_limit_subquery"
412
- subquery = exp.Subquery(this=clean_sql, alias=alias)
420
+ subquery = exp.Subquery(this=cls.clean_sql(sql), alias=alias)
413
421
 
414
422
  # Create a new SELECT statement with the subquery and the LIMIT clause
415
423
  outer_select = exp.select("*").from_(subquery)
@@ -436,7 +444,7 @@ class DBAPIBase(RecurveConnectorBase):
436
444
  no validation on sql.
437
445
  If the sql is DML, then execute it will raise an error.
438
446
  """
439
- dialect = "hive" if cls.connection_type == "impala" else (cls.connection_type or None)
447
+ dialect = cls.get_dialect()
440
448
 
441
449
  outer_select = cls.order_sql(sql, orders, return_sql=False)
442
450
 
@@ -456,7 +464,7 @@ class DBAPIBase(RecurveConnectorBase):
456
464
  no validation on sql.
457
465
  If the sql is DML, then execute it will raise an error.
458
466
  """
459
- return f"SELECT COUNT(1) FROM ({sql}) AS cnt_subquery"
467
+ return f"SELECT COUNT(1) FROM ({cls.clean_sql(sql)}) AS cnt_subquery"
460
468
 
461
469
 
462
470
  @dataclass
@@ -148,12 +148,15 @@ class AirflowDbService:
148
148
  max_execution_date: datetime.datetime | None,
149
149
  failed_only: bool,
150
150
  ):
151
- drs: list[DagRun] = DagRun.find(
152
- dag_id=dag.dag_id,
153
- run_id=run_id,
154
- execution_start_date=min_execution_date,
155
- execution_end_date=max_execution_date,
156
- )
151
+ kwargs = {
152
+ "dag_id": dag.dag_id,
153
+ "run_id": run_id,
154
+ "execution_start_date": min_execution_date,
155
+ "execution_end_date": max_execution_date,
156
+ }
157
+ if min_execution_date or max_execution_date:
158
+ kwargs.pop("run_id")
159
+ drs: list[DagRun] = DagRun.find(**kwargs)
157
160
  if not drs:
158
161
  logger.info(f"skip rerun, no dag_run found for {dag.dag_id} at {run_id}")
159
162
  return
@@ -182,14 +185,19 @@ class AirflowDbService:
182
185
  include_downstream: bool,
183
186
  failed_only: bool,
184
187
  ):
185
- drs: list[DagRun] = DagRun.find(
186
- dag_id=dag.dag_id,
187
- run_id=run_id,
188
- execution_start_date=min_execution_date,
189
- execution_end_date=max_execution_date,
190
- )
188
+ kwargs = {
189
+ "dag_id": dag.dag_id,
190
+ "run_id": run_id,
191
+ "execution_start_date": min_execution_date,
192
+ "execution_end_date": max_execution_date,
193
+ }
194
+ if min_execution_date or max_execution_date:
195
+ kwargs.pop("run_id")
196
+ drs: list[DagRun] = DagRun.find(**kwargs)
191
197
  if not drs:
192
- logger.info(f"skip rerun, no dag_run found for {dag.dag_id} at {run_id}")
198
+ logger.info(
199
+ f"skip rerun, no dag_run found for {dag.dag_id} at {run_id}, or between {min_execution_date} and {max_execution_date}"
200
+ )
193
201
  return
194
202
  clear_start_date = min([dr.execution_date for dr in drs])
195
203
  clear_end_date = max([dr.execution_date for dr in drs])
@@ -205,14 +213,16 @@ class AirflowDbService:
205
213
  for task_id in clear_task_ids:
206
214
  if task_id in dag.task_dict:
207
215
  task = dag.task_dict[task_id]
208
- upstream_task_ids = [t.task_id for t in task.upstream_list]
216
+ # Use Airflow's built-in method to get all upstream tasks
217
+ upstream_task_ids = task.get_flat_relative_ids(upstream=True)
209
218
  expanded_task_ids.update(upstream_task_ids)
210
219
 
211
220
  if include_downstream:
212
221
  for task_id in clear_task_ids:
213
222
  if task_id in dag.task_dict:
214
223
  task = dag.task_dict[task_id]
215
- downstream_task_ids = [t.task_id for t in task.downstream_list]
224
+ # Use Airflow's built-in method to get all downstream tasks
225
+ downstream_task_ids = task.get_flat_relative_ids(upstream=False)
216
226
  expanded_task_ids.update(downstream_task_ids)
217
227
 
218
228
  clear_task_ids = list(expanded_task_ids)
@@ -1 +0,0 @@
1
- __version__ = "0.1.492"