Skip to content

Commit e843320

Browse files
author
Ilyas Gasanov
committed
[DOP-19902] Add MySQL API schema
1 parent 9a03779 commit e843320

File tree

15 files changed

+239
-8
lines changed

15 files changed

+239
-8
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ List of currently supported connections:
3737
* Postgres
3838
* Oracle
3939
* MSSQL
40+
* MySQL
4041
* HDFS
4142
* S3
4243

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add MySQL API schema

syncmaster/backend/api/v1/connections.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
HDFS_TYPE,
2323
HIVE_TYPE,
2424
MSSQL_TYPE,
25+
MYSQL_TYPE,
2526
ORACLE_TYPE,
2627
POSTGRES_TYPE,
2728
S3_TYPE,
@@ -39,7 +40,7 @@
3940

4041
router = APIRouter(tags=["Connections"], responses=get_error_responses())
4142

42-
CONNECTION_TYPES = ORACLE_TYPE, POSTGRES_TYPE, CLICKHOUSE_TYPE, HIVE_TYPE, MSSQL_TYPE, S3_TYPE, HDFS_TYPE
43+
CONNECTION_TYPES = ORACLE_TYPE, POSTGRES_TYPE, CLICKHOUSE_TYPE, HIVE_TYPE, MSSQL_TYPE, MYSQL_TYPE, S3_TYPE, HDFS_TYPE
4344

4445

4546
@router.get("/connections")

syncmaster/schemas/v1/connection_types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
POSTGRES_TYPE = Literal["postgres"]
99
CLICKHOUSE_TYPE = Literal["clickhouse"]
1010
MSSQL_TYPE = Literal["mssql"]
11+
MYSQL_TYPE = Literal["mysql"]
1112
S3_TYPE = Literal["s3"]
1213
HDFS_TYPE = Literal["hdfs"]
1314

@@ -18,5 +19,6 @@ class ConnectionType(str, Enum):
1819
ORACLE = "oracle"
1920
CLICKHOUSE = "clickhouse"
2021
MSSQL = "mssql"
22+
MYSQL = "mysql"
2123
S3 = "s3"
2224
HDFS = "hdfs"

syncmaster/schemas/v1/connections/connection.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@
3535
UpdateMSSQLAuthSchema,
3636
UpdateMSSQLConnectionSchema,
3737
)
38+
from syncmaster.schemas.v1.connections.mysql import (
39+
CreateMySQLAuthSchema,
40+
CreateMySQLConnectionSchema,
41+
ReadMySQLAuthSchema,
42+
ReadMySQLConnectionSchema,
43+
UpdateMySQLAuthSchema,
44+
UpdateMySQLConnectionSchema,
45+
)
3846
from syncmaster.schemas.v1.connections.oracle import (
3947
CreateOracleAuthSchema,
4048
CreateOracleConnectionSchema,
@@ -69,6 +77,7 @@
6977
| ReadPostgresConnectionSchema
7078
| ReadClickhouseConnectionSchema
7179
| ReadMSSQLConnectionSchema
80+
| ReadMySQLConnectionSchema
7281
| S3ReadConnectionSchema
7382
)
7483
CreateConnectionDataSchema = (
@@ -77,6 +86,7 @@
7786
| CreatePostgresConnectionSchema
7887
| CreateClickhouseConnectionSchema
7988
| CreateMSSQLConnectionSchema
89+
| CreateMySQLConnectionSchema
8090
| HDFSCreateConnectionSchema
8191
| S3CreateConnectionSchema
8292
)
@@ -88,13 +98,15 @@
8898
| UpdatePostgresConnectionSchema
8999
| UpdateClickhouseConnectionSchema
90100
| UpdateMSSQLConnectionSchema
101+
| UpdateMySQLConnectionSchema
91102
)
92103
ReadConnectionAuthDataSchema = (
93104
ReadHiveAuthSchema
94105
| ReadOracleAuthSchema
95106
| ReadPostgresAuthSchema
96107
| ReadClickhouseAuthSchema
97108
| ReadMSSQLAuthSchema
109+
| ReadMySQLAuthSchema
98110
| S3ReadAuthSchema
99111
| HDFSReadAuthSchema
100112
)
@@ -104,6 +116,7 @@
104116
| CreatePostgresAuthSchema
105117
| CreateClickhouseAuthSchema
106118
| CreateMSSQLAuthSchema
119+
| CreateMySQLAuthSchema
107120
| S3CreateAuthSchema
108121
| HDFSCreateAuthSchema
109122
)
@@ -113,6 +126,7 @@
113126
| UpdatePostgresAuthSchema
114127
| UpdateClickhouseAuthSchema
115128
| UpdateMSSQLAuthSchema
129+
| UpdateMySQLAuthSchema
116130
| S3UpdateAuthSchema
117131
| HDFSUpdateAuthSchema
118132
)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
2+
# SPDX-License-Identifier: Apache-2.0
3+
from pydantic import BaseModel, Field, SecretStr
4+
5+
from syncmaster.schemas.v1.connection_types import MYSQL_TYPE
6+
7+
8+
class MySQLBaseSchema(BaseModel):
9+
type: MYSQL_TYPE
10+
11+
class Config:
12+
from_attributes = True
13+
14+
15+
class ReadMySQLConnectionSchema(MySQLBaseSchema):
16+
host: str
17+
port: int
18+
database_name: str
19+
additional_params: dict = Field(default_factory=dict)
20+
21+
22+
class ReadMySQLAuthSchema(MySQLBaseSchema):
23+
user: str
24+
25+
26+
class UpdateMySQLConnectionSchema(MySQLBaseSchema):
27+
host: str | None = None
28+
port: int | None = None
29+
database_name: str | None = None
30+
additional_params: dict | None = Field(default_factory=dict)
31+
32+
33+
class UpdateMySQLAuthSchema(MySQLBaseSchema):
34+
user: str | None = None # noqa: F722
35+
password: SecretStr | None = None
36+
37+
38+
class CreateMySQLConnectionSchema(MySQLBaseSchema):
39+
host: str
40+
port: int
41+
database_name: str
42+
additional_params: dict = Field(default_factory=dict)
43+
44+
45+
class CreateMySQLAuthSchema(MySQLBaseSchema):
46+
user: str
47+
password: SecretStr

