data-syncmaster 0.2.0__tar.gz → 0.2.2__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.0 → data_syncmaster-0.2.2}/PKG-INFO +6 -10
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/README.rst +4 -4
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/pyproject.toml +2 -6
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/__init__.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0002_create_group_table.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0004_create_connection_table.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/connection.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/group.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/group.py +1 -2
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/queue.py +2 -2
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/group.py +0 -4
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/__init__.py +0 -2
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/clickhouse.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/connection.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/connection_base.py +3 -3
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/ftp.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/ftps.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/hdfs.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/hive.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/mssql.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/mysql.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/oracle.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/postgres.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/s3.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/samba.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/sftp.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/webdav.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/groups.py +3 -3
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/queue.py +18 -6
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/__init__.py +11 -11
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/base.py +2 -2
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/dataframe_columns_filter.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/dataframe_rows_filter.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/file_metadata_filter.py +1 -1
- data_syncmaster-0.2.2/syncmaster/schemas/v1/types.py +7 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/users.py +1 -5
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/__init__.py +3 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/groups.py +2 -2
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/queue.py +1 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/handler.py +0 -8
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/static_files.py +2 -1
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/keycloak.py +5 -5
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/cors.py +21 -9
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/hdfs.py +2 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/spark.py +15 -4
- data_syncmaster-0.2.0/syncmaster/schemas/v1/types.py +0 -5
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/LICENSE.txt +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/factory.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/README +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/__main__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/alembic.ini +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/env.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/script.py.mako +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0001_create_user_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0003_create_queue_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0005_create_user_group_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0006_create_auth_data_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0007_create_transfer_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0008_create_run_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0009_create_celery_tables.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2024-10-07_0010_add_pg_trgm_extension.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2024-11-01_0011_create_apscheduler_table.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/resource.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/timestamp.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/apscheduler_job.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/auth_data.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/queue.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/run.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/transfer.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/user.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/connection.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/credentials_repository.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/repository_with_owner.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/run.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/transfer.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/user.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/utils.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/utils.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/connections.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/runs.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers_resources.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers_strategy.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/registration.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/bad_request.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/invalid_request.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/not_authorized.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/auth.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/connection.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/credentials.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/queue.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/redirect.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/run.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/transfer.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/user.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/__main__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/celery.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/settings/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/transfer_fetcher.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/transfer_job_manager.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/utils.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/ping.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/basic.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/s3.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/samba.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/token.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connection_types.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/file_formats.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/page.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfer_types.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/db.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/ftp.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/ftps.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/hdfs.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/s3.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/samba.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/sftp.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/webdav.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file_format.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/resources.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/run.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/strategy.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transformation_types.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/__main__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/monitoring.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/router.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/auth.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/connections.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/router.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/runs.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/transfers.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/users.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/get_access_token.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/stub.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/cors.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/monitoring/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/monitoring/metrics.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/openapi.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/request_id.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/session.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/base_provider.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/dummy_provider.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/keycloak_provider.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/scripts/export_openapi_schema.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/scripts/manage_superusers.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/get_user.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/unit_of_work.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/dummy.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/jwt.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/monitoring.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/openapi.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/request_id.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/session.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/static_files.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/jwt.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/slug.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/state.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/broker.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/credentials.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/database.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/colored.yml +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/json.yml +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/plain.yml +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/celery.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/controller.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/clickhouse.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/hive.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/mssql.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/mysql.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/oracle.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/postgres.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/base.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/ftp.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/ftps.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/local_df.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/remote_df.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/s3.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/samba.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/sftp.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/webdav.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/settings/__init__.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/settings/hwm_store.py +0 -0
- {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/transfer.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: data-syncmaster
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Syncmaster REST API + Worker
|
|
5
5
|
License: Apache-2.0
|
|
6
|
-
Keywords: Syncmaster,REST,API,Worker,
|
|
6
|
+
Keywords: Syncmaster,REST,API,Worker,Spark,Transfer,ETL
|
|
7
7
|
Author: DataOps.ETL
|
|
8
8
|
Author-email: onetools@mts.ru
|
|
9
9
|
Requires-Python: >=3.11,<4.0
|
|
@@ -19,10 +19,6 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
21
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
26
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
27
23
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
24
|
Classifier: Typing :: Typed
|
|
@@ -65,19 +61,19 @@ Description-Content-Type: text/x-rst
|
|
|
65
61
|
Data.SyncMaster
|
|
66
62
|
===============
|
|
67
63
|
|
|
68
|
-
|Repo Status| |PyPI| |PyPI License| |PyPI Python Version| |
|
|
69
|
-
|Build Status| |Coverage|
|
|
64
|
+
|Repo Status| |Docker image| |PyPI| |PyPI License| |PyPI Python Version| |Documentation|
|
|
65
|
+
|Build Status| |Coverage| |pre-commit.ci|
|
|
70
66
|
|
|
71
67
|
.. |Repo Status| image:: https://www.repostatus.org/badges/latest/wip.svg
|
|
72
68
|
:target: https://www.repostatus.org/#wip
|
|
69
|
+
.. |Docker image| image:: https://img.shields.io/docker/v/mtsrus/syncmaster-server?sort=semver&label=docker
|
|
70
|
+
:target: https://hub.docker.com/r/mtsrus/syncmaster-server
|
|
73
71
|
.. |PyPI| image:: https://img.shields.io/pypi/v/data-syncmaster
|
|
74
72
|
:target: https://pypi.org/project/data-syncmaster/
|
|
75
73
|
.. |PyPI License| image:: https://img.shields.io/pypi/l/data-syncmaster.svg
|
|
76
74
|
:target: https://github.com/MobileTeleSystems/syncmaster/blob/develop/LICENSE.txt
|
|
77
75
|
.. |PyPI Python Version| image:: https://img.shields.io/pypi/pyversions/data-syncmaster.svg
|
|
78
76
|
:target: https://badge.fury.io/py/data-syncmaster
|
|
79
|
-
.. |Docker image| image:: https://img.shields.io/docker/v/mtsrus/syncmaster-server?sort=semver&label=docker
|
|
80
|
-
:target: https://hub.docker.com/r/mtsrus/syncmaster-server
|
|
81
77
|
.. |Documentation| image:: https://readthedocs.org/projects/syncmaster/badge/?version=stable
|
|
82
78
|
:target: https://syncmaster.readthedocs.io
|
|
83
79
|
.. |Build Status| image:: https://github.com/MobileTeleSystems/syncmaster/workflows/Run%20All%20Tests/badge.svg
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
Data.SyncMaster
|
|
4
4
|
===============
|
|
5
5
|
|
|
6
|
-
|Repo Status| |PyPI| |PyPI License| |PyPI Python Version| |
|
|
7
|
-
|Build Status| |Coverage|
|
|
6
|
+
|Repo Status| |Docker image| |PyPI| |PyPI License| |PyPI Python Version| |Documentation|
|
|
7
|
+
|Build Status| |Coverage| |pre-commit.ci|
|
|
8
8
|
|
|
9
9
|
.. |Repo Status| image:: https://www.repostatus.org/badges/latest/wip.svg
|
|
10
10
|
:target: https://www.repostatus.org/#wip
|
|
11
|
+
.. |Docker image| image:: https://img.shields.io/docker/v/mtsrus/syncmaster-server?sort=semver&label=docker
|
|
12
|
+
:target: https://hub.docker.com/r/mtsrus/syncmaster-server
|
|
11
13
|
.. |PyPI| image:: https://img.shields.io/pypi/v/data-syncmaster
|
|
12
14
|
:target: https://pypi.org/project/data-syncmaster/
|
|
13
15
|
.. |PyPI License| image:: https://img.shields.io/pypi/l/data-syncmaster.svg
|
|
14
16
|
:target: https://github.com/MobileTeleSystems/syncmaster/blob/develop/LICENSE.txt
|
|
15
17
|
.. |PyPI Python Version| image:: https://img.shields.io/pypi/pyversions/data-syncmaster.svg
|
|
16
18
|
:target: https://badge.fury.io/py/data-syncmaster
|
|
17
|
-
.. |Docker image| image:: https://img.shields.io/docker/v/mtsrus/syncmaster-server?sort=semver&label=docker
|
|
18
|
-
:target: https://hub.docker.com/r/mtsrus/syncmaster-server
|
|
19
19
|
.. |Documentation| image:: https://readthedocs.org/projects/syncmaster/badge/?version=stable
|
|
20
20
|
:target: https://syncmaster.readthedocs.io
|
|
21
21
|
.. |Build Status| image:: https://github.com/MobileTeleSystems/syncmaster/workflows/Run%20All%20Tests/badge.svg
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "data-syncmaster"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
license = "Apache-2.0"
|
|
9
9
|
description = "Syncmaster REST API + Worker"
|
|
10
10
|
authors = ["DataOps.ETL <onetools@mts.ru>"]
|
|
@@ -18,10 +18,6 @@ classifiers = [
|
|
|
18
18
|
"License :: OSI Approved :: Apache Software License",
|
|
19
19
|
"Operating System :: OS Independent",
|
|
20
20
|
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
-
"Programming Language :: Python :: 3.7",
|
|
22
|
-
"Programming Language :: Python :: 3.8",
|
|
23
|
-
"Programming Language :: Python :: 3.9",
|
|
24
|
-
"Programming Language :: Python :: 3.10",
|
|
25
21
|
"Programming Language :: Python :: 3.11",
|
|
26
22
|
"Programming Language :: Python :: 3.12",
|
|
27
23
|
"Programming Language :: Python :: 3.13",
|
|
@@ -29,7 +25,7 @@ classifiers = [
|
|
|
29
25
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
30
26
|
"Typing :: Typed",
|
|
31
27
|
]
|
|
32
|
-
keywords = ["Syncmaster", "REST", "API", "Worker", "
|
|
28
|
+
keywords = ["Syncmaster", "REST", "API", "Worker", "Spark", "Transfer", "ETL"]
|
|
33
29
|
|
|
34
30
|
packages = [
|
|
35
31
|
{ include = "syncmaster" },
|
|
@@ -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.0 → data_syncmaster-0.2.2}/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.0 → data_syncmaster-0.2.2}/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.0 → data_syncmaster-0.2.2}/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.0 → data_syncmaster-0.2.2}/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
|
|
@@ -6,6 +6,7 @@ from fastapi.exceptions import RequestValidationError
|
|
|
6
6
|
from pydantic import ValidationError
|
|
7
7
|
from sqlalchemy.ext.asyncio import async_engine_from_config
|
|
8
8
|
|
|
9
|
+
from syncmaster import _raw_version as syncmaster_version
|
|
9
10
|
from syncmaster.db.factory import create_session_factory, get_uow
|
|
10
11
|
from syncmaster.exceptions import SyncmasterError
|
|
11
12
|
from syncmaster.server.api.router import api_router
|
|
@@ -34,7 +35,8 @@ def celery_factory(settings: Settings) -> Celery:
|
|
|
34
35
|
|
|
35
36
|
def application_factory(settings: Settings) -> FastAPI:
|
|
36
37
|
application = FastAPI(
|
|
37
|
-
title="
|
|
38
|
+
title="SyncMaster",
|
|
39
|
+
version=syncmaster_version,
|
|
38
40
|
debug=settings.server.debug,
|
|
39
41
|
# will be set up by middlewares
|
|
40
42
|
openapi_url=None,
|
|
@@ -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"
|
{data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/static_files.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
from fastapi import FastAPI
|
|
4
|
+
from starlette.staticfiles import StaticFiles
|
|
4
5
|
|
|
5
6
|
from syncmaster.server.settings.server.static_files import StaticFilesSettings
|
|
6
7
|
|
|
@@ -11,5 +12,5 @@ def apply_static_files(app: FastAPI, settings: StaticFilesSettings) -> FastAPI:
|
|
|
11
12
|
return app
|
|
12
13
|
|
|
13
14
|
# https://fastapi.tiangolo.com/how-to/custom-docs-ui-assets/#serve-the-static-files
|
|
14
|
-
|
|
15
|
+
app.mount("/static", StaticFiles(directory=settings.directory), name="static")
|
|
15
16
|
return app
|