Coverage for benefits/enrollment/api.py: 100%
16 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-08 19:50 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-08 19:50 +0000
1import logging
2from inspect import signature
4logger = logging.getLogger(__name__)
7class BaseDataClass:
9 @classmethod
10 def from_kwargs(cls, **kwargs):
11 """
12 @classmethod for instantiating a dataclass that allows unexpected fields
14 See https://stackoverflow.com/a/55101438
15 """
16 # fetch the constructor's signature
17 class_fields = {field for field in signature(cls).parameters}
19 # split the kwargs into native ones and new ones
20 native_args, new_args = {}, {}
21 for name, val in kwargs.items():
22 if name in class_fields:
23 native_args[name] = val
24 else:
25 new_args[name] = val
27 # use the native ones to create the class ...
28 instance = cls(**native_args)
30 # ... and log any unexpected args
31 for new_name, new_val in new_args.items():
32 logger.info(f"Unexpected arg parsing response for {cls}: {new_name} = {new_val}")
34 return instance