syncmaster/schemas/v1/transfers/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
ClickhouseReadTransferSourceAndTarget,
1111
HiveReadTransferSourceAndTarget,
1212
MSSQLReadTransferSourceAndTarget,
13+
MySQLReadTransferSourceAndTarget,
1314
OracleReadTransferSourceAndTarget,
1415
PostgresReadTransferSourceAndTarget,
1516
)
@@ -35,6 +36,7 @@
3536
| OracleReadTransferSourceAndTarget
3637
| ClickhouseReadTransferSourceAndTarget
3738
| MSSQLReadTransferSourceAndTarget
39+
| MySQLReadTransferSourceAndTarget
3840
| S3ReadTransferSource
3941
)
4042

@@ -45,6 +47,7 @@
4547
| OracleReadTransferSourceAndTarget
4648
| ClickhouseReadTransferSourceAndTarget
4749
| MSSQLReadTransferSourceAndTarget
50+
| MySQLReadTransferSourceAndTarget
4851
| S3ReadTransferTarget
4952
)
5053

@@ -55,6 +58,7 @@
5558
| OracleReadTransferSourceAndTarget
5659
| ClickhouseReadTransferSourceAndTarget
5760
| MSSQLReadTransferSourceAndTarget
61+
| MySQLReadTransferSourceAndTarget
5862
| S3CreateTransferSource
5963
)
6064

@@ -65,6 +69,7 @@
6569
| OracleReadTransferSourceAndTarget
6670
| ClickhouseReadTransferSourceAndTarget
6771
| MSSQLReadTransferSourceAndTarget
72+
| MySQLReadTransferSourceAndTarget
6873
| S3CreateTransferTarget
6974
)
7075

@@ -75,6 +80,7 @@
7580
| OracleReadTransferSourceAndTarget
7681
| ClickhouseReadTransferSourceAndTarget
7782
| MSSQLReadTransferSourceAndTarget
83+
| MySQLReadTransferSourceAndTarget
7884
| S3CreateTransferSource
7985
| None
8086
)
@@ -86,6 +92,7 @@
8692
| OracleReadTransferSourceAndTarget
8793
| ClickhouseReadTransferSourceAndTarget
8894
| MSSQLReadTransferSourceAndTarget
95+
| MySQLReadTransferSourceAndTarget
8996
| S3CreateTransferTarget
9097
| None
9198
)

syncmaster/schemas/v1/transfers/db.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
CLICKHOUSE_TYPE,
99
HIVE_TYPE,
1010
MSSQL_TYPE,
11+
MYSQL_TYPE,
1112
ORACLE_TYPE,
1213
POSTGRES_TYPE,
1314
)
@@ -35,3 +36,7 @@ class ClickhouseReadTransferSourceAndTarget(ReadDBTransfer):
3536

3637
class MSSQLReadTransferSourceAndTarget(ReadDBTransfer):
3738
type: MSSQL_TYPE
39+
40+
41+
class MySQLReadTransferSourceAndTarget(ReadDBTransfer):
42+
type: MYSQL_TYPE

tests/test_unit/test_connections/connection_fixtures/group_connections_fixture.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async def group_connections(
3939
"bucket": "bucket",
4040
},
4141
)
42-
elif conn_type == ConnectionType.POSTGRES:
42+
elif conn_type in [ConnectionType.POSTGRES, ConnectionType.MYSQL]:
4343
new_data.update(
4444
{
4545
"database_name": "database",

tests/test_unit/test_connections/test_create_connection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ async def test_check_fields_validation_on_create_connection(
282282
"context": {
283283
"discriminator": "'type'",
284284
"tag": "POSTGRESQL",
285-
"expected_tags": "'hive', 'oracle', 'postgres', 'clickhouse', 'mssql', 'hdfs', 's3'",
285+
"expected_tags": "'hive', 'oracle', 'postgres', 'clickhouse', 'mssql', 'mysql', 'hdfs', 's3'",
286286
},
287287
"input": {
288288
"type": "POSTGRESQL",
@@ -292,7 +292,7 @@ async def test_check_fields_validation_on_create_connection(
292292
"database_name": "postgres",
293293
},
294294
"location": ["body", "connection_data"],
295-
"message": "Input tag 'POSTGRESQL' found using 'type' does not match any of the expected tags: 'hive', 'oracle', 'postgres', 'clickhouse', 'mssql', 'hdfs', 's3'",
295+
"message": "Input tag 'POSTGRESQL' found using 'type' does not match any of the expected tags: 'hive', 'oracle', 'postgres', 'clickhouse', 'mssql', 'mysql', 'hdfs', 's3'",
296296
"code": "union_tag_invalid",
297297
},
298298
],

0 commit comments

Comments
 (0)