|
32 | 32 | MappedColumn, |
33 | 33 | NotExtension, |
34 | 34 | QueryableAttribute, |
| 35 | + Relationship, |
35 | 36 | RelationshipDirection, |
36 | 37 | RelationshipProperty, |
37 | 38 | WriteOnlyMapped, |
@@ -145,28 +146,39 @@ def _( |
145 | 146 | model_type_hints: dict[str, FieldDefinition], |
146 | 147 | model_name: str, |
147 | 148 | ) -> list[DTOFieldDefinition]: |
148 | | - if not isinstance(orm_descriptor, QueryableAttribute): |
| 149 | + if not isinstance(orm_descriptor, QueryableAttribute): # pragma: no cover |
149 | 150 | msg = f"Unexpected descriptor type for '{extension_type}': '{orm_descriptor}'" |
150 | 151 | raise NotImplementedError(msg) |
151 | 152 |
|
152 | 153 | elem: ElementType |
153 | | - if isinstance(orm_descriptor.property, ColumnProperty): # pyright: ignore[reportUnknownMemberType] |
154 | | - if not isinstance(orm_descriptor.property.expression, (Column, ColumnClause, Label)): # pyright: ignore[reportUnknownMemberType] |
| 154 | + if isinstance( |
| 155 | + orm_descriptor.property, # pyright: ignore[reportUnknownMemberType] |
| 156 | + ColumnProperty, # pragma: no cover |
| 157 | + ): |
| 158 | + if not isinstance( |
| 159 | + orm_descriptor.property.expression, # pyright: ignore[reportUnknownMemberType] |
| 160 | + (Column, ColumnClause, Label), |
| 161 | + ): |
155 | 162 | msg = f"Expected 'Column', got: '{orm_descriptor.property.expression}, {type(orm_descriptor.property.expression)}'" # pyright: ignore[reportUnknownMemberType] |
156 | 163 | raise NotImplementedError(msg) |
157 | 164 | elem = orm_descriptor.property.expression # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType] |
158 | 165 | elif isinstance(orm_descriptor.property, (RelationshipProperty, CompositeProperty)): # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType] |
159 | 166 | elem = orm_descriptor.property # pyright: ignore[reportUnknownMemberType,reportUnknownVariableType] |
160 | | - else: |
| 167 | + else: # pragma: no cover |
161 | 168 | msg = f"Unhandled property type: '{orm_descriptor.property}'" # pyright: ignore[reportUnknownMemberType] |
162 | 169 | raise NotImplementedError(msg) |
163 | 170 |
|
164 | 171 | default, default_factory = _detect_defaults(elem) |
165 | 172 |
|
166 | 173 | try: |
167 | | - if (field_definition := model_type_hints[key]).origin in {Mapped, WriteOnlyMapped, DynamicMapped}: |
| 174 | + if (field_definition := model_type_hints[key]).origin in { |
| 175 | + Mapped, |
| 176 | + WriteOnlyMapped, |
| 177 | + DynamicMapped, |
| 178 | + Relationship, |
| 179 | + }: |
168 | 180 | (field_definition,) = field_definition.inner_types |
169 | | - else: |
| 181 | + else: # pragma: no cover |
170 | 182 | msg = f"Expected 'Mapped' origin, got: '{field_definition.origin}'" |
171 | 183 | raise NotImplementedError(msg) |
172 | 184 | except KeyError: |
@@ -201,13 +213,13 @@ def _( |
201 | 213 | model_type_hints: dict[str, FieldDefinition], |
202 | 214 | model_name: str, |
203 | 215 | ) -> list[DTOFieldDefinition]: |
204 | | - if not isinstance(orm_descriptor, AssociationProxy): |
| 216 | + if not isinstance(orm_descriptor, AssociationProxy): # pragma: no cover |
205 | 217 | msg = f"Unexpected descriptor type '{orm_descriptor}' for '{extension_type}'" |
206 | 218 | raise NotImplementedError(msg) |
207 | 219 |
|
208 | 220 | if (field_definition := model_type_hints[key]).origin is AssociationProxy: |
209 | 221 | (field_definition,) = field_definition.inner_types |
210 | | - else: |
| 222 | + else: # pragma: no cover |
211 | 223 | msg = f"Expected 'AssociationProxy' origin, got: '{field_definition.origin}'" |
212 | 224 | raise NotImplementedError(msg) |
213 | 225 |
|
@@ -299,7 +311,7 @@ def generate_field_definitions(cls, model_type: type[DeclarativeBase]) -> Genera |
299 | 311 | # for each method name it is bound to. We only need to see it once, so track views of it here. |
300 | 312 | seen_hybrid_descriptors: set[hybrid_property] = set() # pyright: ignore[reportUnknownVariableType,reportMissingTypeArgument] |
301 | 313 | skipped_descriptors: set[str] = set() |
302 | | - for composite_property in mapper.composites: |
| 314 | + for composite_property in mapper.composites: # pragma: no cover |
303 | 315 | for attr in composite_property.attrs: |
304 | 316 | if isinstance(attr, (MappedColumn, Column)): |
305 | 317 | skipped_descriptors.add(attr.name) |
|
0 commit comments