(cls: type[BaseFileLock])
| 472 | |
| 473 | |
| 474 | def _init_parameter_model(cls: type[BaseFileLock]) -> _InitParameterModel: |
| 475 | # A strong cache would keep dynamically created subclasses alive for the process lifetime. |
| 476 | with _fork_transition(), _FORK_STATE.parameter_models_lock: |
| 477 | if (model := _INIT_PARAMETER_MODELS.get(cls)) is None: |
| 478 | parameters = inspect.signature(cls.__init__).parameters.values() |
| 479 | model = _InitParameterModel( |
| 480 | accepted_params=frozenset( |
| 481 | parameter.name |
| 482 | for parameter in parameters |
| 483 | if parameter.kind in {inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY} |
| 484 | ), |
| 485 | accepts_kwargs=any(parameter.kind is inspect.Parameter.VAR_KEYWORD for parameter in parameters), |
| 486 | default_params={ |
| 487 | name: parameter |
| 488 | for name, parameter in inspect.signature(type(cls).__call__).parameters.items() |
| 489 | if parameter.default is not inspect.Parameter.empty |
| 490 | }, |
| 491 | ) |
| 492 | _INIT_PARAMETER_MODELS[cls] = model |
| 493 | return model |
| 494 | |
| 495 | |
| 496 | @dataclass(frozen=True) |
no test coverage detected