| 2881 | return self._with_polymorphic_selectable |
| 2882 | |
| 2883 | def _with_polymorphic_args( |
| 2884 | self, |
| 2885 | spec: Any = None, |
| 2886 | selectable: Union[Literal[False, None], FromClause] = False, |
| 2887 | innerjoin: bool = False, |
| 2888 | ) -> Tuple[Sequence[Mapper[Any]], FromClause]: |
| 2889 | if selectable not in (None, False): |
| 2890 | selectable = coercions.expect( |
| 2891 | roles.FromClauseRole, |
| 2892 | selectable, |
| 2893 | ) |
| 2894 | |
| 2895 | if self.with_polymorphic: |
| 2896 | if not spec: |
| 2897 | spec = self.with_polymorphic[0] |
| 2898 | if selectable is False: |
| 2899 | selectable = self.with_polymorphic[1] |
| 2900 | elif selectable is False: |
| 2901 | selectable = None |
| 2902 | mappers = self._mappers_from_spec(spec, selectable) |
| 2903 | if selectable is not None: |
| 2904 | return mappers, selectable |
| 2905 | else: |
| 2906 | return mappers, self._selectable_from_mappers(mappers, innerjoin) |
| 2907 | |
| 2908 | @HasMemoized.memoized_attribute |
| 2909 | def _polymorphic_properties(self): |