Skip to content

Commit c6afa1c

Browse files
committed
fix(domain): Added marshalling for set,add,delete,clear records
The RecordChange subtypes have not been marshalled correctly to the expected format and could not be dumped as json. This fix ensures that the subtypes are now correctly converted
1 parent 9306d13 commit c6afa1c

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

scaleway/scaleway/domain/v2beta1/marshalling.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,17 +3257,27 @@ def marshal_RecordChange(
32573257
defaults: ProfileDefaults,
32583258
) -> Dict[str, Any]:
32593259
output: Dict[str, Any] = {}
3260-
output.update(
3261-
resolve_one_of(
3260+
changeRecord = resolve_one_of(
32623261
[
32633262
OneOfPossibility("add", request.add),
32643263
OneOfPossibility("set", request.set_),
32653264
OneOfPossibility("delete", request.delete),
32663265
OneOfPossibility("clear", request.clear),
32673266
]
3268-
),
3269-
)
3270-
3267+
)
3268+
3269+
match changeRecord:
3270+
case {"set": recordChangeSet}:
3271+
output.update({"set": marshal_RecordChangeSet(recordChangeSet[0], defaults)})
3272+
case {"add": recordChangeAdd}:
3273+
output.update({"add": marshal_RecordChangeAdd(recordChangeAdd[0], defaults)})
3274+
case {"delete": recordChangeDelete}:
3275+
output.update({"delete": marshal_RecordChangeDelete(recordChangeDelete[0], defaults)})
3276+
case {"clear": recordChangeClear}:
3277+
output.update({"clear": marshal_RecordChangeClear(recordChangeClear[0], defaults)})
3278+
case _:
3279+
raise TypeError("Invalid key in change record. Only 'set', 'add', 'delete' and 'clear' are supported")
3280+
32713281
return output
32723282

32733283

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
from scaleway.domain.v2beta1.marshalling import marshal_RecordChange
3+
from scaleway_core.profile.profile import ProfileDefaults
4+
from scaleway.domain.v2beta1.types import RecordChangeSet, RecordChange, Record, RecordType
5+
6+
class TestRecordChangeMarshalling(unittest.TestCase):
7+
def test_marshalRecord(self):
8+
recordToUpdate: Record = Record(data="1.1.1.1", name="test", priority=1, ttl=3600, type_=RecordType.A, id="1536b046-23c8-4a67-9266-8828d7cd2785",
9+
comment=None, geo_ip_config=None, http_service_config=None, view_config=None, weighted_config=None)
10+
changes: RecordChange = RecordChange(
11+
set_ = [
12+
RecordChangeSet(records=[recordToUpdate], id=recordToUpdate.id, id_fields=None)
13+
],
14+
delete = None,
15+
clear = None,
16+
add = None
17+
)
18+
defaults = ProfileDefaults()
19+
actual = marshal_RecordChange(changes, defaults)
20+
21+
expected = {'set': {'id': '1536b046-23c8-4a67-9266-8828d7cd2785',
22+
'records': [{'data': '1.1.1.1',
23+
'id': '1536b046-23c8-4a67-9266-8828d7cd2785',
24+
'name': 'test',
25+
'priority': 1,
26+
'ttl': 3600,
27+
'type': 'a'}]}}
28+
self.assertEqual(actual, expected)

0 commit comments

Comments
 (0)