class Site(AssocTest): id = Field() name = Field() maintainer_id = Field() maintainer = BelongsTo(klass=lambda: Person) headline = HasOne(klass=lambda: Article) master_comment = HasOne(as_='parent', class_name='Comment') fun_articles = HasOne(class_name='Article', conditions='1', sql=lambda s: """ SELECT articles.* FROM articles WHERE articles.text LIKE %%monkeyonabobsled%% AND articles.site_id = %s """ % s.id) articles = HasMany(class_name='Article', namespace='tests.fixtures.association_models') comments = HasMany(as_='parent', class_name='Comment') awesome_comments = HasMany(class_name='Comment', conditions='1', sql=lambda s: """ SELECT comments.* FROM comments WHERE comments.text LIKE '%%awesome%%' AND parent_type = "Site" AND parent_id = %s """ % s.id) article_comments = HasMany(through='articles', source='comments')
class HelpModel(pyperry.Base): """a model with a docstring""" attr1 = Field() attr2 = Field() foo = BelongsTo(polymorphic=True) ape = BelongsTo() bars = HasMany(through='bananas') bananas = HasMany()
class Article(AssocTest): id = Field() site_id = Field() author_id = Field() title = Field() text = Field() site = BelongsTo(class_name='Site') author = BelongsTo(class_name='Person') comments = HasMany(as_='parent', class_name='Comment') awesome_comments = HasMany(as_='parent', class_name='Comment', conditions="text LIKE '%awesome%'") comment_authors = HasMany(through='comments', source='author')
def test_has_many(self): """ should use the target class's primary key in a has many association """ association = HasMany(target_klass=TargetModel, id='whatever', class_name='SourceModel') self.assertEqual(association.primary_key(), TargetModel.primary_key())
class DirModel(pyperry.Base): id = Field() foo = Field() bar = Field() owner = BelongsTo() children = HasMany()
def test_get_descriptor(self): """should return first object in scope""" TestAdapter.data = { 'id': 1 } class Test(fixtures.association_models.AssocTest): id = Field() foo_id = Field() assoc = HasMany(target_klass=Test, id='foo', klass=Test) Test.foo = assoc instance = Test(id=1, foo_id=1) self.assertEqual(Test.foo, assoc) self.assertEqual(type(instance.foo), Relation)
class Person(AssocTest): id = Field() name = Field() manager_id = Field() company_id = Field() manager = BelongsTo(class_name='Person', foreign_key='manager_id') authored_comments = HasMany(class_name='Comment', foreign_key='person_id') articles = HasMany(class_name='Article', foreign_key='author_id') comments = HasMany(as_='parent', class_name='Comment') employees = HasMany(class_name='Person', foreign_key='manager_id') sites = HasMany(class_name='Site', foreign_key='maintainer_id') commented_articles = HasMany(through='comments', source='parent', source_type='Article') maintained_articles = HasMany(through='sites', source='articles')
def setUp(self): self.klass = fixtures.association_models.Test self.id = 'has_many' self.foreign_key = 'some_id' self.has_many = HasMany(target_klass=self.klass, id=self.id)
class AssociationModel(pyperry.Base): you = BelongsTo() foo = BelongsTo(polymorphic=True) bar = HasOne() bizs = HasMany() bazs = HasMany(through='bizs')
class Company(AssocTest): id = Field() name = Field() employees = HasMany(class_name='Person', namespace='tests.fixtures.extended_association_models')