data-syncmaster 0.3.2__tar.gz → 0.3.3__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.
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/PKG-INFO +16 -15
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/README.rst +1 -1
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/PKG-INFO +16 -15
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/SOURCES.txt +1 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/requires.txt +14 -13
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/pyproject.toml +30 -28
- data_syncmaster-0.3.3/syncmaster/VERSION +1 -0
- data_syncmaster-0.3.3/syncmaster/db/migrations/versions/2026-04-02_0013_add_celery_date_done_indexes.py +39 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/clickhouse.py +53 -1
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/mysql.py +1 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/ivy2.py +1 -1
- data_syncmaster-0.3.2/syncmaster/VERSION +0 -1
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/LICENSE.txt +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/dependency_links.txt +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/top_level.txt +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/setup.cfg +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/factory.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/__main__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/alembic.ini +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/env.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0001_create_user_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0002_create_group_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0003_create_queue_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0004_create_connection_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0005_create_user_group_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0006_create_auth_data_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0007_create_transfer_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0008_create_run_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2023-11-23_0009_create_celery_tables.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2024-10-07_0010_add_pg_trgm_extension.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2024-11-01_0011_create_apscheduler_table.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/2025-08-10_0012_update_ts.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/mixins/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/mixins/resource.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/mixins/timestamp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/apscheduler_job.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/auth_data.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/connection.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/group.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/queue.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/run.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/transfer.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/models/user.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/connection.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/credentials_repository.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/group.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/queue.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/repository_with_owner.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/run.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/search.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/transfer.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/user.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/utils.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/utils.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/connections.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/runs.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/transfers.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/transfers_resources.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/dto/transfers_strategy.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/registration.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/schemas/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/schemas/bad_request.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/schemas/invalid_request.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/schemas/not_authorized.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/auth.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/connection.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/credentials.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/group.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/queue.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/redirect.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/run.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/transfer.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/exceptions/user.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/__main__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/celery.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/settings/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/transfer_fetcher.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/transfer_job_manager.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/scheduler/utils.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/ping.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/basic.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_delegated/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_delegated/bearer.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_delegated/oauth2_client_credentials.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_direct/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_direct/bearer.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/iceberg_rest_s3_direct/oauth2_client_credentials.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/mixins.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/s3.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/samba.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/auth/token.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connection_types.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/clickhouse.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/connection_base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/ftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/ftps.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/hdfs.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/hive.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/iceberg.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/mssql.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/mysql.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/oracle.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/postgres.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/s3.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/samba.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/sftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/connections/webdav.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/file_formats.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/groups.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/page.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/queue.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/db.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/ftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/ftps.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/hdfs.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/s3.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/samba.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/sftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file/webdav.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/file_format.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/resources.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/run.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/strategy.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/transformations/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/transformations/dataframe_columns_filter.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/transformations/dataframe_rows_filter.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/transformations/file_metadata_filter.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transfers/transformations/sql.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/transformation_types.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/types.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/schemas/v1/users.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/__main__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/monitoring.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/router.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/auth.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/connections.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/groups.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/queue.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/router.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/runs.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/transfers.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/api/v1/users.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/dependencies/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/dependencies/get_access_token.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/dependencies/stub.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/handler.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/cors.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/monitoring/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/monitoring/metrics.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/openapi.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/request_id.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/middlewares/static_files.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/auth/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/auth/base_provider.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/auth/dummy_provider.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/auth/keycloak_provider.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/providers/auth/oauth2_gateway_provider.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/scripts/export_openapi_schema.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/scripts/manage_superusers.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/services/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/services/get_user.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/services/unit_of_work.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/auth/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/auth/dummy.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/auth/jwt.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/auth/keycloak.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/auth/oauth2_gateway.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/cors.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/monitoring.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/openapi.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/request_id.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/settings/server/static_files.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/utils/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/utils/jwt.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/server/utils/slug.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/broker.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/credentials.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/database.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/settings/logging.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/celery.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/controller.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/hive.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/iceberg.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/mssql.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/oracle.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/db/postgres.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/base.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/ftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/ftps.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/hdfs.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/local_df.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/remote_df.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/s3.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/samba.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/sftp.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/handlers/file/webdav.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/settings/__init__.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/settings/hwm_store.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/spark.py +0 -0
- {data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/worker/transfer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-syncmaster
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Syncmaster REST API + scheduler + Worker
|
|
5
5
|
Author-email: MWS Data Bridge <onetools@mts.ru>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -26,45 +26,46 @@ Classifier: Typing :: Typed
|
|
|
26
26
|
Requires-Python: >=3.11
|
|
27
27
|
Description-Content-Type: text/x-rst
|
|
28
28
|
License-File: LICENSE.txt
|
|
29
|
-
Requires-Dist: pydantic~=2.
|
|
30
|
-
Requires-Dist: pydantic-settings
|
|
29
|
+
Requires-Dist: pydantic~=2.13.4
|
|
30
|
+
Requires-Dist: pydantic-settings~=2.14.1
|
|
31
31
|
Requires-Dist: pydantic-settings-logging~=0.1.1
|
|
32
|
-
Requires-Dist: sqlalchemy~=2.0.
|
|
32
|
+
Requires-Dist: sqlalchemy~=2.0.49
|
|
33
33
|
Requires-Dist: sqlalchemy-utils~=0.42.0
|
|
34
34
|
Requires-Dist: pyyaml~=6.0.3
|
|
35
35
|
Requires-Dist: coloredlogs~=15.0.1
|
|
36
|
-
Requires-Dist: python-json-logger~=4.
|
|
36
|
+
Requires-Dist: python-json-logger~=4.1.0
|
|
37
37
|
Requires-Dist: asgi-correlation-id~=4.3.4
|
|
38
38
|
Requires-Dist: uuid6~=2025.0.1
|
|
39
39
|
Requires-Dist: celery~=5.6.0
|
|
40
40
|
Requires-Dist: psycopg2-binary~=2.9.11
|
|
41
41
|
Provides-Extra: server
|
|
42
|
-
Requires-Dist: fastapi
|
|
42
|
+
Requires-Dist: fastapi<0.137.0,>=0.135.3; extra == "server"
|
|
43
|
+
Requires-Dist: starlette<1.0; extra == "server"
|
|
43
44
|
Requires-Dist: starlette-exporter~=0.23.0; extra == "server"
|
|
44
|
-
Requires-Dist: python-multipart~=0.0.
|
|
45
|
-
Requires-Dist: uvicorn
|
|
46
|
-
Requires-Dist: alembic~=1.18.
|
|
47
|
-
Requires-Dist: pyjwt~=2.
|
|
48
|
-
Requires-Dist: asyncpg~=0.31; extra == "server"
|
|
49
|
-
Requires-Dist: python-keycloak
|
|
45
|
+
Requires-Dist: python-multipart~=0.0.26; extra == "server"
|
|
46
|
+
Requires-Dist: uvicorn<0.48,>=0.44; extra == "server"
|
|
47
|
+
Requires-Dist: alembic~=1.18.4; extra == "server"
|
|
48
|
+
Requires-Dist: pyjwt~=2.12.1; extra == "server"
|
|
49
|
+
Requires-Dist: asyncpg~=0.31.0; extra == "server"
|
|
50
|
+
Requires-Dist: python-keycloak~=7.1.1; extra == "server"
|
|
50
51
|
Requires-Dist: itsdangerous~=2.2.0; extra == "server"
|
|
51
52
|
Provides-Extra: scheduler
|
|
52
53
|
Requires-Dist: asyncpg~=0.31; extra == "scheduler"
|
|
53
54
|
Requires-Dist: apscheduler~=3.11.1; extra == "scheduler"
|
|
54
55
|
Provides-Extra: worker
|
|
55
|
-
Requires-Dist: onetl[files]~=0.
|
|
56
|
+
Requires-Dist: onetl[files]~=0.16.0; extra == "worker"
|
|
56
57
|
Requires-Dist: pyspark<4.0.0; extra == "worker"
|
|
57
58
|
Requires-Dist: horizon-hwm-store~=1.1.4; extra == "worker"
|
|
58
59
|
Requires-Dist: jinja2~=3.1.6; extra == "worker"
|
|
59
60
|
Provides-Extra: kerberos
|
|
60
|
-
Requires-Dist: onetl[kerberos]~=0.
|
|
61
|
+
Requires-Dist: onetl[kerberos]~=0.16.0; extra == "kerberos"
|
|
61
62
|
Dynamic: license-file
|
|
62
63
|
|
|
63
64
|
.. _readme:
|
|
64
65
|
|
|
65
66
|
|Logo|
|
|
66
67
|
|
|
67
|
-
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/
|
|
68
|
+
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/0eb2ba2be6656f81ea9706523c3b7942df212640/docs/_static/logo_wide.svg
|
|
68
69
|
:alt: Data.SyncMaster logo
|
|
69
70
|
:target: https://github.com/MTSWebServices/data-syncmaster
|
|
70
71
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|Logo|
|
|
4
4
|
|
|
5
|
-
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/
|
|
5
|
+
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/0eb2ba2be6656f81ea9706523c3b7942df212640/docs/_static/logo_wide.svg
|
|
6
6
|
:alt: Data.SyncMaster logo
|
|
7
7
|
:target: https://github.com/MTSWebServices/data-syncmaster
|
|
8
8
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-syncmaster
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Syncmaster REST API + scheduler + Worker
|
|
5
5
|
Author-email: MWS Data Bridge <onetools@mts.ru>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -26,45 +26,46 @@ Classifier: Typing :: Typed
|
|
|
26
26
|
Requires-Python: >=3.11
|
|
27
27
|
Description-Content-Type: text/x-rst
|
|
28
28
|
License-File: LICENSE.txt
|
|
29
|
-
Requires-Dist: pydantic~=2.
|
|
30
|
-
Requires-Dist: pydantic-settings
|
|
29
|
+
Requires-Dist: pydantic~=2.13.4
|
|
30
|
+
Requires-Dist: pydantic-settings~=2.14.1
|
|
31
31
|
Requires-Dist: pydantic-settings-logging~=0.1.1
|
|
32
|
-
Requires-Dist: sqlalchemy~=2.0.
|
|
32
|
+
Requires-Dist: sqlalchemy~=2.0.49
|
|
33
33
|
Requires-Dist: sqlalchemy-utils~=0.42.0
|
|
34
34
|
Requires-Dist: pyyaml~=6.0.3
|
|
35
35
|
Requires-Dist: coloredlogs~=15.0.1
|
|
36
|
-
Requires-Dist: python-json-logger~=4.
|
|
36
|
+
Requires-Dist: python-json-logger~=4.1.0
|
|
37
37
|
Requires-Dist: asgi-correlation-id~=4.3.4
|
|
38
38
|
Requires-Dist: uuid6~=2025.0.1
|
|
39
39
|
Requires-Dist: celery~=5.6.0
|
|
40
40
|
Requires-Dist: psycopg2-binary~=2.9.11
|
|
41
41
|
Provides-Extra: server
|
|
42
|
-
Requires-Dist: fastapi
|
|
42
|
+
Requires-Dist: fastapi<0.137.0,>=0.135.3; extra == "server"
|
|
43
|
+
Requires-Dist: starlette<1.0; extra == "server"
|
|
43
44
|
Requires-Dist: starlette-exporter~=0.23.0; extra == "server"
|
|
44
|
-
Requires-Dist: python-multipart~=0.0.
|
|
45
|
-
Requires-Dist: uvicorn
|
|
46
|
-
Requires-Dist: alembic~=1.18.
|
|
47
|
-
Requires-Dist: pyjwt~=2.
|
|
48
|
-
Requires-Dist: asyncpg~=0.31; extra == "server"
|
|
49
|
-
Requires-Dist: python-keycloak
|
|
45
|
+
Requires-Dist: python-multipart~=0.0.26; extra == "server"
|
|
46
|
+
Requires-Dist: uvicorn<0.48,>=0.44; extra == "server"
|
|
47
|
+
Requires-Dist: alembic~=1.18.4; extra == "server"
|
|
48
|
+
Requires-Dist: pyjwt~=2.12.1; extra == "server"
|
|
49
|
+
Requires-Dist: asyncpg~=0.31.0; extra == "server"
|
|
50
|
+
Requires-Dist: python-keycloak~=7.1.1; extra == "server"
|
|
50
51
|
Requires-Dist: itsdangerous~=2.2.0; extra == "server"
|
|
51
52
|
Provides-Extra: scheduler
|
|
52
53
|
Requires-Dist: asyncpg~=0.31; extra == "scheduler"
|
|
53
54
|
Requires-Dist: apscheduler~=3.11.1; extra == "scheduler"
|
|
54
55
|
Provides-Extra: worker
|
|
55
|
-
Requires-Dist: onetl[files]~=0.
|
|
56
|
+
Requires-Dist: onetl[files]~=0.16.0; extra == "worker"
|
|
56
57
|
Requires-Dist: pyspark<4.0.0; extra == "worker"
|
|
57
58
|
Requires-Dist: horizon-hwm-store~=1.1.4; extra == "worker"
|
|
58
59
|
Requires-Dist: jinja2~=3.1.6; extra == "worker"
|
|
59
60
|
Provides-Extra: kerberos
|
|
60
|
-
Requires-Dist: onetl[kerberos]~=0.
|
|
61
|
+
Requires-Dist: onetl[kerberos]~=0.16.0; extra == "kerberos"
|
|
61
62
|
Dynamic: license-file
|
|
62
63
|
|
|
63
64
|
.. _readme:
|
|
64
65
|
|
|
65
66
|
|Logo|
|
|
66
67
|
|
|
67
|
-
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/
|
|
68
|
+
.. |Logo| image:: https://raw.githubusercontent.com/MTSWebServices/syncmaster/0eb2ba2be6656f81ea9706523c3b7942df212640/docs/_static/logo_wide.svg
|
|
68
69
|
:alt: Data.SyncMaster logo
|
|
69
70
|
:target: https://github.com/MTSWebServices/data-syncmaster
|
|
70
71
|
|
|
@@ -27,6 +27,7 @@ syncmaster/db/migrations/versions/2023-11-23_0009_create_celery_tables.py
|
|
|
27
27
|
syncmaster/db/migrations/versions/2024-10-07_0010_add_pg_trgm_extension.py
|
|
28
28
|
syncmaster/db/migrations/versions/2024-11-01_0011_create_apscheduler_table.py
|
|
29
29
|
syncmaster/db/migrations/versions/2025-08-10_0012_update_ts.py
|
|
30
|
+
syncmaster/db/migrations/versions/2026-04-02_0013_add_celery_date_done_indexes.py
|
|
30
31
|
syncmaster/db/migrations/versions/__init__.py
|
|
31
32
|
syncmaster/db/mixins/__init__.py
|
|
32
33
|
syncmaster/db/mixins/resource.py
|
|
@@ -1,36 +1,37 @@
|
|
|
1
|
-
pydantic~=2.
|
|
2
|
-
pydantic-settings
|
|
1
|
+
pydantic~=2.13.4
|
|
2
|
+
pydantic-settings~=2.14.1
|
|
3
3
|
pydantic-settings-logging~=0.1.1
|
|
4
|
-
sqlalchemy~=2.0.
|
|
4
|
+
sqlalchemy~=2.0.49
|
|
5
5
|
sqlalchemy-utils~=0.42.0
|
|
6
6
|
pyyaml~=6.0.3
|
|
7
7
|
coloredlogs~=15.0.1
|
|
8
|
-
python-json-logger~=4.
|
|
8
|
+
python-json-logger~=4.1.0
|
|
9
9
|
asgi-correlation-id~=4.3.4
|
|
10
10
|
uuid6~=2025.0.1
|
|
11
11
|
celery~=5.6.0
|
|
12
12
|
psycopg2-binary~=2.9.11
|
|
13
13
|
|
|
14
14
|
[kerberos]
|
|
15
|
-
onetl[kerberos]~=0.
|
|
15
|
+
onetl[kerberos]~=0.16.0
|
|
16
16
|
|
|
17
17
|
[scheduler]
|
|
18
18
|
asyncpg~=0.31
|
|
19
19
|
apscheduler~=3.11.1
|
|
20
20
|
|
|
21
21
|
[server]
|
|
22
|
-
fastapi
|
|
22
|
+
fastapi<0.137.0,>=0.135.3
|
|
23
|
+
starlette<1.0
|
|
23
24
|
starlette-exporter~=0.23.0
|
|
24
|
-
python-multipart~=0.0.
|
|
25
|
-
uvicorn
|
|
26
|
-
alembic~=1.18.
|
|
27
|
-
pyjwt~=2.
|
|
28
|
-
asyncpg~=0.31
|
|
29
|
-
python-keycloak
|
|
25
|
+
python-multipart~=0.0.26
|
|
26
|
+
uvicorn<0.48,>=0.44
|
|
27
|
+
alembic~=1.18.4
|
|
28
|
+
pyjwt~=2.12.1
|
|
29
|
+
asyncpg~=0.31.0
|
|
30
|
+
python-keycloak~=7.1.1
|
|
30
31
|
itsdangerous~=2.2.0
|
|
31
32
|
|
|
32
33
|
[worker]
|
|
33
|
-
onetl[files]~=0.
|
|
34
|
+
onetl[files]~=0.16.0
|
|
34
35
|
pyspark<4.0.0
|
|
35
36
|
horizon-hwm-store~=1.1.4
|
|
36
37
|
jinja2~=3.1.6
|
|
@@ -33,14 +33,14 @@ classifiers = [
|
|
|
33
33
|
keywords = ["Syncmaster", "REST", "API", "Worker", "Spark", "Transfer", "ETL"]
|
|
34
34
|
requires-python = ">=3.11"
|
|
35
35
|
dependencies = [
|
|
36
|
-
"pydantic~=2.
|
|
37
|
-
"pydantic-settings
|
|
36
|
+
"pydantic~=2.13.4",
|
|
37
|
+
"pydantic-settings~=2.14.1",
|
|
38
38
|
"pydantic-settings-logging~=0.1.1",
|
|
39
|
-
"sqlalchemy~=2.0.
|
|
39
|
+
"sqlalchemy~=2.0.49",
|
|
40
40
|
"sqlalchemy-utils~=0.42.0",
|
|
41
41
|
"pyyaml~=6.0.3",
|
|
42
42
|
"coloredlogs~=15.0.1",
|
|
43
|
-
"python-json-logger~=4.
|
|
43
|
+
"python-json-logger~=4.1.0",
|
|
44
44
|
"asgi-correlation-id~=4.3.4",
|
|
45
45
|
"uuid6~=2025.0.1",
|
|
46
46
|
"celery~=5.6.0",
|
|
@@ -65,14 +65,16 @@ exclude = ["docs", "tests"]
|
|
|
65
65
|
|
|
66
66
|
[project.optional-dependencies]
|
|
67
67
|
server = [
|
|
68
|
-
"fastapi
|
|
68
|
+
"fastapi>=0.135.3,<0.137.0",
|
|
69
|
+
# starlette 1.0.0 break cookies
|
|
70
|
+
"starlette<1.0",
|
|
69
71
|
"starlette-exporter~=0.23.0",
|
|
70
|
-
"python-multipart~=0.0.
|
|
71
|
-
"uvicorn
|
|
72
|
-
"alembic~=1.18.
|
|
73
|
-
"pyjwt~=2.
|
|
74
|
-
"asyncpg~=0.31",
|
|
75
|
-
"python-keycloak
|
|
72
|
+
"python-multipart~=0.0.26",
|
|
73
|
+
"uvicorn>=0.44,<0.48",
|
|
74
|
+
"alembic~=1.18.4",
|
|
75
|
+
"pyjwt~=2.12.1",
|
|
76
|
+
"asyncpg~=0.31.0",
|
|
77
|
+
"python-keycloak~=7.1.1",
|
|
76
78
|
"itsdangerous~=2.2.0",
|
|
77
79
|
]
|
|
78
80
|
scheduler = [
|
|
@@ -80,13 +82,13 @@ scheduler = [
|
|
|
80
82
|
"apscheduler~=3.11.1",
|
|
81
83
|
]
|
|
82
84
|
worker = [
|
|
83
|
-
"onetl[files]~=0.
|
|
85
|
+
"onetl[files]~=0.16.0",
|
|
84
86
|
"pyspark<4.0.0",
|
|
85
87
|
"horizon-hwm-store~=1.1.4",
|
|
86
88
|
"jinja2~=3.1.6",
|
|
87
89
|
]
|
|
88
90
|
kerberos = [
|
|
89
|
-
"onetl[kerberos]~=0.
|
|
91
|
+
"onetl[kerberos]~=0.16.0",
|
|
90
92
|
]
|
|
91
93
|
|
|
92
94
|
[dependency-groups]
|
|
@@ -94,36 +96,36 @@ test = [
|
|
|
94
96
|
"pytest~=8.4.2",
|
|
95
97
|
"httpx~=0.28.1",
|
|
96
98
|
"pytest-asyncio>=0.26.0,<1.0",
|
|
97
|
-
"pytest-randomly
|
|
99
|
+
"pytest-randomly>=4.0.1,<4.2.0",
|
|
98
100
|
"pytest-rerunfailures~=16.1",
|
|
99
|
-
"pytest-deadfixtures
|
|
101
|
+
"pytest-deadfixtures~=3.1.0",
|
|
100
102
|
"pytest-mock~=3.15.1",
|
|
101
103
|
"pytest-lazy-fixtures~=1.4.0",
|
|
102
|
-
"faker~=40.
|
|
103
|
-
"coverage~=7.
|
|
104
|
-
"gevent
|
|
105
|
-
"respx~=0.
|
|
104
|
+
"faker~=40.13",
|
|
105
|
+
"coverage~=7.14.0",
|
|
106
|
+
"gevent>=26.4,<26.6",
|
|
107
|
+
"respx~=0.23.1",
|
|
106
108
|
"dirty-equals~=0.11.0",
|
|
107
109
|
]
|
|
108
110
|
dev = [
|
|
109
|
-
"ruff~=0.15.
|
|
110
|
-
"mypy~=1.
|
|
111
|
-
"prek
|
|
112
|
-
"sqlalchemy[mypy]~=2.0.
|
|
111
|
+
"ruff~=0.15.12",
|
|
112
|
+
"mypy~=2.1.0",
|
|
113
|
+
"prek>=0.3.2,<0.5.0",
|
|
114
|
+
"sqlalchemy[mypy]~=2.0.49",
|
|
113
115
|
"types-jwcrypto~=1.5.0",
|
|
114
116
|
]
|
|
115
117
|
docs = [
|
|
116
|
-
"setuptools-git-versioning>=
|
|
118
|
+
"setuptools-git-versioning>=3.0.1,<3.2.0",
|
|
117
119
|
"autodoc-pydantic~=2.2.0",
|
|
118
120
|
"numpydoc~=1.10.0",
|
|
119
|
-
"sphinx
|
|
121
|
+
"sphinx~=9.0.4",
|
|
120
122
|
"furo~=2025.12.19",
|
|
121
123
|
"sphinx-copybutton~=0.5.2",
|
|
122
124
|
"sphinxcontrib-towncrier~=0.5.0a0",
|
|
123
125
|
"towncrier~=25.8.0",
|
|
124
|
-
"sphinx-issues~=
|
|
125
|
-
"sphinx-design
|
|
126
|
-
"sphinx-favicon
|
|
126
|
+
"sphinx-issues~=6.0.0",
|
|
127
|
+
"sphinx-design~=0.7.0",
|
|
128
|
+
"sphinx-favicon~=1.1.0",
|
|
127
129
|
"sphinx-argparse~=0.5.2",
|
|
128
130
|
# https://github.com/mgeier/sphinx-last-updated-by-git/pull/77
|
|
129
131
|
"sphinx-last-updated-by-git~=0.3.8",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.3
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025-present MTS PJSC
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Add celery_*_date_done indexex
|
|
4
|
+
|
|
5
|
+
Revision ID: 0013
|
|
6
|
+
Revises: 0012
|
|
7
|
+
Create Date: 2026-04-02 11:06:44.293882
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from alembic import op
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision = "0013"
|
|
15
|
+
down_revision = "0012"
|
|
16
|
+
branch_labels = None
|
|
17
|
+
depends_on = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade() -> None:
|
|
21
|
+
op.create_index(
|
|
22
|
+
op.f("ix_celery_taskmeta_date_done"),
|
|
23
|
+
"celery_taskmeta",
|
|
24
|
+
["date_done"],
|
|
25
|
+
unique=False,
|
|
26
|
+
if_not_exists=True,
|
|
27
|
+
)
|
|
28
|
+
op.create_index(
|
|
29
|
+
op.f("ix_celery_tasksetmeta_date_done"),
|
|
30
|
+
"celery_tasksetmeta",
|
|
31
|
+
["date_done"],
|
|
32
|
+
unique=False,
|
|
33
|
+
if_not_exists=True,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def downgrade() -> None:
|
|
38
|
+
op.drop_index(op.f("ix_celery_tasksetmeta_date_done"), table_name="celery_tasksetmeta", if_exists=True)
|
|
39
|
+
op.drop_index(op.f("ix_celery_taskmeta_date_done"), table_name="celery_taskmeta", if_exists=True)
|
|
@@ -3,16 +3,36 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
from datetime import UTC, datetime
|
|
7
|
+
from decimal import Decimal
|
|
6
8
|
from typing import TYPE_CHECKING, ClassVar
|
|
7
9
|
|
|
8
10
|
from onetl.connection import Clickhouse
|
|
9
11
|
from onetl.db import DBWriter
|
|
10
12
|
from onetl.hooks import slot, support_hooks
|
|
13
|
+
from pyspark.sql import functions as F # noqa: N812
|
|
14
|
+
from pyspark.sql.types import (
|
|
15
|
+
ArrayType,
|
|
16
|
+
BooleanType,
|
|
17
|
+
ByteType,
|
|
18
|
+
DataType,
|
|
19
|
+
DateType,
|
|
20
|
+
DecimalType,
|
|
21
|
+
DoubleType,
|
|
22
|
+
FloatType,
|
|
23
|
+
IntegerType,
|
|
24
|
+
LongType,
|
|
25
|
+
MapType,
|
|
26
|
+
ShortType,
|
|
27
|
+
StringType,
|
|
28
|
+
TimestampNTZType,
|
|
29
|
+
TimestampType,
|
|
30
|
+
)
|
|
11
31
|
|
|
12
32
|
from syncmaster.worker.handlers.db.base import DBHandler
|
|
13
33
|
|
|
14
34
|
if TYPE_CHECKING:
|
|
15
|
-
from pyspark.sql import SparkSession
|
|
35
|
+
from pyspark.sql import Column, SparkSession
|
|
16
36
|
from pyspark.sql.dataframe import DataFrame
|
|
17
37
|
|
|
18
38
|
from syncmaster.dto.connections import ClickhouseConnectionDTO
|
|
@@ -38,6 +58,7 @@ class ClickhouseHandler(DBHandler):
|
|
|
38
58
|
host=self.connection_dto.host,
|
|
39
59
|
port=self.connection_dto.port,
|
|
40
60
|
user=self.connection_dto.user,
|
|
61
|
+
database=self.connection_dto.database_name,
|
|
41
62
|
password=self.connection_dto.password,
|
|
42
63
|
extra=self.connection_dto.additional_params,
|
|
43
64
|
spark=spark,
|
|
@@ -54,6 +75,7 @@ class ClickhouseHandler(DBHandler):
|
|
|
54
75
|
(col for col in normalized_df.columns if col.lower().endswith("id")),
|
|
55
76
|
normalized_df.columns[0], # if there is no column with "id", take the first column
|
|
56
77
|
)
|
|
78
|
+
normalized_df = self._normalize_column_to_non_nullable(normalized_df, sort_column)
|
|
57
79
|
self.transfer_dto.options["createTableOptions"] = (
|
|
58
80
|
f"ENGINE = MergeTree() ORDER BY {self._quote_field(sort_column)}"
|
|
59
81
|
)
|
|
@@ -73,6 +95,36 @@ class ClickhouseHandler(DBHandler):
|
|
|
73
95
|
df = df.withColumnRenamed(column_name, column_name.lower())
|
|
74
96
|
return df
|
|
75
97
|
|
|
98
|
+
def _normalize_column_to_non_nullable(self, df: DataFrame, column: str) -> DataFrame:
|
|
99
|
+
"""Rewrite ``column`` with ``coalesce`` so Spark marks it non-nullable.
|
|
100
|
+
|
|
101
|
+
TODO: remove this workaround if Spark infers ``nullable=false`` without a dummy literal:
|
|
102
|
+
https://issues.apache.org/jira/browse/SPARK-54302
|
|
103
|
+
"""
|
|
104
|
+
field = df.schema[column]
|
|
105
|
+
if not field.nullable:
|
|
106
|
+
return df
|
|
107
|
+
|
|
108
|
+
field_type: DataType = field.dataType
|
|
109
|
+
sentinel: Column
|
|
110
|
+
if isinstance(field_type, (ByteType, ShortType, IntegerType, LongType, FloatType, DoubleType, BooleanType)):
|
|
111
|
+
sentinel = F.lit(0).cast(field_type)
|
|
112
|
+
elif isinstance(field_type, DecimalType):
|
|
113
|
+
sentinel = F.lit(Decimal(0)).cast(field_type)
|
|
114
|
+
elif isinstance(field_type, StringType):
|
|
115
|
+
sentinel = F.lit("")
|
|
116
|
+
elif isinstance(field_type, (DateType, TimestampType, TimestampNTZType)):
|
|
117
|
+
sentinel = F.lit(datetime(1970, 1, 1, 0, 0, 0, tzinfo=UTC)).cast(field_type)
|
|
118
|
+
elif isinstance(field_type, ArrayType):
|
|
119
|
+
sentinel = F.array().cast(field_type)
|
|
120
|
+
elif isinstance(field_type, MapType):
|
|
121
|
+
sentinel = F.map_from_arrays(F.array(), F.array()).cast(field_type)
|
|
122
|
+
else:
|
|
123
|
+
msg = f"Unsupported Spark type for non-null: {field_type!r} (column {column!r})"
|
|
124
|
+
raise TypeError(msg)
|
|
125
|
+
|
|
126
|
+
return df.withColumn(column, F.coalesce(F.col(column), sentinel))
|
|
127
|
+
|
|
76
128
|
def _make_rows_filter_expression(self, filters: list[dict]) -> str | None:
|
|
77
129
|
expressions = []
|
|
78
130
|
for filter_ in filters:
|
|
@@ -31,7 +31,7 @@ def get_packages(connection_types: set[str]) -> list[str]:
|
|
|
31
31
|
if connection_types & {"oracle", "all"}:
|
|
32
32
|
result.extend(Oracle.get_packages())
|
|
33
33
|
if connection_types & {"clickhouse", "all"}:
|
|
34
|
-
result.append("io.github.mtsongithub.doetl:spark-dialect-extension_2.12:0.0.
|
|
34
|
+
result.append("io.github.mtsongithub.doetl:spark-dialect-extension_2.12:0.0.4")
|
|
35
35
|
result.extend(Clickhouse.get_packages())
|
|
36
36
|
if connection_types & {"mssql", "all"}:
|
|
37
37
|
result.extend(MSSQL.get_packages())
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.3.2
|
|
File without changes
|
{data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/data_syncmaster.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/migrations/versions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/credentials_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/db/repositories/repository_with_owner.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_syncmaster-0.3.2 → data_syncmaster-0.3.3}/syncmaster/errors/schemas/invalid_request.py
RENAMED
|
File without changes
|