@@ -273,3 +273,93 @@ class M2(M1):
273
273
Base = declarative_base(cls=(M1, M2)) # E: Not able to calculate MRO for declarative base
274
274
reveal_type(Base) # E: Revealed type is 'Any'
275
275
[out]
276
+
277
+ [case testRelationshipIsGuessed]
278
+ from sqlalchemy import Column, Integer, String, ForeignKey
279
+ from sqlalchemy.orm import relationship
280
+ from sqlalchemy.ext.declarative import declarative_base
281
+
282
+ Base = declarative_base()
283
+
284
+ class Parent(Base):
285
+ __tablename__ = 'parents'
286
+ id = Column(Integer, primary_key=True)
287
+ name = Column(String)
288
+
289
+ children = relationship("Child")
290
+
291
+ class Child(Base):
292
+ __tablename__ = 'children'
293
+ id = Column(Integer, primary_key=True)
294
+ name = Column(String)
295
+ parent_id = Column(Integer, ForeignKey(Parent.id))
296
+
297
+ parent = relationship(Parent)
298
+
299
+ child: Child
300
+ parent: Parent
301
+
302
+ reveal_type(child.parent) # E: Revealed type is 'main.Parent*'
303
+ reveal_type(parent.children) # E: Revealed type is 'typing.Iterable*[main.Child]'
304
+
305
+ [out]
306
+
307
+ [case testRelationshipIsGuessed2]
308
+ from sqlalchemy import Column, Integer, String, ForeignKey
309
+ from sqlalchemy.orm import relationship
310
+ from sqlalchemy.ext.declarative import declarative_base
311
+
312
+ Base = declarative_base()
313
+
314
+ class Parent(Base):
315
+ __tablename__ = 'parents'
316
+ id = Column(Integer, primary_key=True)
317
+ name = Column(String)
318
+
319
+ children = relationship("Child")
320
+
321
+ class Child(Base):
322
+ __tablename__ = 'children'
323
+ id = Column(Integer, primary_key=True)
324
+ name = Column(String)
325
+ parent_id = Column(Integer, ForeignKey("parents.id"))
326
+
327
+ parent = relationship(Parent)
328
+
329
+ child: Child
330
+ parent: Parent
331
+
332
+ reveal_type(child.parent) # E: Revealed type is 'main.Parent*'
333
+ reveal_type(parent.children) # E: Revealed type is 'typing.Iterable*[main.Child]'
334
+
335
+ [out]
336
+
337
+ [case testRelationshipIsGuessed3]
338
+ from sqlalchemy import Column, Integer, String, ForeignKey
339
+ from sqlalchemy.orm import relationship
340
+ from sqlalchemy.ext.declarative import declarative_base
341
+
342
+ Base = declarative_base()
343
+
344
+ class Parent(Base):
345
+ __tablename__ = 'parents'
346
+ id = Column(Integer, primary_key=True)
347
+ name = Column(String)
348
+
349
+ children = relationship("Child")
350
+
351
+ class Child(Base):
352
+ __tablename__ = 'children'
353
+ id = Column(Integer, primary_key=True)
354
+ name = Column(String)
355
+ parent_id = Column(Integer, ForeignKey("other_parents.id"))
356
+
357
+ parent = relationship(Parent)
358
+
359
+ child: Child
360
+ parent: Parent
361
+
362
+ reveal_type(child.parent) # E: Revealed type is 'main.Parent*'
363
+ reveal_type(parent.children) # E: Revealed type is 'main.Child*'
364
+
365
+ [out]
0 commit comments