stores a user-defined parameter value that must be resolved and parsed later at mapper configuration time.
| 257 | |
| 258 | @dataclasses.dataclass |
| 259 | class _RelationshipArg(Generic[_T1, _T2]): |
| 260 | """stores a user-defined parameter value that must be resolved and |
| 261 | parsed later at mapper configuration time. |
| 262 | |
| 263 | """ |
| 264 | |
| 265 | __slots__ = "name", "argument", "resolved" |
| 266 | name: str |
| 267 | argument: _T1 |
| 268 | resolved: Optional[_T2] |
| 269 | |
| 270 | def _is_populated(self) -> bool: |
| 271 | return self.argument is not None |
| 272 | |
| 273 | def _resolve_against_registry( |
| 274 | self, clsregistry_resolver: Callable[[str, bool], _class_resolver] |
| 275 | ) -> None: |
| 276 | attr_value = self.argument |
| 277 | |
| 278 | if isinstance(attr_value, str): |
| 279 | self.resolved = clsregistry_resolver( |
| 280 | attr_value, self.name == "secondary" |
| 281 | )() |
| 282 | elif callable(attr_value) and not _is_mapped_class(attr_value): |
| 283 | self.resolved = attr_value() |
| 284 | else: |
| 285 | self.resolved = attr_value |
| 286 | |
| 287 | def effective_value(self) -> Any: |
| 288 | if self.resolved is not None: |
| 289 | return self.resolved |
| 290 | else: |
| 291 | return self.argument |
| 292 | |
| 293 | |
| 294 | _RelationshipOrderByArg = Union[Literal[False], Tuple[ColumnElement[Any], ...]] |