Skip to content

Commit 83b9588

Browse files
[DOP-23976] Use PUT instead of PATCH for connections & transfers (#215)
1 parent 5dc13db commit 83b9588

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+487
-839
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use PUT instead of PATCH for `Connection` and `Transfer` models

syncmaster/db/repositories/connection.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,17 @@ async def create(
8989
async def update(
9090
self,
9191
connection_id: int,
92-
name: str | None,
93-
type: str | None,
94-
description: str | None,
92+
name: str,
93+
type: str,
94+
description: str,
9595
data: dict[str, Any],
9696
) -> Connection:
9797
try:
98-
connection = await self.read_by_id(connection_id=connection_id)
99-
for key in connection.data:
100-
data[key] = data.get(key, None) or connection.data[key]
101-
10298
return await self._update(
10399
Connection.id == connection_id,
104-
type=type or connection.type,
105-
name=name or connection.name,
106-
description=description or connection.description,
100+
type=type,
101+
name=name,
102+
description=description,
107103
data=data,
108104
)
109105
except IntegrityError as e:

syncmaster/db/repositories/credentials_repository.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,7 @@ async def update(
7171
connection_id: int,
7272
data: dict,
7373
) -> AuthData:
74-
creds = await self.read(connection_id)
7574
try:
76-
for key in creds:
77-
data[key] = data.get(key, None) or creds[key]
7875
return await self._update(
7976
AuthData.connection_id == connection_id,
8077
value=encrypt_auth_data(value=data, settings=self._settings),

syncmaster/db/repositories/transfer.py

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -150,44 +150,35 @@ async def create(
150150

151151
async def update(
152152
self,
153-
transfer: Transfer,
154-
name: str | None,
155-
description: str | None,
156-
source_connection_id: int | None,
157-
target_connection_id: int | None,
153+
transfer_id: int,
154+
name: str,
155+
description: str,
156+
source_connection_id: int,
157+
target_connection_id: int,
158158
source_params: dict[str, Any],
159159
target_params: dict[str, Any],
160160
strategy_params: dict[str, Any],
161161
transformations: list[dict[str, Any]],
162162
resources: dict[str, Any],
163-
is_scheduled: bool | None,
163+
is_scheduled: bool,
164164
schedule: str | None,
165-
new_queue_id: int | None,
165+
queue_id: int,
166166
) -> Transfer:
167167
try:
168-
for old, new in [
169-
(transfer.source_params, source_params),
170-
(transfer.target_params, target_params),
171-
(transfer.strategy_params, strategy_params),
172-
]:
173-
for key in old:
174-
if key not in new or new[key] is None:
175-
new[key] = old[key]
176-
177168
return await self._update(
178-
Transfer.id == transfer.id,
179-
name=name or transfer.name,
180-
description=description or transfer.description,
169+
Transfer.id == transfer_id,
170+
name=name,
171+
description=description,
181172
strategy_params=strategy_params,
182-
is_scheduled=is_scheduled if is_scheduled is not None else transfer.is_scheduled,
183-
schedule=schedule or transfer.schedule,
184-
source_connection_id=source_connection_id or transfer.source_connection_id,
185-
target_connection_id=target_connection_id or transfer.target_connection_id,
173+
is_scheduled=is_scheduled,
174+
schedule=schedule or "",
175+
source_connection_id=source_connection_id,
176+
target_connection_id=target_connection_id,
186177
source_params=source_params,
187178
target_params=target_params,
188-
transformations=transformations or transfer.transformations,
189-
resources=resources or transfer.resources,
190-
queue_id=new_queue_id or transfer.queue_id,
179+
transformations=transformations,
180+
resources=resources,
181+
queue_id=queue_id,
191182
)
192183
except IntegrityError as e:
193184
self._raise_error(e)

syncmaster/exceptions/connection.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class ConnectionTypeUpdateError(SyncmasterError):
1919
pass
2020

2121

22+
class ConnectionAuthDataUpdateError(SyncmasterError):
23+
pass
24+
25+
2226
class UserDoNotHaveRightsInTheTargetGroupError(SyncmasterError):
2327
pass
2428

syncmaster/schemas/v1/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
ReadFullTransferSchema,
2929
ReadTransferSchema,
3030
TransferPageSchema,
31-
UpdateTransferSchema,
3231
)
3332
from syncmaster.schemas.v1.transfers.db import (
3433
HiveReadTransferSourceAndTarget,

syncmaster/schemas/v1/auth/basic.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ class ReadBasicAuthSchema(BasicAuthSchema):
1818
user: str
1919

2020

21-
class UpdateBasicAuthSchema(BasicAuthSchema):
22-
user: str | None = None # noqa: F722
21+
class UpdateBasicAuthSchema(CreateBasicAuthSchema):
2322
password: SecretStr | None = None
23+
24+
@property
25+
def secret_field(self) -> str:
26+
return "password"

syncmaster/schemas/v1/auth/s3.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ class ReadS3AuthSchema(S3AuthSchema):
1818
access_key: str
1919

2020

21-
class UpdateS3AuthSchema(S3AuthSchema):
22-
access_key: str | None = None
21+
class UpdateS3AuthSchema(CreateS3AuthSchema):
2322
secret_key: SecretStr | None = None
23+
24+
@property
25+
def secret_field(self) -> str:
26+
return "secret_key"

syncmaster/schemas/v1/auth/samba.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ class ReadSambaAuthSchema(SambaAuthSchema):
2020
auth_type: Literal["NTLMv1", "NTLMv2"]
2121

2222

23-
class UpdateSambaAuthSchema(SambaAuthSchema):
24-
user: str | None = None
23+
class UpdateSambaAuthSchema(CreateSambaAuthSchema):
2524
password: SecretStr | None = None
26-
auth_type: Literal["NTLMv1", "NTLMv2"] | None = None
25+
26+
@property
27+
def secret_field(self) -> str:
28+
return "password"

syncmaster/schemas/v1/connections/clickhouse.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
from syncmaster.schemas.v1.auth import (
66
CreateBasicAuthSchema,
77
ReadBasicAuthSchema,
8-
UpdateBasicAuthSchema,
98
)
9+
from syncmaster.schemas.v1.auth.basic import UpdateBasicAuthSchema
1010
from syncmaster.schemas.v1.connection_types import CLICKHOUSE_TYPE
1111
from syncmaster.schemas.v1.connections.connection_base import (
1212
CreateConnectionBaseSchema,
1313
ReadConnectionBaseSchema,
14-
UpdateConnectionBaseSchema,
1514
)
1615

1716

@@ -29,13 +28,6 @@ class ReadClickhouseConnectionDataSchema(BaseModel):
2928
additional_params: dict = Field(default_factory=dict)
3029

3130

32-
class UpdateClickhouseConnectionDataSchema(BaseModel):
33-
host: str | None = None
34-
port: int | None = None
35-
database_name: str | None = None
36-
additional_params: dict | None = Field(default_factory=dict)
37-
38-
3931
class CreateClickhouseConnectionSchema(CreateConnectionBaseSchema):
4032
type: CLICKHOUSE_TYPE = Field(..., description="Connection type")
4133
data: CreateClickhouseConnectionDataSchema = Field(
@@ -56,7 +48,7 @@ class ReadClickhouseConnectionSchema(ReadConnectionBaseSchema):
5648
auth_data: ReadBasicAuthSchema | None = None
5749

5850

59-
class UpdateClickhouseConnectionSchema(UpdateConnectionBaseSchema):
60-
type: CLICKHOUSE_TYPE
61-
data: UpdateClickhouseConnectionDataSchema | None = Field(alias="connection_data", default=None)
62-
auth_data: UpdateBasicAuthSchema | None = None
51+
class UpdateClickhouseConnectionSchema(CreateClickhouseConnectionSchema):
52+
auth_data: UpdateBasicAuthSchema = Field(
53+
description="Credentials for authorization",
54+
)

0 commit comments

Comments
 (0)