|
17 | 17 | from marshmallow.fields import List as ListField |
18 | 18 | from marshmallow.validate import Validator |
19 | 19 |
|
20 | | -from marshmallow_dataclass import NewType, _is_generic_alias_of_dataclass, class_schema |
| 20 | +from marshmallow_dataclass import NewType, class_schema |
21 | 21 |
|
22 | 22 |
|
23 | 23 | class TestClassSchema(unittest.TestCase): |
@@ -460,79 +460,6 @@ class Meta: |
460 | 460 | self.assertNotIn("no_init", class_schema(NoInit)().fields) |
461 | 461 | self.assertIn("no_init", class_schema(Init)().fields) |
462 | 462 |
|
463 | | - def test_generic_dataclass(self): |
464 | | - T = typing.TypeVar("T") |
465 | | - |
466 | | - @dataclasses.dataclass |
467 | | - class SimpleGeneric(typing.Generic[T]): |
468 | | - data: T |
469 | | - |
470 | | - @dataclasses.dataclass |
471 | | - class NestedFixed: |
472 | | - data: SimpleGeneric[int] |
473 | | - |
474 | | - @dataclasses.dataclass |
475 | | - class NestedGeneric(typing.Generic[T]): |
476 | | - data: SimpleGeneric[T] |
477 | | - |
478 | | - self.assertTrue(_is_generic_alias_of_dataclass(SimpleGeneric[int])) |
479 | | - self.assertFalse(_is_generic_alias_of_dataclass(SimpleGeneric)) |
480 | | - |
481 | | - schema_s = class_schema(SimpleGeneric[str])() |
482 | | - self.assertEqual(SimpleGeneric(data="a"), schema_s.load({"data": "a"})) |
483 | | - self.assertEqual(schema_s.dump(SimpleGeneric(data="a")), {"data": "a"}) |
484 | | - with self.assertRaises(ValidationError): |
485 | | - schema_s.load({"data": 2}) |
486 | | - |
487 | | - schema_nested = class_schema(NestedFixed)() |
488 | | - self.assertEqual( |
489 | | - NestedFixed(data=SimpleGeneric(1)), |
490 | | - schema_nested.load({"data": {"data": 1}}), |
491 | | - ) |
492 | | - self.assertEqual( |
493 | | - schema_nested.dump(NestedFixed(data=SimpleGeneric(data=1))), |
494 | | - {"data": {"data": 1}}, |
495 | | - ) |
496 | | - with self.assertRaises(ValidationError): |
497 | | - schema_nested.load({"data": {"data": "str"}}) |
498 | | - |
499 | | - schema_nested_generic = class_schema(NestedGeneric[int])() |
500 | | - self.assertEqual( |
501 | | - NestedGeneric(data=SimpleGeneric(1)), |
502 | | - schema_nested_generic.load({"data": {"data": 1}}), |
503 | | - ) |
504 | | - self.assertEqual( |
505 | | - schema_nested_generic.dump(NestedGeneric(data=SimpleGeneric(data=1))), |
506 | | - {"data": {"data": 1}}, |
507 | | - ) |
508 | | - with self.assertRaises(ValidationError): |
509 | | - schema_nested_generic.load({"data": {"data": "str"}}) |
510 | | - |
511 | | - def test_generic_dataclass_repeated_fields(self): |
512 | | - T = typing.TypeVar("T") |
513 | | - |
514 | | - @dataclasses.dataclass |
515 | | - class AA: |
516 | | - a: int |
517 | | - |
518 | | - @dataclasses.dataclass |
519 | | - class BB(typing.Generic[T]): |
520 | | - b: T |
521 | | - |
522 | | - @dataclasses.dataclass |
523 | | - class Nested: |
524 | | - x: BB[float] |
525 | | - z: BB[float] |
526 | | - # if y is the first field in this class, deserialisation will fail. |
527 | | - # see https://github.com/lovasoa/marshmallow_dataclass/pull/172#issuecomment-1334024027 |
528 | | - y: BB[AA] |
529 | | - |
530 | | - schema_nested = class_schema(Nested)() |
531 | | - self.assertEqual( |
532 | | - Nested(x=BB(b=1), z=BB(b=1), y=BB(b=AA(1))), |
533 | | - schema_nested.load({"x": {"b": 1}, "z": {"b": 1}, "y": {"b": {"a": 1}}}), |
534 | | - ) |
535 | | - |
536 | 463 |
|
537 | 464 | if __name__ == "__main__": |
538 | 465 | unittest.main() |
0 commit comments