data-syncmaster 0.2.1__tar.gz → 0.2.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.2.1 → data_syncmaster-0.2.3}/PKG-INFO +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/pyproject.toml +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/__init__.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0002_create_group_table.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0004_create_connection_table.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/connection.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/group.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/group.py +1 -2
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/queue.py +2 -2
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/group.py +0 -4
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/__init__.py +0 -2
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/clickhouse.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/connection.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/connection_base.py +3 -3
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/ftp.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/ftps.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/hdfs.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/hive.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/mssql.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/mysql.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/oracle.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/postgres.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/s3.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/samba.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/sftp.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/webdav.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/groups.py +3 -3
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/queue.py +18 -6
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/__init__.py +11 -11
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/base.py +2 -2
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/transformations/dataframe_columns_filter.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/transformations/dataframe_rows_filter.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/transformations/file_metadata_filter.py +1 -1
- data_syncmaster-0.2.3/syncmaster/schemas/v1/types.py +7 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/users.py +1 -5
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/groups.py +2 -2
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/queue.py +1 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/handler.py +0 -8
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/auth/keycloak.py +5 -5
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/cors.py +21 -9
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/log/colored.yml +5 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/log/json.yml +5 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/log/plain.yml +5 -1
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/hdfs.py +2 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/spark.py +15 -4
- data_syncmaster-0.2.3/syncmaster/worker/transfer.py +106 -0
- data_syncmaster-0.2.1/syncmaster/schemas/v1/types.py +0 -5
- data_syncmaster-0.2.1/syncmaster/worker/transfer.py +0 -87
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/LICENSE.txt +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/README.rst +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/factory.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/README +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/__main__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/alembic.ini +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/env.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/script.py.mako +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0001_create_user_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0003_create_queue_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0005_create_user_group_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0006_create_auth_data_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0007_create_transfer_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0008_create_run_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2023-11-23_0009_create_celery_tables.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2024-10-07_0010_add_pg_trgm_extension.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/2024-11-01_0011_create_apscheduler_table.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/migrations/versions/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/mixins/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/mixins/resource.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/mixins/timestamp.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/apscheduler_job.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/auth_data.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/queue.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/run.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/transfer.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/models/user.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/connection.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/credentials_repository.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/repository_with_owner.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/run.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/transfer.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/user.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/repositories/utils.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/db/utils.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/connections.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/runs.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/transfers.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/transfers_resources.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/dto/transfers_strategy.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/registration.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/schemas/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/schemas/bad_request.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/schemas/invalid_request.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/errors/schemas/not_authorized.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/auth.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/connection.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/credentials.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/queue.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/redirect.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/run.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/transfer.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/exceptions/user.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/__main__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/celery.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/settings/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/transfer_fetcher.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/transfer_job_manager.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/scheduler/utils.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/ping.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/auth/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/auth/basic.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/auth/s3.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/auth/samba.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/auth/token.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connection_types.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/file_formats.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/page.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfer_types.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/db.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/ftp.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/ftps.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/hdfs.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/s3.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/samba.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/sftp.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/webdav.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file_format.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/resources.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/run.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/strategy.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/transformations/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transformation_types.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/__main__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/monitoring.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/router.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/auth.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/connections.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/router.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/runs.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/transfers.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/api/v1/users.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/dependencies/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/dependencies/get_access_token.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/dependencies/stub.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/cors.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/monitoring/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/monitoring/metrics.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/openapi.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/request_id.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/session.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/middlewares/static_files.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/providers/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/providers/auth/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/providers/auth/base_provider.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/providers/auth/dummy_provider.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/providers/auth/keycloak_provider.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/scripts/export_openapi_schema.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/scripts/manage_superusers.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/services/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/services/get_user.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/services/unit_of_work.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/auth/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/auth/dummy.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/auth/jwt.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/monitoring.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/openapi.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/request_id.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/session.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/settings/server/static_files.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/utils/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/utils/jwt.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/utils/slug.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/server/utils/state.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/broker.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/credentials.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/database.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/settings/log/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/celery.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/controller.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/clickhouse.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/hive.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/mssql.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/mysql.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/oracle.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/db/postgres.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/base.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/ftp.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/ftps.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/local_df.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/remote_df.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/s3.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/samba.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/sftp.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/handlers/file/webdav.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/settings/__init__.py +0 -0
- {data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/worker/settings/hwm_store.py +0 -0
|
@@ -22,7 +22,7 @@ def upgrade():
|
|
|
22
22
|
op.create_table(
|
|
23
23
|
"group",
|
|
24
24
|
sa.Column("id", sa.BigInteger(), nullable=False),
|
|
25
|
-
sa.Column("name", sa.String(length=
|
|
25
|
+
sa.Column("name", sa.String(length=128), nullable=False),
|
|
26
26
|
sa.Column("description", sa.String(length=512), nullable=False),
|
|
27
27
|
sa.Column("owner_id", sa.BigInteger(), nullable=False),
|
|
28
28
|
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
|
|
@@ -30,7 +30,7 @@ def upgrade():
|
|
|
30
30
|
"connection",
|
|
31
31
|
sa.Column("id", sa.BigInteger(), nullable=False),
|
|
32
32
|
sa.Column("group_id", sa.BigInteger(), nullable=False),
|
|
33
|
-
sa.Column("type", sa.String(length=
|
|
33
|
+
sa.Column("type", sa.String(length=32), nullable=False),
|
|
34
34
|
sa.Column("name", sa.String(length=128), nullable=False),
|
|
35
35
|
sa.Column("description", sa.String(length=512), nullable=False),
|
|
36
36
|
sa.Column("data", sa.JSON(), nullable=False),
|
|
@@ -32,7 +32,7 @@ class ConnectionType(StrEnum):
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class Connection(Base, ResourceMixin, TimestampMixin):
|
|
35
|
-
type: Mapped[ConnectionType] = mapped_column(ChoiceType(ConnectionType, impl=String(
|
|
35
|
+
type: Mapped[ConnectionType] = mapped_column(ChoiceType(ConnectionType, impl=String(32)), nullable=False)
|
|
36
36
|
data: Mapped[dict[str, Any]] = mapped_column(JSON, nullable=False, default={})
|
|
37
37
|
|
|
38
38
|
group: Mapped[Group] = relationship("Group")
|
|
@@ -71,7 +71,7 @@ class GroupMemberRole(enum.StrEnum):
|
|
|
71
71
|
|
|
72
72
|
class Group(Base, TimestampMixin):
|
|
73
73
|
id: Mapped[int] = mapped_column(BigInteger, primary_key=True)
|
|
74
|
-
name: Mapped[str] = mapped_column(String(
|
|
74
|
+
name: Mapped[str] = mapped_column(String(128), nullable=False, unique=True)
|
|
75
75
|
description: Mapped[str] = mapped_column(String(512), nullable=False, default="")
|
|
76
76
|
owner_id: Mapped[int] = mapped_column(ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
77
77
|
|
|
@@ -15,7 +15,6 @@ from syncmaster.exceptions import EntityNotFoundError, SyncmasterError
|
|
|
15
15
|
from syncmaster.exceptions.group import (
|
|
16
16
|
AlreadyIsGroupMemberError,
|
|
17
17
|
AlreadyIsNotGroupMemberError,
|
|
18
|
-
GroupAdminNotFoundError,
|
|
19
18
|
GroupAlreadyExistsError,
|
|
20
19
|
GroupNotFoundError,
|
|
21
20
|
)
|
|
@@ -364,7 +363,7 @@ class GroupRepository(Repository[Group]):
|
|
|
364
363
|
constraint = err.__cause__.__cause__.constraint_name
|
|
365
364
|
|
|
366
365
|
if constraint == "fk__group__owner_id__user":
|
|
367
|
-
raise
|
|
366
|
+
raise UserNotFoundError from err
|
|
368
367
|
|
|
369
368
|
if constraint == "uq__group__name":
|
|
370
369
|
raise GroupAlreadyExistsError from err
|
|
@@ -73,10 +73,10 @@ class QueueRepository(RepositoryWithOwner[Queue]):
|
|
|
73
73
|
queue_data: UpdateQueueSchema,
|
|
74
74
|
) -> Queue:
|
|
75
75
|
try:
|
|
76
|
-
queue = await self.read_by_id(queue_id=queue_id)
|
|
77
76
|
return await self._update(
|
|
78
77
|
Queue.id == queue_id,
|
|
79
|
-
|
|
78
|
+
name=queue_data.name,
|
|
79
|
+
description=queue_data.description,
|
|
80
80
|
)
|
|
81
81
|
except IntegrityError as e:
|
|
82
82
|
self._raise_error(e)
|
|
@@ -55,7 +55,6 @@ from syncmaster.schemas.v1.users import (
|
|
|
55
55
|
FullUserSchema,
|
|
56
56
|
ReadGroupMember,
|
|
57
57
|
ReadUserSchema,
|
|
58
|
-
UpdateUserSchema,
|
|
59
58
|
UserPageSchema,
|
|
60
59
|
UserPageSchemaAsGroupMember,
|
|
61
60
|
)
|
|
@@ -100,7 +99,6 @@ __all__ = [
|
|
|
100
99
|
"JSONLine",
|
|
101
100
|
"Parquet",
|
|
102
101
|
"ReadUserSchema",
|
|
103
|
-
"UpdateUserSchema",
|
|
104
102
|
"FullUserSchema",
|
|
105
103
|
"ReadGroupMember",
|
|
106
104
|
"UserPageSchema",
|
{data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/clickhouse.py
RENAMED
|
@@ -29,7 +29,7 @@ class ReadClickhouseConnectionDataSchema(BaseModel):
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class CreateClickhouseConnectionSchema(CreateConnectionBaseSchema):
|
|
32
|
-
type: CLICKHOUSE_TYPE = Field(
|
|
32
|
+
type: CLICKHOUSE_TYPE = Field(description="Connection type")
|
|
33
33
|
data: CreateClickhouseConnectionDataSchema = Field(
|
|
34
34
|
...,
|
|
35
35
|
alias="connection_data",
|
{data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/connection_base.py
RENAMED
|
@@ -10,9 +10,9 @@ ReadConnectionAuthDataSchema = ReadBasicAuthSchema | ReadS3AuthSchema | ReadSamb
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class CreateConnectionBaseSchema(BaseModel):
|
|
13
|
-
group_id: int = Field(
|
|
14
|
-
name: NameConstr = Field(
|
|
15
|
-
description: str = Field(
|
|
13
|
+
group_id: int = Field(description="Connection owner group id")
|
|
14
|
+
name: NameConstr = Field(description="Connection name")
|
|
15
|
+
description: str = Field(description="Additional description")
|
|
16
16
|
|
|
17
17
|
model_config = ConfigDict(populate_by_name=True)
|
|
18
18
|
|
|
@@ -26,7 +26,7 @@ class ReadFTPConnectionDataSchema(BaseModel):
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class CreateFTPConnectionSchema(CreateConnectionBaseSchema):
|
|
29
|
-
type: FTP_TYPE = Field(
|
|
29
|
+
type: FTP_TYPE = Field(description="Connection type")
|
|
30
30
|
data: CreateFTPConnectionDataSchema = Field(
|
|
31
31
|
...,
|
|
32
32
|
alias="connection_data",
|
|
@@ -26,7 +26,7 @@ class ReadFTPSConnectionDataSchema(BaseModel):
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class CreateFTPSConnectionSchema(CreateConnectionBaseSchema):
|
|
29
|
-
type: FTPS_TYPE = Field(
|
|
29
|
+
type: FTPS_TYPE = Field(description="Connection type")
|
|
30
30
|
data: CreateFTPSConnectionDataSchema = Field(
|
|
31
31
|
...,
|
|
32
32
|
alias="connection_data",
|
|
@@ -24,7 +24,7 @@ class ReadHDFSConnectionDataSchema(BaseModel):
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CreateHDFSConnectionSchema(CreateConnectionBaseSchema):
|
|
27
|
-
type: HDFS_TYPE = Field(
|
|
27
|
+
type: HDFS_TYPE = Field(description="Connection type")
|
|
28
28
|
data: CreateHDFSConnectionDataSchema = Field(
|
|
29
29
|
...,
|
|
30
30
|
alias="connection_data",
|
|
@@ -24,7 +24,7 @@ class ReadHiveConnectionDataSchema(BaseModel):
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class CreateHiveConnectionSchema(CreateConnectionBaseSchema):
|
|
27
|
-
type: HIVE_TYPE = Field(
|
|
27
|
+
type: HIVE_TYPE = Field(description="Connection type")
|
|
28
28
|
data: CreateHiveConnectionDataSchema = Field(
|
|
29
29
|
...,
|
|
30
30
|
alias="connection_data",
|
|
@@ -29,7 +29,7 @@ class ReadMSSQLConnectionDataSchema(BaseModel):
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class CreateMSSQLConnectionSchema(CreateConnectionBaseSchema):
|
|
32
|
-
type: MSSQL_TYPE = Field(
|
|
32
|
+
type: MSSQL_TYPE = Field(description="Connection type")
|
|
33
33
|
data: CreateMSSQLConnectionDataSchema = Field(
|
|
34
34
|
...,
|
|
35
35
|
alias="connection_data",
|
|
@@ -29,7 +29,7 @@ class ReadMySQLConnectionDataSchema(BaseModel):
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class CreateMySQLConnectionSchema(CreateConnectionBaseSchema):
|
|
32
|
-
type: MYSQL_TYPE = Field(
|
|
32
|
+
type: MYSQL_TYPE = Field(description="Connection type")
|
|
33
33
|
data: CreateMySQLConnectionDataSchema = Field(
|
|
34
34
|
...,
|
|
35
35
|
alias="connection_data",
|
|
@@ -39,7 +39,7 @@ class ReadOracleConnectionDataSchema(BaseModel):
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class CreateOracleConnectionSchema(CreateConnectionBaseSchema):
|
|
42
|
-
type: ORACLE_TYPE = Field(
|
|
42
|
+
type: ORACLE_TYPE = Field(description="Connection type")
|
|
43
43
|
data: CreateOracleConnectionDataSchema = Field(
|
|
44
44
|
...,
|
|
45
45
|
alias="connection_data",
|
{data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/connections/postgres.py
RENAMED
|
@@ -30,7 +30,7 @@ class ReadPostgresConnectionDataSchema(BaseModel):
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class CreatePostgresConnectionSchema(CreateConnectionBaseSchema):
|
|
33
|
-
type: POSTGRES_TYPE = Field(
|
|
33
|
+
type: POSTGRES_TYPE = Field(description="Connection type")
|
|
34
34
|
data: CreatePostgresConnectionDataSchema = Field(
|
|
35
35
|
...,
|
|
36
36
|
alias="connection_data",
|
|
@@ -46,7 +46,7 @@ class ReadS3ConnectionDataSchema(BaseModel):
|
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class CreateS3ConnectionSchema(CreateConnectionBaseSchema):
|
|
49
|
-
type: S3_TYPE = Field(
|
|
49
|
+
type: S3_TYPE = Field(description="Connection type")
|
|
50
50
|
data: CreateS3ConnectionDataSchema = Field(
|
|
51
51
|
...,
|
|
52
52
|
alias="connection_data",
|
|
@@ -33,7 +33,7 @@ class ReadSambaConnectionDataSchema(BaseModel):
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class CreateSambaConnectionSchema(CreateConnectionBaseSchema):
|
|
36
|
-
type: SAMBA_TYPE = Field(
|
|
36
|
+
type: SAMBA_TYPE = Field(description="Connection type")
|
|
37
37
|
data: CreateSambaConnectionDataSchema = Field(
|
|
38
38
|
...,
|
|
39
39
|
alias="connection_data",
|
|
@@ -26,7 +26,7 @@ class ReadSFTPConnectionDataSchema(BaseModel):
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class CreateSFTPConnectionSchema(CreateConnectionBaseSchema):
|
|
29
|
-
type: SFTP_TYPE = Field(
|
|
29
|
+
type: SFTP_TYPE = Field(description="Connection type")
|
|
30
30
|
data: CreateSFTPConnectionDataSchema = Field(
|
|
31
31
|
...,
|
|
32
32
|
alias="connection_data",
|
|
@@ -30,7 +30,7 @@ class ReadWebDAVConnectionDataSchema(BaseModel):
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class CreateWebDAVConnectionSchema(CreateConnectionBaseSchema):
|
|
33
|
-
type: WEBDAV_TYPE = Field(
|
|
33
|
+
type: WEBDAV_TYPE = Field(description="Connection type")
|
|
34
34
|
data: CreateWebDAVConnectionDataSchema = Field(
|
|
35
35
|
...,
|
|
36
36
|
alias="connection_data",
|
|
@@ -8,13 +8,13 @@ from syncmaster.schemas.v1.types import NameConstr
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class UpdateGroupSchema(BaseModel):
|
|
11
|
-
name: NameConstr
|
|
11
|
+
name: NameConstr
|
|
12
12
|
description: str
|
|
13
13
|
owner_id: int
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class CreateGroupSchema(BaseModel):
|
|
17
|
-
name: NameConstr
|
|
17
|
+
name: NameConstr
|
|
18
18
|
description: str
|
|
19
19
|
|
|
20
20
|
|
|
@@ -40,7 +40,7 @@ class AddUserSchema(BaseModel):
|
|
|
40
40
|
|
|
41
41
|
class ReadGroupSchema(BaseModel):
|
|
42
42
|
id: int
|
|
43
|
-
name:
|
|
43
|
+
name: str
|
|
44
44
|
description: str
|
|
45
45
|
owner_id: int
|
|
46
46
|
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
3
|
+
import re
|
|
4
|
+
from typing import Annotated
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field, StringConstraints, computed_field
|
|
4
7
|
|
|
5
8
|
from syncmaster.schemas.v1.page import PageSchema
|
|
6
9
|
|
|
10
|
+
ALLOWED_PATTERN = re.compile(r"^[ -~]+$")
|
|
11
|
+
RESTRICTED_PATTERN = re.compile(r"[^a-zA-Z0-9]+")
|
|
12
|
+
|
|
13
|
+
QueueName = Annotated[
|
|
14
|
+
str,
|
|
15
|
+
StringConstraints(min_length=3, max_length=128, pattern=ALLOWED_PATTERN), # noqa: WPS432
|
|
16
|
+
]
|
|
17
|
+
|
|
7
18
|
|
|
8
19
|
class CreateQueueSchema(BaseModel):
|
|
9
|
-
name:
|
|
10
|
-
...,
|
|
20
|
+
name: QueueName = Field(
|
|
11
21
|
description="Queue name that allows letters, numbers, dashes, and underscores",
|
|
12
22
|
)
|
|
13
|
-
group_id: int = Field(
|
|
23
|
+
group_id: int = Field(description="Queue owner group id")
|
|
14
24
|
description: str = Field(default="", description="Additional description")
|
|
15
25
|
|
|
16
26
|
@computed_field
|
|
17
27
|
@property
|
|
18
28
|
def slug(self) -> str:
|
|
19
|
-
|
|
29
|
+
short_name = RESTRICTED_PATTERN.sub("_", self.name.lower()).strip("_")
|
|
30
|
+
return f"{self.group_id}-{short_name}"
|
|
20
31
|
|
|
21
32
|
|
|
22
33
|
class ReadQueueSchema(BaseModel):
|
|
@@ -34,4 +45,5 @@ class QueuePageSchema(PageSchema):
|
|
|
34
45
|
|
|
35
46
|
|
|
36
47
|
class UpdateQueueSchema(BaseModel):
|
|
37
|
-
|
|
48
|
+
name: QueueName
|
|
49
|
+
description: str = ""
|
|
@@ -142,9 +142,9 @@ TransformationSchema = DataframeRowsFilter | DataframeColumnsFilter | FileMetada
|
|
|
142
142
|
class CopyTransferSchema(BaseModel):
|
|
143
143
|
new_group_id: int
|
|
144
144
|
new_queue_id: int
|
|
145
|
-
new_source_connection_name: NameConstr | None = None
|
|
146
|
-
new_target_connection_name: NameConstr | None = None
|
|
147
|
-
new_name: NameConstr | None = None
|
|
145
|
+
new_source_connection_name: NameConstr | None = None
|
|
146
|
+
new_target_connection_name: NameConstr | None = None
|
|
147
|
+
new_name: NameConstr | None = None
|
|
148
148
|
remove_source: bool = False
|
|
149
149
|
|
|
150
150
|
|
|
@@ -176,14 +176,14 @@ class ReadTransferSchema(BaseModel):
|
|
|
176
176
|
|
|
177
177
|
|
|
178
178
|
class CreateTransferSchema(BaseModel):
|
|
179
|
-
group_id: int = Field(
|
|
180
|
-
source_connection_id: int = Field(
|
|
181
|
-
target_connection_id: int = Field(
|
|
182
|
-
name: NameConstr = Field(
|
|
183
|
-
description: str = Field(
|
|
184
|
-
is_scheduled: bool = Field(
|
|
185
|
-
queue_id: int = Field(
|
|
186
|
-
schedule: str | None = Field(None, description="Execution schedule in cron format")
|
|
179
|
+
group_id: int = Field(description="Transfer owner group id")
|
|
180
|
+
source_connection_id: int = Field(description="id of the connection that will be the data source")
|
|
181
|
+
target_connection_id: int = Field(description="id of the connection that will be the data receiver")
|
|
182
|
+
name: NameConstr = Field(description="Transfer name")
|
|
183
|
+
description: str = Field(description="Additional description")
|
|
184
|
+
is_scheduled: bool = Field(description="Is the transfer on schedule")
|
|
185
|
+
queue_id: int = Field(description="id of the queue in which the transfer will be performed")
|
|
186
|
+
schedule: str | None = Field(default=None, description="Execution schedule in cron format")
|
|
187
187
|
source_params: CreateTransferSchemaSource = Field(
|
|
188
188
|
...,
|
|
189
189
|
discriminator="type",
|
{data_syncmaster-0.2.1 → data_syncmaster-0.2.3}/syncmaster/schemas/v1/transfers/file/base.py
RENAMED
|
@@ -23,7 +23,7 @@ from syncmaster.schemas.v1.transfers.file_format import (
|
|
|
23
23
|
# classes are identical but may change in the future
|
|
24
24
|
class ReadFileTransferSource(BaseModel):
|
|
25
25
|
directory_path: str
|
|
26
|
-
file_format: CSV | JSONLine | JSON | Excel | XML | ORC | Parquet = Field(
|
|
26
|
+
file_format: CSV | JSONLine | JSON | Excel | XML | ORC | Parquet = Field(discriminator="type")
|
|
27
27
|
options: dict[str, Any]
|
|
28
28
|
|
|
29
29
|
|
|
@@ -42,7 +42,7 @@ class ReadFileTransferTarget(BaseModel):
|
|
|
42
42
|
# classes are identical but may change in the future
|
|
43
43
|
class CreateFileTransferSource(BaseModel):
|
|
44
44
|
directory_path: str
|
|
45
|
-
file_format: CSV | JSONLine | JSON | Excel | XML | ORC | Parquet = Field(
|
|
45
|
+
file_format: CSV | JSONLine | JSON | Excel | XML | ORC | Parquet = Field(discriminator="type")
|
|
46
46
|
options: dict[str, Any] = Field(default_factory=dict)
|
|
47
47
|
|
|
48
48
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
@@ -30,4 +30,4 @@ ColumnsFilter = IncludeFilter | RenameFilter | CastFilter
|
|
|
30
30
|
|
|
31
31
|
class DataframeColumnsFilter(BaseModel):
|
|
32
32
|
type: DATAFRAME_COLUMNS_FILTER
|
|
33
|
-
filters: list[Annotated[ColumnsFilter, Field(
|
|
33
|
+
filters: list[Annotated[ColumnsFilter, Field(discriminator="type")]] = Field(default_factory=list)
|
|
@@ -93,4 +93,4 @@ RowsFilter = (
|
|
|
93
93
|
|
|
94
94
|
class DataframeRowsFilter(BaseModel):
|
|
95
95
|
type: DATAFRAME_ROWS_FILTER
|
|
96
|
-
filters: list[Annotated[RowsFilter, Field(
|
|
96
|
+
filters: list[Annotated[RowsFilter, Field(discriminator="type")]] = Field(default_factory=list)
|
|
@@ -50,4 +50,4 @@ MetadataFilter = NameGlobFilter | NameRegexpFilter | FileSizeMinFilter | FileSiz
|
|
|
50
50
|
|
|
51
51
|
class FileMetadataFilter(BaseModel):
|
|
52
52
|
type: FILE_METADATA_FILTER
|
|
53
|
-
filters: list[Annotated[MetadataFilter, Field(
|
|
53
|
+
filters: list[Annotated[MetadataFilter, Field(discriminator="type")]] = Field(default_factory=list)
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
from pydantic import BaseModel, ConfigDict
|
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
|
4
4
|
|
|
5
5
|
from syncmaster.db.models import GroupMemberRole
|
|
6
6
|
from syncmaster.db.utils import Pagination
|
|
7
7
|
from syncmaster.schemas.v1.page import MetaPageSchema, PageSchema
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
class UpdateUserSchema(BaseModel):
|
|
11
|
-
username: constr(pattern=r"^[_a-z0-9]+$") # noqa: F722
|
|
12
|
-
|
|
13
|
-
|
|
14
10
|
class ReadGroupMember(BaseModel):
|
|
15
11
|
id: int
|
|
16
12
|
username: str
|
|
@@ -92,7 +92,7 @@ async def read_group(
|
|
|
92
92
|
)
|
|
93
93
|
|
|
94
94
|
|
|
95
|
-
@router.
|
|
95
|
+
@router.put("/groups/{group_id}")
|
|
96
96
|
async def update_group( # noqa: WPS217
|
|
97
97
|
group_id: int,
|
|
98
98
|
group_data: UpdateGroupSchema,
|
|
@@ -173,7 +173,7 @@ async def read_group_users(
|
|
|
173
173
|
return UserPageSchemaAsGroupMember.from_pagination(pagination=pagination)
|
|
174
174
|
|
|
175
175
|
|
|
176
|
-
@router.
|
|
176
|
+
@router.put("/groups/{group_id}/users/{user_id}")
|
|
177
177
|
async def update_user_role_group(
|
|
178
178
|
group_id: int,
|
|
179
179
|
user_id: int,
|
|
@@ -94,7 +94,7 @@ async def create_queue(
|
|
|
94
94
|
return ReadQueueSchema.model_validate(queue, from_attributes=True)
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
@router.
|
|
97
|
+
@router.put("/queues/{queue_id}", description="Updating queue information")
|
|
98
98
|
async def update_queue(
|
|
99
99
|
queue_id: int,
|
|
100
100
|
queue_data: UpdateQueueSchema,
|
|
@@ -25,7 +25,6 @@ from syncmaster.exceptions.group import (
|
|
|
25
25
|
AlreadyIsGroupMemberError,
|
|
26
26
|
AlreadyIsGroupOwnerError,
|
|
27
27
|
AlreadyIsNotGroupMemberError,
|
|
28
|
-
GroupAdminNotFoundError,
|
|
29
28
|
GroupAlreadyExistsError,
|
|
30
29
|
GroupNotFoundError,
|
|
31
30
|
)
|
|
@@ -165,13 +164,6 @@ async def syncmsater_exception_handler(request: Request, exc: SyncmasterError):
|
|
|
165
164
|
content=content,
|
|
166
165
|
)
|
|
167
166
|
|
|
168
|
-
if isinstance(exc, GroupAdminNotFoundError):
|
|
169
|
-
content.code = "not_found"
|
|
170
|
-
content.message = "Admin not found"
|
|
171
|
-
return exception_json_response(
|
|
172
|
-
status=status.HTTP_404_NOT_FOUND,
|
|
173
|
-
content=content,
|
|
174
|
-
)
|
|
175
167
|
if isinstance(exc, GroupAlreadyExistsError):
|
|
176
168
|
content.code = "conflict"
|
|
177
169
|
content.message = "Group name already taken"
|
|
@@ -5,11 +5,11 @@ from pydantic import BaseModel, Field, SecretStr
|
|
|
5
5
|
|
|
6
6
|
class KeycloakSettings(BaseModel):
|
|
7
7
|
|
|
8
|
-
server_url: str = Field(
|
|
9
|
-
client_id: str = Field(
|
|
10
|
-
realm_name: str = Field(
|
|
11
|
-
client_secret: SecretStr = Field(
|
|
12
|
-
redirect_uri: str = Field(
|
|
8
|
+
server_url: str = Field(description="Keycloak server URL")
|
|
9
|
+
client_id: str = Field(description="Keycloak client ID")
|
|
10
|
+
realm_name: str = Field(description="Keycloak realm name")
|
|
11
|
+
client_secret: SecretStr = Field(description="Keycloak client secret")
|
|
12
|
+
redirect_uri: str = Field(description="Redirect URI")
|
|
13
13
|
verify_ssl: bool = Field(True, description="Verify SSL certificates")
|
|
14
14
|
scope: str = Field("openid", description="Keycloak scope")
|
|
15
15
|
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import json
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
6
9
|
|
|
7
10
|
|
|
8
11
|
class CORSSettings(BaseModel):
|
|
@@ -23,20 +26,20 @@ class CORSSettings(BaseModel):
|
|
|
23
26
|
.. code-block:: bash
|
|
24
27
|
|
|
25
28
|
SYNCMASTER__SERVER__CORS__ENABLED=True
|
|
26
|
-
SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=
|
|
27
|
-
SYNCMASTER__SERVER__CORS__ALLOW_METHODS=
|
|
28
|
-
SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=
|
|
29
|
-
SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=
|
|
29
|
+
SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS="*"
|
|
30
|
+
SYNCMASTER__SERVER__CORS__ALLOW_METHODS="*"
|
|
31
|
+
SYNCMASTER__SERVER__CORS__ALLOW_HEADERS="*"
|
|
32
|
+
SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=X-Request-ID,Location,Access-Control-Allow-Credentials
|
|
30
33
|
|
|
31
34
|
For production environment:
|
|
32
35
|
|
|
33
36
|
.. code-block:: bash
|
|
34
37
|
|
|
35
38
|
SYNCMASTER__SERVER__CORS__ENABLED=True
|
|
36
|
-
SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=
|
|
37
|
-
SYNCMASTER__SERVER__CORS__ALLOW_METHODS=
|
|
38
|
-
SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=
|
|
39
|
-
SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=
|
|
39
|
+
SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS="production.example.com"
|
|
40
|
+
SYNCMASTER__SERVER__CORS__ALLOW_METHODS="GET"
|
|
41
|
+
SYNCMASTER__SERVER__CORS__ALLOW_HEADERS="X-Request-ID,X-Request-With"
|
|
42
|
+
SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS="X-Request-ID"
|
|
40
43
|
# custom option passed directly to middleware
|
|
41
44
|
SYNCMASTER__SERVER__CORS__MAX_AGE=600
|
|
42
45
|
"""
|
|
@@ -55,4 +58,13 @@ class CORSSettings(BaseModel):
|
|
|
55
58
|
)
|
|
56
59
|
expose_headers: list[str] = Field(default=["X-Request-ID"], description="HTTP headers exposed from server")
|
|
57
60
|
|
|
61
|
+
@field_validator("allow_origins", "allow_methods", "allow_headers", "expose_headers", mode="before")
|
|
62
|
+
@classmethod
|
|
63
|
+
def _validate_bootstrap_servers(cls, value: Any):
|
|
64
|
+
if not isinstance(value, str):
|
|
65
|
+
return value
|
|
66
|
+
if "[" in value:
|
|
67
|
+
return json.loads(value)
|
|
68
|
+
return [item.strip() for item in value.split(",")]
|
|
69
|
+
|
|
58
70
|
model_config = ConfigDict(extra="allow")
|
|
@@ -40,7 +40,7 @@ loggers:
|
|
|
40
40
|
level: INFO
|
|
41
41
|
propagate: false
|
|
42
42
|
celery:
|
|
43
|
-
level:
|
|
43
|
+
level: INFO
|
|
44
44
|
handlers: [celery]
|
|
45
45
|
propagate: false
|
|
46
46
|
scheduler:
|
|
@@ -51,3 +51,7 @@ loggers:
|
|
|
51
51
|
handlers: [main]
|
|
52
52
|
level: WARNING
|
|
53
53
|
propagate: false
|
|
54
|
+
hdfs.client:
|
|
55
|
+
handlers: [main]
|
|
56
|
+
level: WARNING
|
|
57
|
+
propagate: false
|
|
@@ -39,7 +39,7 @@ loggers:
|
|
|
39
39
|
level: INFO
|
|
40
40
|
propagate: false
|
|
41
41
|
celery:
|
|
42
|
-
level:
|
|
42
|
+
level: INFO
|
|
43
43
|
handlers: [celery]
|
|
44
44
|
propagate: false
|
|
45
45
|
scheduler:
|
|
@@ -50,3 +50,7 @@ loggers:
|
|
|
50
50
|
handlers: [main]
|
|
51
51
|
level: WARNING
|
|
52
52
|
propagate: false
|
|
53
|
+
hdfs.client:
|
|
54
|
+
handlers: [main]
|
|
55
|
+
level: WARNING
|
|
56
|
+
propagate: false
|
|
@@ -40,7 +40,7 @@ loggers:
|
|
|
40
40
|
level: INFO
|
|
41
41
|
propagate: false
|
|
42
42
|
celery:
|
|
43
|
-
level:
|
|
43
|
+
level: INFO
|
|
44
44
|
handlers: [celery]
|
|
45
45
|
propagate: false
|
|
46
46
|
scheduler:
|
|
@@ -51,3 +51,7 @@ loggers:
|
|
|
51
51
|
handlers: [main]
|
|
52
52
|
level: WARNING
|
|
53
53
|
propagate: false
|
|
54
|
+
hdfs.client:
|
|
55
|
+
handlers: [main]
|
|
56
|
+
level: WARNING
|
|
57
|
+
propagate: false
|