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.
Files changed (222) hide show
  1. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/PKG-INFO +6 -10
  2. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/README.rst +4 -4
  3. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/pyproject.toml +2 -6
  4. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/__init__.py +1 -1
  5. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0002_create_group_table.py +1 -1
  6. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0004_create_connection_table.py +1 -1
  7. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/connection.py +1 -1
  8. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/group.py +1 -1
  9. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/group.py +1 -2
  10. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/queue.py +2 -2
  11. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/group.py +0 -4
  12. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/__init__.py +0 -2
  13. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/clickhouse.py +1 -1
  14. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/connection.py +1 -1
  15. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/connection_base.py +3 -3
  16. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/ftp.py +1 -1
  17. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/ftps.py +1 -1
  18. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/hdfs.py +1 -1
  19. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/hive.py +1 -1
  20. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/mssql.py +1 -1
  21. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/mysql.py +1 -1
  22. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/oracle.py +1 -1
  23. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/postgres.py +1 -1
  24. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/s3.py +1 -1
  25. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/samba.py +1 -1
  26. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/sftp.py +1 -1
  27. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/webdav.py +1 -1
  28. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/groups.py +3 -3
  29. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/queue.py +18 -6
  30. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/__init__.py +11 -11
  31. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/base.py +2 -2
  32. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/dataframe_columns_filter.py +1 -1
  33. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/dataframe_rows_filter.py +1 -1
  34. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/file_metadata_filter.py +1 -1
  35. data_syncmaster-0.2.2/syncmaster/schemas/v1/types.py +7 -0
  36. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/users.py +1 -5
  37. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/__init__.py +3 -1
  38. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/groups.py +2 -2
  39. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/queue.py +1 -1
  40. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/handler.py +0 -8
  41. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/static_files.py +2 -1
  42. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/keycloak.py +5 -5
  43. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/cors.py +21 -9
  44. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/hdfs.py +2 -0
  45. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/spark.py +15 -4
  46. data_syncmaster-0.2.0/syncmaster/schemas/v1/types.py +0 -5
  47. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/LICENSE.txt +0 -0
  48. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/__init__.py +0 -0
  49. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/factory.py +0 -0
  50. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/README +0 -0
  51. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/__main__.py +0 -0
  52. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/alembic.ini +0 -0
  53. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/env.py +0 -0
  54. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/script.py.mako +0 -0
  55. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0001_create_user_table.py +0 -0
  56. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0003_create_queue_table.py +0 -0
  57. {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
  58. {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
  59. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0007_create_transfer_table.py +0 -0
  60. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0008_create_run_table.py +0 -0
  61. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2023-11-23_0009_create_celery_tables.py +0 -0
  62. {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
  63. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/2024-11-01_0011_create_apscheduler_table.py +0 -0
  64. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/migrations/versions/__init__.py +0 -0
  65. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/__init__.py +0 -0
  66. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/resource.py +0 -0
  67. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/mixins/timestamp.py +0 -0
  68. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/__init__.py +0 -0
  69. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/apscheduler_job.py +0 -0
  70. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/auth_data.py +0 -0
  71. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/base.py +0 -0
  72. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/queue.py +0 -0
  73. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/run.py +0 -0
  74. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/transfer.py +0 -0
  75. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/models/user.py +0 -0
  76. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/__init__.py +0 -0
  77. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/base.py +0 -0
  78. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/connection.py +0 -0
  79. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/credentials_repository.py +0 -0
  80. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/repository_with_owner.py +0 -0
  81. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/run.py +0 -0
  82. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/transfer.py +0 -0
  83. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/user.py +0 -0
  84. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/repositories/utils.py +0 -0
  85. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/db/utils.py +0 -0
  86. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/__init__.py +0 -0
  87. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/connections.py +0 -0
  88. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/runs.py +0 -0
  89. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers.py +0 -0
  90. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers_resources.py +0 -0
  91. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/dto/transfers_strategy.py +0 -0
  92. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/__init__.py +0 -0
  93. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/base.py +0 -0
  94. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/registration.py +0 -0
  95. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/__init__.py +0 -0
  96. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/bad_request.py +0 -0
  97. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/invalid_request.py +0 -0
  98. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/errors/schemas/not_authorized.py +0 -0
  99. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/__init__.py +0 -0
  100. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/auth.py +0 -0
  101. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/base.py +0 -0
  102. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/connection.py +0 -0
  103. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/credentials.py +0 -0
  104. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/queue.py +0 -0
  105. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/redirect.py +0 -0
  106. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/run.py +0 -0
  107. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/transfer.py +0 -0
  108. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/exceptions/user.py +0 -0
  109. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/__init__.py +0 -0
  110. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/__main__.py +0 -0
  111. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/celery.py +0 -0
  112. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/settings/__init__.py +0 -0
  113. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/transfer_fetcher.py +0 -0
  114. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/transfer_job_manager.py +0 -0
  115. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/scheduler/utils.py +0 -0
  116. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/__init__.py +0 -0
  117. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/ping.py +0 -0
  118. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/__init__.py +0 -0
  119. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/basic.py +0 -0
  120. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/s3.py +0 -0
  121. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/samba.py +0 -0
  122. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/auth/token.py +0 -0
  123. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connection_types.py +0 -0
  124. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/connections/__init__.py +0 -0
  125. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/file_formats.py +0 -0
  126. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/page.py +0 -0
  127. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfer_types.py +0 -0
  128. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/db.py +0 -0
  129. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/__init__.py +0 -0
  130. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/ftp.py +0 -0
  131. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/ftps.py +0 -0
  132. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/hdfs.py +0 -0
  133. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/s3.py +0 -0
  134. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/samba.py +0 -0
  135. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/sftp.py +0 -0
  136. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file/webdav.py +0 -0
  137. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/file_format.py +0 -0
  138. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/resources.py +0 -0
  139. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/run.py +0 -0
  140. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/strategy.py +0 -0
  141. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transfers/transformations/__init__.py +0 -0
  142. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/schemas/v1/transformation_types.py +0 -0
  143. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/__main__.py +0 -0
  144. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/__init__.py +0 -0
  145. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/monitoring.py +0 -0
  146. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/router.py +0 -0
  147. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/__init__.py +0 -0
  148. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/auth.py +0 -0
  149. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/connections.py +0 -0
  150. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/router.py +0 -0
  151. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/runs.py +0 -0
  152. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/transfers.py +0 -0
  153. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/api/v1/users.py +0 -0
  154. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/__init__.py +0 -0
  155. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/get_access_token.py +0 -0
  156. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/dependencies/stub.py +0 -0
  157. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/__init__.py +0 -0
  158. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/cors.py +0 -0
  159. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/monitoring/__init__.py +0 -0
  160. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/monitoring/metrics.py +0 -0
  161. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/openapi.py +0 -0
  162. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/request_id.py +0 -0
  163. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/middlewares/session.py +0 -0
  164. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/__init__.py +0 -0
  165. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/__init__.py +0 -0
  166. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/base_provider.py +0 -0
  167. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/dummy_provider.py +0 -0
  168. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/providers/auth/keycloak_provider.py +0 -0
  169. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/scripts/export_openapi_schema.py +0 -0
  170. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/scripts/manage_superusers.py +0 -0
  171. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/__init__.py +0 -0
  172. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/get_user.py +0 -0
  173. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/services/unit_of_work.py +0 -0
  174. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/__init__.py +0 -0
  175. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/__init__.py +0 -0
  176. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/dummy.py +0 -0
  177. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/auth/jwt.py +0 -0
  178. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/__init__.py +0 -0
  179. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/monitoring.py +0 -0
  180. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/openapi.py +0 -0
  181. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/request_id.py +0 -0
  182. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/session.py +0 -0
  183. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/settings/server/static_files.py +0 -0
  184. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/__init__.py +0 -0
  185. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/jwt.py +0 -0
  186. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/slug.py +0 -0
  187. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/server/utils/state.py +0 -0
  188. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/__init__.py +0 -0
  189. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/broker.py +0 -0
  190. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/credentials.py +0 -0
  191. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/database.py +0 -0
  192. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/__init__.py +0 -0
  193. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/colored.yml +0 -0
  194. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/json.yml +0 -0
  195. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/settings/log/plain.yml +0 -0
  196. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/__init__.py +0 -0
  197. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/base.py +0 -0
  198. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/celery.py +0 -0
  199. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/controller.py +0 -0
  200. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/__init__.py +0 -0
  201. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/base.py +0 -0
  202. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/__init__.py +0 -0
  203. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/base.py +0 -0
  204. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/clickhouse.py +0 -0
  205. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/hive.py +0 -0
  206. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/mssql.py +0 -0
  207. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/mysql.py +0 -0
  208. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/oracle.py +0 -0
  209. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/db/postgres.py +0 -0
  210. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/__init__.py +0 -0
  211. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/base.py +0 -0
  212. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/ftp.py +0 -0
  213. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/ftps.py +0 -0
  214. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/local_df.py +0 -0
  215. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/remote_df.py +0 -0
  216. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/s3.py +0 -0
  217. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/samba.py +0 -0
  218. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/sftp.py +0 -0
  219. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/handlers/file/webdav.py +0 -0
  220. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/settings/__init__.py +0 -0
  221. {data_syncmaster-0.2.0 → data_syncmaster-0.2.2}/syncmaster/worker/settings/hwm_store.py +0 -0
  222. {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.0
3
+ Version: 0.2.2
4
4
  Summary: Syncmaster REST API + Worker
5
5
  License: Apache-2.0
6
- Keywords: Syncmaster,REST,API,Worker,Replication
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| |Docker image| |Documentation|
69
- |Build Status| |Coverage| |pre-commit.ci|
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| |Docker image| |Documentation|
7
- |Build Status| |Coverage| |pre-commit.ci|
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.0"
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", "Replication"]
28
+ keywords = ["Syncmaster", "REST", "API", "Worker", "Spark", "Transfer", "ETL"]
33
29
 
34
30
  packages = [
35
31
  { include = "syncmaster" },
@@ -1,6 +1,6 @@
1
1
  # SPDX-FileCopyrightText: 2023-2024 MTS PJSC
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
- _raw_version = "0.2.0"
4
+ _raw_version = "0.2.2"
5
5
  # version always contain only release number like 0.0.1
6
6
  __version__ = ".".join(_raw_version.split(".")[:3]) # noqa: WPS410
@@ -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=256), nullable=False),
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=23), nullable=False),
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(23)), nullable=False)
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(256), nullable=False, unique=True)
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 GroupAdminNotFoundError from err
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
- description=queue_data.description or queue.description,
78
+ name=queue_data.name,
79
+ description=queue_data.description,
80
80
  )
81
81
  except IntegrityError as e:
82
82
  self._raise_error(e)
@@ -7,10 +7,6 @@ class GroupNameAlreadyExistsError(SyncmasterError):
7
7
  pass
8
8
 
9
9
 
10
- class GroupAdminNotFoundError(SyncmasterError):
11
- pass
12
-
13
-
14
10
  class GroupAlreadyExistsError(SyncmasterError):
15
11
  pass
16
12
 
@@ -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",
@@ -29,7 +29,7 @@ class ReadClickhouseConnectionDataSchema(BaseModel):
29
29
 
30
30
 
31
31
  class CreateClickhouseConnectionSchema(CreateConnectionBaseSchema):
32
- type: CLICKHOUSE_TYPE = Field(..., description="Connection type")
32
+ type: CLICKHOUSE_TYPE = Field(description="Connection type")
33
33
  data: CreateClickhouseConnectionDataSchema = Field(
34
34
  ...,
35
35
  alias="connection_data",
@@ -125,7 +125,7 @@ UpdateConnectionSchema = Annotated[
125
125
 
126
126
  class ConnectionCopySchema(BaseModel):
127
127
  new_group_id: int
128
- new_name: NameConstr | None = None # noqa: F722
128
+ new_name: NameConstr | None = None
129
129
  remove_source: bool = False
130
130
 
131
131
 
@@ -10,9 +10,9 @@ ReadConnectionAuthDataSchema = ReadBasicAuthSchema | ReadS3AuthSchema | ReadSamb
10
10
 
11
11
 
12
12
  class CreateConnectionBaseSchema(BaseModel):
13
- group_id: int = Field(..., description="Connection owner group id")
14
- name: NameConstr = Field(..., description="Connection name") # noqa: F722
15
- description: str = Field(..., description="Additional description")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
42
+ type: ORACLE_TYPE = Field(description="Connection type")
43
43
  data: CreateOracleConnectionDataSchema = Field(
44
44
  ...,
45
45
  alias="connection_data",
@@ -30,7 +30,7 @@ class ReadPostgresConnectionDataSchema(BaseModel):
30
30
 
31
31
 
32
32
  class CreatePostgresConnectionSchema(CreateConnectionBaseSchema):
33
- type: POSTGRES_TYPE = Field(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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(..., description="Connection type")
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 # noqa: F722
11
+ name: NameConstr
12
12
  description: str
13
13
  owner_id: int
14
14
 
15
15
 
16
16
  class CreateGroupSchema(BaseModel):
17
- name: NameConstr # noqa: F722
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: NameConstr # noqa: F722
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
- from pydantic import BaseModel, ConfigDict, Field, computed_field, constr
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: constr(max_length=128, pattern=r"^[-_a-zA-Z0-9]+$") = Field( # noqa: F722, WPS432
10
- ...,
20
+ name: QueueName = Field(
11
21
  description="Queue name that allows letters, numbers, dashes, and underscores",
12
22
  )
13
- group_id: int = Field(..., description="Queue owner group id")
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
- return f"{self.group_id}-{self.name}"
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
- description: str | None = None
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 # noqa: F722
146
- new_target_connection_name: NameConstr | None = None # noqa: F722
147
- new_name: NameConstr | None = None # noqa: F722
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(..., 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") # noqa: F722
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(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",
@@ -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(..., discriminator="type")
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(..., discriminator="type")
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(..., discriminator="type")]] = Field(default_factory=list)
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(..., discriminator="type")]] = Field(default_factory=list)
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(..., discriminator="type")]] = Field(default_factory=list)
53
+ filters: list[Annotated[MetadataFilter, Field(discriminator="type")]] = Field(default_factory=list)
@@ -0,0 +1,7 @@
1
+ # SPDX-FileCopyrightText: 2023-2024 MTS PJSC
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ from typing import Annotated
4
+
5
+ from pydantic import StringConstraints
6
+
7
+ NameConstr = Annotated[str, StringConstraints(min_length=3, max_length=128)] # noqa: WPS432
@@ -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, constr
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="Syncmaster",
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.patch("/groups/{group_id}")
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.patch("/groups/{group_id}/users/{user_id}")
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.patch("/queues/{queue_id}", description="Updating queue information")
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"
@@ -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
- # app.mount("/static", StaticFiles(directory=settings.directory), name="static")
15
+ app.mount("/static", StaticFiles(directory=settings.directory), name="static")
15
16
  return app